Loading AI tools
有关网络服务的一种编程范式 来自维基百科,自由的百科全书
表现层状态转换(英语:Representational State Transfer,縮寫:REST)是Roy Thomas Fielding博士于2000年在他的博士论文[1]中提出来的一种万维网软件架构风格,目的是便于不同软件/程序在网络(例如互联网)中互相传递信息。表現層狀態轉換是根基於超文本傳輸協定(HTTP)之上而確定的一組約束和屬性,是一種設計提供全球資訊網絡服務的軟體構建風格。符合或相容於這種架構風格(簡稱為 REST 或 RESTful)的網絡服務,允許用戶端發出以統一資源標識符存取和操作網絡資源的請求,而與預先定義好的無狀態操作集一致化。因此表現層狀態轉換提供了在互聯網絡的計算系統之間,彼此資源可交互使用的協作性質(interoperability)。相對於其它種類的網絡服務,例如SOAP服務,則是以本身所定義的操作集,來存取網絡上的資源。
目前在三种主流的Web服务实现方案中,因为REST模式与复杂的SOAP和XML-RPC相比更加简洁,越来越多的Web服务开始采用REST风格设计和实现。例如,Amazon.com提供接近REST风格的Web服务執行图书查詢;雅虎提供的Web服务也是REST风格的。
需要注意的是,REST是设计风格而不是标准。REST通常基于HTTP、URI、XML以及HTML这些现有的广泛流行的协议和标准。
每个资源都可以通过URI访问到。
也就是一个个可以认知的资源,比如文档,音乐,视频等信息,都可以通过唯一的URI确定。
就是我们通过客户端可以修改原资源的状态。
这样重表达的客户端可以知道如何处理。
处理以超媒体为基础的状态变化。
REST架构风格最重要的架构限制有6个[2]:
请求中包含了各种独立资源的标识,例如,在Web服务中的URI。资源本身和发送给客户端的标识是独立。例如,服务器可以将自身的数据库信息以HTML、XML或者JSON的方式发送给客户端,但是这些可能都不是服务器的内部记录方式。
当客户端拥有一个资源的标识,包括附带的元数据,则它就有足够的信息来删除这个资源。
每一个消息都包含足够的信息来描述如何来处理这个信息. 例如,媒体类型 (media-type) 就可以确定需要什么样的分析器来分析媒体数据.
同用户访问Web服务器的Home页面相似,当一个 REST 客户端访问了最初的REST应用的URI之后,REST 客户端应该可以使用服务器端提供的链接,动态的发现所有的可用的资源和可执行的操作。随着访问的进行,服务器在响应中提供文字超链接,以便客户端可以得到当前可用的操作。客户端无需用确定的编码的方式记录下服务器端所提供的动态应用的结构信息。
应该注意区别应用的状态和连接协议的状态。HTTP连接是无状态的(也就是不记录每个连接的信息),而REST传输会包含应用的所有状态信息,因此可以大幅降低对HTTP连接的重复请求资源消耗。
符合REST設計風格的Web API称为RESTful API。它从以下三个方面资源进行定义:
http://example.com/resources
。下表列出了在实现RESTful API时HTTP请求方法的典型用途。
资源 | GET | PUT | POST | DELETE |
---|---|---|---|---|
一组资源的URI,比如https://example.com/resources
|
列出URI,以及该资源组中每个资源的详细信息(后者可选)。 | 使用给定的一组资源替换当前整组资源。 | 在本组资源中创建/追加一个新的资源。该操作往往返回新资源的URL。 | 删除整组资源。 |
单个资源的URI,比如https://example.com/resources/142
|
获取指定的资源的详细信息,格式可以自选一个合适的网络媒体类型(比如:XML、JSON等) | 替换/创建指定的资源。并将其追加到相应的资源组中。 | 把指定的资源当做一个资源组,并在其下创建/追加一个新的元素,使其隶属于当前资源。 | 删除指定的元素。 |
PUT和DELETE方法是幂等方法。GET方法是安全方法(不会对服务器端有修改,因此當然也是幂等的)。
不像基于SOAP的Web服务,RESTful Web服务并没有“正式”的标准[4]。这是因为REST是一种架构,而SOAP只是一个协议。虽然REST不是一个标准,但大部分RESTful Web服务实现会使用HTTP、URI、JSON和XML等各种标准。
例如,一个简单的网络商店应用:
GET http://www.store.com/products
GET http://www.store.com/products/12345
POST http://www.store.com/orders <purchase-order> <item> ... </item> </purchase-order>
This chapter introduced the Representational State Transfer (REST) architectural style for distributed hypermedia systems. REST provides a set of architectural constraints that, when applied as a whole, emphasizes scalability of component interactions, generality of interfaces, independent deployment of components, and intermediary components to reduce interaction latency, enforce security, and encapsulate legacy systems.