REST设计:资源动词或相关集合?

时间:2014-12-01 21:35:26

标签: rest

一种方法是说您应该保持资源网址的简单性。我们在HTTP和资源名称中有动词作为路径。所以我们可以:

GET /books/12

如果我们想要获取相关的集合,我们可以这样做:

GET /books/12/pages

另一方面,有一种做法是使用所谓的资源动词,你可以在其中微调动词操作:

POST /books/12/bookmark

我不会将这两种方法用于我的API。我倾向于认为第一种方法更正确(即资源名称中不允许使用动词),并且为第二种方法建模我们可能使用不同的实体,例如:

POST /book-bookmarks/12/

或不同的id:

POST /bookmarks/12+book/

我知道这没有真正的答案,但哪一个更受欢迎?我希望看到那些实际经历过像这样的设计决策的人的答案。

1 个答案:

答案 0 :(得分:0)

URI(或IRI)是关于识别资源的standard。这些资源可以是Web文档,真实的东西等......在目前的情况下,它们是Web文档。据我所知。关于URI结构没有标准,但URI标准和HTTP标准建议您应该以过程方式使用URI和HTTP方法。因此HTTP谓词描述了过程,URI标识了过程的对象。现在,您通常使用动词描述过程,并且通常使用名词描述对象。这就是为什么在URI结构中仅使用名词是合乎逻辑的,至少在它的(分层)路径部分中是这样。

(你通常可以使用标准的HTTP方法和专有名词来解决所有问题。只有非常特殊的事情才会导致问题。在这些情况下,我认为使用新的HTTP方法比将动词放入URI更好。但是非常罕见。例如,使用查询字符串非兼容参数进行搜索,例如文件就是这种情况。在这些情况下,另一种替代方法是在URI中使用POST和动词。)