我正试图解决 REST 中“集合”和“商店”之间的区别。从我到目前为止所读到的,
一个集合是:
"a server-managed directory of resources"
一个商店是:
"client-managed resource repository"
我找到了这个帖子:How "store" REST archetype isn't creating a new resource and a new URI?
但这并没有真正帮助我澄清差异。我的意思是,我知道一个由服务器控制,另一个由客户端控制......但是有人能给我一个具体的例子来说明商店在现实世界的应用程序中可能是什么吗?
我*认为是这样的:
GET http://myrestapplication.com/widgets/{widget_id} -- retrieves a widget from db
POST http://myrestapplication.com/widgets/{widget_id} -- creates a new widget from db
PUT http://myrestapplication.com/widgets/{widget_id},[list of updated parms & their vals] -- update widget
PUT http://myrestapplication.com/users/johndoe/mywishlist/{widget_id} -- updates john doe's profile to add a widget that already exists in the database... but links to it as his favorite one or one that he wants to buy
这样对吗?
如果是这样,最后一个 PUT 是否也可以以某种方式表示为 POST?
编辑 1
我找到了我正在阅读的这本书的在线链接……它区分了两者:
https://books.google.ca/books?id=4lZcsRwXo6MC&pg=PA16&lpg=PA16&dq=A+store+is+a+client-managed+resource+repository.+A+store+resource+lets+an+API+client:+put+resources+in,+get+them+back+out,+and+decide+when+to+delete+them&source=bl&ots=F4CkbFkweL&sig=H6eKZMPR_jQdeBZkBL1h6hVkK_E&hl=en&sa=X&ei=BB-vVJX6HYWvyQTByYHIAg&ved=0CB0Q6AEwAA#v=onepage&q=A%20store%20is%20a%20client-managed%20resource%20repository.%20A%20store%20resource%20lets%20an%20API%20client%3A%20put%20resources%20in%2C%20get%20them%20back%20out%2C%20and%20decide%20when%20to%20delete%20them&f=false
最佳答案
REST 使用 http 动词来操作资源。句号。就是这样。为了构建某些类基于浏览器的应用程序,开发人员有时会使用本地存储(store
),但这与 REST 完全无关(实际上,恰恰相反)。在基于 REST 的 API 设计中,集合是一个特殊的考虑因素,因为 REST 原则对它们在查询结果中的表示方式施加了相当大的限制——特别考虑也是因为没有关于这些东西应该如何表示和访问的标准,如果你'正在使用除 html 以外的任何资源类型。
编辑:
REST 建议,当我们请求资源时,我们会收到该资源,并且只有该资源以及该资源引用的内容作为链接返回,而不是作为数据返回。这模仿了我们返回请求的页面和指向其他页面的链接而不是嵌入链接页面的 http 标准。所以,我们的资源应该返回相关资源的链接,而不是资源本身。
那么,集合呢?
让我们以具有 Course
的学院管理系统为例。每个对象都包含大量的学生列表。
当我GET
course
我不想拥有students
的集合作为嵌入列表返回,因为这可能很大,而且我的用户可能不感兴趣。相反,我想知道 course
有一个 students collection
并且我希望能够单独查询该集合(当我需要时)并且我希望能够按需对其进行分页。为此,course
需要链接到students collection
URL(可能具有适当的类型,以便我的代码知道如何处理链接)。然后,我想使用给定集合的 url 来请求资源的分页列表。在这个例子中,集合的 url 可能是这样的:course/1/students
,按照惯例,我可以将分页信息添加到搜索字符串中,以使用类似 course/1/students?page=1&count=10
的内容来限制结果。 .嵌入students collection
进course
资源将违反 REST。我不会返回 course
, 我会回来的 course-and-students
.
关于web-services - REST 中的集合和商店有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27847548/