[英]Resource URIs not working in Java RESTful web service on tomcat 8 server
[英]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,但整个演示文稿很棒,值得一看。
我今天看了,虽然我同意他们,但在大多数情况下。 我在这里看到一件事。 虽然能够通过以下方式检索一章可能很棒
/chapter/{its id} -- GET
问题是,在某些情况下,您想要一本书的第 9章,而不一定检索第238723章(不清楚是第 9 章)。 在这种情况下,通过执行以下操作来检索它更有意义:
/books/4/chapters/9 -- GET
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.