REST是REpresentational State Transfer表述性状态转移
的首字母缩写。它是分布式超媒体系统的架构风格,最初由Roy Fielding在2000年的着名论文中提出。
什么是RESTful:
REST-ful,其中ful代表形容词,如helpful,powerful。这类形容词意为"full of,having the quality of"。多加在名词之后表示“充满...的、易于...、可...的、富有...的、具有...的”的意思,是最常用的形容词后缀,反义词后缀是-less。
RESTful
就代表满足REST原则的。
与任何其他架构风格一样,REST也有自己的6个引导约束,如果接口需要被称为RESTful,则必须满足这些约束。这些原则如下。
REST中信息的关键抽象是一种资源。可以命名的任何信息可以是资源:文档或图像,临时服务,其他资源的集合,非虚拟对象(例如,人)等。REST使用资源标识符来标识组件之间交互中涉及的特定资源。
任何特定时间戳的资源状态称为资源表示。表示由数据,描述数据的元数据和超媒体链接组成,这些链接可以帮助客户转换到下一个期望的状态。
表示的数据格式称为媒体类型。媒体类型标识定义如何处理表示的规范。真正的RESTful API看起来像超文本。每个可寻址信息单元明确地(例如,链接和id属性)或隐式地(例如,从媒体类型定义和表示结构导出)携带地址。
根据罗伊菲尔丁的说法:
超文本(或超媒体)意味着信息和控制的同时呈现,使得信息成为用户(或自动机)通过其获得选择和选择动作的可供性。请记住,超文本不需要是浏览器上的HTML(或XML或JSON)。机器在理解数据格式和关系类型时可以跟踪链接。
此外,资源表示应该是自描述的:客户端不需要知道资源是员工还是设备。它应该基于与资源相关的媒体类型。因此在实践中,您最终将创建大量自定义媒体类型 - 通常是与一种资源相关联的一种媒体类型。
每种媒体类型都定义了默认处理模型。例如,HTML定义了超文本的呈现过程以及每个元素周围的浏览器行为。它与资源方法GET / PUT / POST / DELETE / ...没有任何关系,除了一些媒体类型元素将定义一个过程模型,其类似于“具有href属性的锚元素创建一个超文本链接,当被选中时,在与CDATA编码的href属性对应的URI上调用检索请求(GET)。“
与REST相关的其他重要事项是用于执行所需转换的资源方法。许多人错误地将资源方法与HTTP GET / PUT / POST / DELETE方法联系起来。
Roy Fielding从未提及任何关于在哪种情况下使用哪种方法的建议。他所强调的是它应该是统一的接口。如果你决定HTTP POST将用于更新资源 - 而不是大多数人推荐HTTP PUT - 它没关系,应用程序接口将是RESTful。
理想情况下,更改资源状态所需的所有内容都应该是该资源的API响应的一部分 - 包括方法以及它们将保留表示的状态。
应输入REST API,除了初始URI(书签)和适用于目标受众的标准化媒体类型集之外没有任何先验知识(即,任何可能使用API的客户都应该理解)。从那时起,所有应用程序状态转换必须由客户端选择服务器提供的选择来驱动,这些选择存在于接收的表示中或者由用户对这些表示的操纵所暗示。转换可以由客户端对媒体类型和资源通信机制的知识来确定(或限制),这两者都可以在运行中(例如,按需代码)进行改进。
[失败在这里意味着带外信息驱动交互而不是超文本。]
在构建RESTful API时,另一件可以帮助您的是基于查询的API结果应该由带有摘要信息的链接列表表示,而不是由原始资源表示的数组表示,因为查询不能代替资源标识。
很多人更喜欢将HTTP与REST进行比较。REST和HTTP不一样。
REST!= HTTP
但是,由于REST还打算使web(互联网)更加简化和标准化,他主张更严格地使用REST原则。这就是人们试图开始将REST与网络(HTTP)进行比较的地方。Roy fielding在他的论文中没有提到任何实现指令 - 包括任何协议首选项和HTTP。到时候,您正在遵循REST的6个指导原则,您可以将您的接口称为RESTful。
简而言之,在REST架构风格中,数据和功能被视为资源,并使用统一资源标识符(URI)进行访问。通过使用一组简单,定义明确的操作来执行资源。客户端和服务器通过使用标准化接口和协议(通常是HTTP)来交换资源的表示。
资源与其表示分离,以便可以以各种格式访问其内容,例如HTML,XML,纯文本,PDF,JPEG,JSON等。例如,可以使用和使用关于资源的元数据来控制高速缓存,检测传输错误,协商适当的表示格式,以及执行认证或访问控制。最重要的是,与资源的每次交互都是无状态的。
所有这些原则都有助于RESTful应用程序简单,轻量和快速。
参考文献:
http://roy.gbiv.com/untangled/2008/rest-apis-must-be-hypertext-driven
http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
Powered by RESTful API 中文网 + with by 全栈开发网. 网站地图 按Ctrl+D试试 .