首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >REST将资源设计为主资源和子资源

REST将资源设计为主资源和子资源
EN

Stack Overflow用户
提问于 2013-12-10 02:47:15
回答 1查看 837关注 0票数 0

我在我的领域模型中有一个具体的例子,现在我有一些困难来设计这种情况在其他的方式。

我有三个实体在我的领域:订单,卖方和公司

公司就像一家小公司,属于另一家公司(更大),就像一个品牌。例: Zappos是亚马逊的一个品牌。

卖方是一家可以在品牌门户/网站上销售产品的公司,例如:市场场所。

最后,订单可以属于一个品牌(例如: Amazon或Zappos),也可以属于销售商。

在Order实体中,我认为它是API的主要资源:

代码语言:javascript
复制
GET order?status=NEW
GET order/{id}

问题是:例如,我如何设计API来检索所有已打开的品牌订单或销售商订单?

我不能以这种方式创建(下面),因为我将有两个名为"order“的子资源,其中有两个不同的主资源:

代码语言:javascript
复制
GET seller/{id}/order?status=NEW
GET company/{id}/order?status=NEW

如果我以这种方式创建(下面),我无法检索卖方或公司过滤的订单:

代码语言:javascript
复制
GET order?status=NEW

这种方法的另一个问题是,由于订单总是属于资源(公司或卖方),因此似乎奇怪的是,这种资源作为主要资源单独存在。

解决这个问题的最好方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2013-12-10 05:17:31

考虑以关系方式分离数据,以便您可以:

代码语言:javascript
复制
GET /orders
GET /sellers
GET /companies

和:

代码语言:javascript
复制
GET /orders/{id}
GET /sellers/{id}
GET /companies/{id}

其中每一个都将返回您定义的默认行数(按默认排序顺序),或者如果指定了id,则返回该特定行。

当您需要构建关系查询时,您可以:

代码语言:javascript
复制
GET /orders/?status=new&brand=zappos
GET /sellers/?status=new&company=amazon
GET /sellers/?status=closed&company=amazon&limit=10

或者,如果需要更高级的关系查询,可以设计后端来处理简单的查询:

urlencode:status==new,date_created>1386652468

代码语言:javascript
复制
GET /orders/?ql=status%3D%3Dnew%2Cdate_created%3E1386652468

不知道您的约束条件,我不一定推荐这是最好的/唯一的方法,但分离这样的数据是API最佳实践。您可以根据登录的用户来控制哪些品牌是可见的。如果您需要有人管理多个品牌,会发生什么情况?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20485100

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档