dot*_*dot 8 rest soa web-services
我正试图解决 REST 中“集合”和“商店”之间的区别。从我到目前为止所读到的,
一个集合是:
"a server-managed directory of resources"
Run Code Online (Sandbox Code Playgroud)
一个商店是:
"client-managed resource repository"
Run Code Online (Sandbox Code Playgroud)
我找到了这篇文章: 如何“存储”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
Run Code Online (Sandbox Code Playgroud)
这样对吗?如果是这样,最后一个 PUT 是否也可以以某种方式表示为 POST?
编辑 1
我找到了我正在阅读的这本书的在线链接……它区分了两者:
REST 使用 http 动词来操作资源。句号。就是这样。为了构建某些类基于浏览器的应用程序,开发人员有时会使用本地存储 (a store),但这与 REST 完全无关(事实上,恰恰相反)。在基于 REST 的 API 设计中,集合是一个特殊的考虑因素,因为 REST 原则对它们在查询结果中的表示方式施加了相当大的限制——特殊的考虑因素还在于,如果您需要如何表示和访问这些东西,则没有标准。使用 html 以外的任何内容作为资源类型。
那么,收藏呢?
让我们以大学管理系统为例,该系统具有Course多个对象,每个对象都包含大量学生列表。
当我时,GET我course不想将集合students作为嵌入列表返回,因为这可能很大,而且我的用户可能不感兴趣。相反,我想知道有course一个students collection,并且我希望能够单独查询该集合(当我需要时),并且我希望能够按需对其进行分页。为此,course需要链接到students collectionURL(也许使用适当的类型,以便我的代码知道如何处理链接)。然后,我想使用给定集合的 url 来请求资源的分页列表。在此示例中,集合的 url 可能类似于:course/1/students,按照惯例,我可以将分页信息添加到搜索字符串中,以使用类似 的内容来约束结果course/1/students?page=1&count=10。将嵌入students collection到course资源中将违反 REST。我不会回来course,我会回来course-and-students。