繁体   English   中英

RESTful Web 服务中复合对象的 URI

[英]URIs for composite objects in RESTful web service

我已经创建了路径:

POST /books/4/chapters 

Chapter实体是Book组合的一部分。 没有书就不可能存在于系统中。 现在通过发布到上面的 URI 创建章节后,我应该为答案资源创建另一组 URI 以更新和获取特定章节吗?

GET /books/4/chapters/6还是GET /chapters/6

请记住,一旦您拥有某个级别的主键,您通常就不需要包含以上级别,因为您已经拥有了您的特定对象。 换句话说,您不应该需要太多 URL 比我们上面的 /resource/identifier/resource 更深的情况。

来自 apigee Web API 设计

这个GET /chapters/6更符合文章所说的内容,但这也意味着您的对象不再在其父对象的范围内(因为它是类 Book 的复合对象的一部分)。 但是我觉得这更好,因为章节可能是其他对象的组合,这意味着你会得到长嵌套的 URI

GET /books/4/chapters/5/paragrahps/5如果一切都应该在父级的范围内。

这样做的首选方式是什么

编辑

经过更多思考后,最好使用/books/4/chapters/9等 URI,因为您在代码中没有用于检索没有父级的特定反馈的存储库等,因为它是一个组合?

我会做的绝对是你提到的方式。 例如 :

/books/4/chapters -- GET : Retrieve full list of chapters of the book
/books/4/chapters/9 -- GET : Retrieve the 9th chapter of book 4. 

重要的关键字是of 这是一本书的一章,没有它的书来呈现它是完全无关的。 只做/chapters/9是很不清楚的。 您将其视为一个完整的实体,而它实际上是一本书的子集。

使用上面说明的方式,您将获得非常清晰的 URI。 您正在检索一个特定资源(第 9 章),它是另一个资源的子资源(因此,您必须提到“超级”资源)。

我真的建议您看看 Symfony 团队成员 David Zülke 的精彩演讲 这是一个关于 REST 的与语言无关的演示。 更准确地说,它讨论了从 16min~ 到 30min~ 的 URI,但整个演示文稿很棒,值得一看。


关于apigee演示的说明

我今天看了,虽然我同意他们,但在大多数情况下。 我在这里看到一件事。 虽然能够通过以下方式检索一章可能很棒

/chapter/{its id} -- GET

问题是,在某些情况下,您想要一本书第 9,而不一定检索238723(不清楚是第 9 章)。 在这种情况下,通过执行以下操作来检索它更有意义:

/books/4/chapters/9 -- GET

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM