REST 中的集合和商店有什么区别?

问题描述 投票:0回答:2

我正在尝试理解 REST 中“集合”和“存储”之间的区别。从我到目前为止所读到的内容来看,

集合是:

 "a server-managed directory of resources"

商店是:

 "client-managed resource repository"

我找到了这篇文章:“存储”REST 原型如何不创建新资源和新 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+客户端管理+资源+存储库。+A+store+resource+lets+an+API +客户端:+放置+资源+输入,+获取+它们+返回+输出,+和+决定+何时+删除+它们&source=bl&ots=F4CkbFkweL&sig=H6eKZMPR_jQdeBZkBL1h6hVkK_E&hl=en&sa=X&ei=BB-vVJX6HYWvyQTByYHIAg&ved=0CB0Q6AEwAA# v= onepage&q=A%20store%20is%20a%20客户端管理%20resource%20repository.%20A%20store%20resource%20lets%20an%20API%20client%3A%20put%20resources%20in%2C%20get%20them%20back%20out %2C%20和%20当%20到%20删除%20时决定%20&f=false

web-services rest soa
2个回答
1
投票

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


0
投票

据我了解,集合就像 sql 中的表 - 我们可以在集合(行)内创建新资源。

相反,商店就像编程中的集合数据结构 - 我们可以添加/删除项目,但不能创建新的资源(项目)。它们已经被创建了。

© www.soinside.com 2019 - 2024. All rights reserved.