Rest 休息';s';资源交流机制';和';在飞行中';客户机的改进';他对他们的了解

Rest 休息';s';资源交流机制';和';在飞行中';客户机的改进';他对他们的了解,rest,Rest,按照罗伊·菲尔丁(Roy Fielding)的定义,我正在努力与REST达成一致。最近我一直在想: 我感兴趣的概念是这句话: 转换可以由客户对媒体类型和资源通信机制的了解来确定(或限制),这两者都可以动态地改进(例如,按需编码) 具体来说,“资源通信机制”的知识是什么?这些知识如何在文档/规范中描述并在实施中实现? 那么,如何最好地“即时”提高这些知识呢? 我想我理解“客户对媒体类型的了解” 我有一些猜测(PUT、GET等),但如果有任何建议、示例或指向RESTful API的指针,能够明确地

按照罗伊·菲尔丁(Roy Fielding)的定义,我正在努力与REST达成一致。最近我一直在想:

我感兴趣的概念是这句话:

转换可以由客户对媒体类型和资源通信机制的了解来确定(或限制),这两者都可以动态地改进(例如,按需编码)

具体来说,“资源通信机制”的知识是什么?这些知识如何在文档/规范中描述并在实施中实现? 那么,如何最好地“即时”提高这些知识呢? 我想我理解“客户对媒体类型的了解”

我有一些猜测(PUT、GET等),但如果有任何建议、示例或指向RESTful API的指针,能够明确地解决引用中的问题,我将不胜感激。如果这有助于我在HTTP+JSON的上下文中思考这些问题,那么我很感激REST不局限于HTTP+*

SunCloudAPI以前被认为是良好的RESTful设计,我看不出它在哪里或如何解决这些具体问题——也许是一个以假乱真的例子

澄清:

让我困惑的是,如果PUT、GET等是这些机制,这表明客户端知道哪些应用于某些特定的超链接,这似乎很脆弱,并且可能建议超文本链接(直接)映射到资源。

资源通信机制 通过“资源通信机制”,我相信Roy指的是HTTP请求和HTTP动词。他只是说出来,没有指定给HTTP,因为REST并不依赖于HTTP。我想说的是,对于99.99%的REST服务,资源通信机制记录在中

Sun Cloud API满足这些要求,因为客户机使用API所需要了解的只是如何执行HTTP请求和返回的媒体类型的语义。例如,如果客户机不理解
application/vnd.com.sun.cloud.cloud+json
类型的文档中包含的内容,那么它将无法使用API

这与and之类的服务形成对比,后者不定义新的媒体类型,但假定客户端知道如何从Atom提要中提取域数据,并期望客户端基于定义URI空间的一组规则构造URL。这直接违反了罗伊的建议

动态改进 老实说,我只能猜测罗伊在这里指的是什么。我可以想象这样一个场景:下载的javascript可以用于基于用户输入构建url。这可以防止服务器为列表中的每个元素显式生成url

此外,可以根据用户输入动态启用或禁用某些有效转换。考虑到在用户输入所有必需字段之前,您不想启用提交按钮的情况。检索到的文档包含允许转换的链接,但下载的代码控制用户何时以及是否可以选择链接


下载的代码也可用于动态更改链接上的动词。如果您希望编辑资源,它可以执行GET,如果您希望删除该资源,则执行delete。这将允许表示只包含一个链接,但能够执行多个操作。

谢谢,这在很大程度上是我的理解。我认为基础知识和“动态”更新可以作为uri字段名或链接数据进行通信,例如get_uri或链接id/name。动态更新是通过mediatype内容进行的,例如delete_uri字段或带有“delete”名称/id的link元素。我不认为会发生这种情况,相反,动词uri关系通常/总是“带外”通信,例如Sun Cloud API spec doc的资源表内容。Roy的第四点几乎描述了Sun Cloud API。。。并将其排除为RESTful,而不仅仅是在这个RCM点上?实际上没有必要定义删除资源的特定链接,因为如果您知道资源的URI,那么HTTP规则会说,向URI发出删除谓词将导致删除资源。客户端始终可以使用选项来确定URI上允许的谓词。我不认为文档也提供了这些信息这一事实是一个问题。与特定媒体类型相关的特定行为是完全有效的。消息仍然是自描述的,因为内容类型告诉客户端要遵循哪些规则。关于在动态通信更改时使用选项的观点很好。虽然我很喜欢它,但我仍然对Sun Cloud API的RESTfull有些保留,也许是文档的“资源继承/命名”方向让我失去了平衡——我希望看到更多强调媒体类型、服务器对“客户端如何构造适当的URI”的说明以及媒体类型处理规则。感谢分享您的见解。令人遗憾的是,Sun REST API实际上是REST文档的最佳示例之一。我真的希望在不久的将来,有人能提供一个像样的API,我们可以将其作为一个很好的例子。找到坏的当然没问题!