我的域模型中有一个特定的案例,现在我很难以其他方式设计这种情况。
我的域名中有3个实体:订单,卖家和公司
公司就像一家小公司,属于另一家公司(更大),就像一个品牌。例如:Zappos是亚马逊的品牌。
卖方是一家可以在品牌门户/网站上销售产品的公司,例如:Market Place。
最后,Order可以属于一个品牌(例如:亚马逊或Zappos),也可以属于卖家。
我认为Order实体是我API的主要资源:
GET order?status=NEW
GET order/{id}
问题是:如何设计我的API,例如,检索品牌或卖家的所有已打开的订单?
我不能以这种方式创建(下面),因为我将有两个名为“order”的子资源,其中包含两个不同的主要资源:
GET seller/{id}/order?status=NEW
GET company/{id}/order?status=NEW
如果我以这种方式创建(下方)我无法检索卖家或公司的订单过滤:
GET order?status=NEW
这种方法的另一个问题是,因为订单总是属于资源(公司或卖方)所以这个资源作为主要资源单独存在似乎很奇怪。
什么是解决这个问题的最佳方法?
答案 0 :(得分:1)
考虑以关系方式分离您的数据,以便您可以:
GET /orders
GET /sellers
GET /companies
并且:
GET /orders/{id}
GET /sellers/{id}
GET /companies/{id}
每个都将返回您定义的默认行数,默认排序顺序,或者如果指定了id,则返回该特定行。
当您需要构建关系查询时,您可以执行以下操作:
GET /orders/?status=new&brand=zappos
GET /sellers/?status=new&company=amazon
GET /sellers/?status=closed&company=amazon&limit=10
或者,如果您需要更高级的关系查询,可以设计后端来处理简单查询:
urlencode this:status==new,date_created>1386652468
GET /orders/?ql=status%3D%3Dnew%2Cdate_created%3E1386652468
不知道你的约束,我不一定推荐这是最佳/唯一的方法,但是像这样分离数据是API的最佳实践。您可以根据登录的人员控制哪些品牌可见。如果您需要某人管理多个品牌,会发生什么?