在REST模型中嵌套资源的正确方法是什么?


14

我正在设计服务的REST API,并陷入了嵌套资源的正确方法。

资源:合作伙伴,票证,设置

资源之间的联系:

  • 伙伴有很多票,
  • 合作伙伴有一组设置,

业务逻辑:

  • 您可以将所有合作伙伴列为匿名用户,
  • 您可以将新票证添加为指定合作伙伴的匿名用户,
  • 只有伙伴可以列出他的门票,
  • 只有合作伙伴可以修改票证,
  • 只有合作伙伴可以列出设置,
  • 只有合作伙伴可以修改设置,

到目前为止,我所做的是:

合作伙伴资源

GET / partners-列出所有合作伙伴
GET / partners /:id-显示由:id参数指定的合作伙伴的详细信息
GET / partners /:partner_id / tickets-合作伙伴的票据列表
GET / partners /:partner_id / tickets /:id-详细信息指定伙伴的工单的
POST / partners /:partner_id / tickets-保存新工单
PUT / partners /:partner_id / tickets /:id-更新由:id参数指定的工单
GET / partners /:partner_id / settings-列出伙伴的设置
PUT / partners /:partner_id / settings-更新合作伙伴的设置

问题/疑问

将嵌套资源(票证,设置)拆分为单独的资源或将其复制为单独的资源是否是正确的方法?

例如

GET / tickets /:id
POST / tickets
PUT / tickets /:id

GET /设置
PUT /设置

Answers:


8

HATEOAS

GET /partners/:partner_id/tickets -伙伴票证列表,即返回URI列表,可能是以下形式 /tickets/:id

GET /partners/:partner_id/tickets/:id - 没有必要

POST /partners/:partner_id/tickets -创建票证并与合作伙伴相关联,返回带有新URI的201,格式为 /tickets/:id


2
现在我了解更多。非常感谢:)但是性能呢?让我们假设这种情况:您想创建带有一些简短信息的故障单列表。您必须请求合作伙伴的门票清单,然后再单独请求每张门票。我对吗?
Przemek

嗯,是。或者您可以使/partners/:partner_id/tickets列表包含每个故障单的一些有用数据,而不仅仅是故障单的规范URI。例如,在JSON中可以是[{href='/tickets/12',value=10,due='2013-08-13'},{href='/tickets/18',value=7,due='2013-09-02'}],因此客户端可以立即显示一些表,并获取/放入完整的票证资源以进行额外的操作。
哈维尔2013年

好的,很清楚。
2013年

顺便说一句。对于/ partners /:partner_id / tickets,是否应在合作伙伴或票据资源部分中提供文档?
Przemek

@Javier删除该怎么办?DELETE /tickets/:id
Mengdi Gao 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.