4

我已经创建了路径:

POST /books/4/chapters 

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

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

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

来自 apigee Web API 设计

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

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

这样做的首选方法是什么

编辑

经过更多思考之后,最好有类似/books/4/chapters/9等的URI,因为您在代码中没有存储库等来检索没有父级的特定反馈,因为它是复合的?

4

1 回答 1

4

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

/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 的与语言无关的演示文稿。更准确地说,它讨论了从 16 分钟到 30 分钟的 URI,但整个演示文稿都很棒,值得一看。


关于apigee演示文稿的说明

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

/chapter/{its id} -- GET

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

/books/4/chapters/9 -- GET
于 2013-04-21T19:05:59.330 回答