RESTFUL API学习教程

构建RESTful Web服务,像其他编程技能一样,一部分是艺术,一部分是科学。随着互联网行业的发展,创造一个REST API变得更加具体与新兴的最佳实践。由于REST Web服务不遵循除了HTTP规定的标准,它建立在符合行业最佳实践的REST风格的API来简化开发,提高客户利用率是非常重要的。目前,没有很多REST API的指南,帮助孤独的开发者RestApiTutorial.com正在致力于跟踪REST API的最佳实践,并提供资源,以便为发展技术人才的快速参考和自我教育。我们将讨论这两种艺术和创建REST Web服务的科学。

—Todd Fredrich, RESTAPI 专家

一、            什么是REST?

REST架构风格描述了六种约束。这些限制,适用于体系结构,最初是由Roy Fielding在他的博士论文提出,并定义了基于REST风格的基础。

这六个约束:

1.统一接口

统一接口约束定义客户端和服务器之间的接口。它简化以及解耦架构,它使各部分独立发展。统一接口的四项指导原则是:

⑴资源型

各个资源使用URI作为资源标识符请求标识。资源本身是从被返回到客户端的表示概念上是分开的。例如,该服务器不发送其数据库中,而是表示一些数据库记录一些HTML,XML或JSON表示,例如,在芬兰和编码的UTF-8,取决于请求的详细信息,并在服务器上执行。

⑵通过交涉的资源操作

当一个客户机拥有资源,包括任何附加的元数据的表示,它有足够的信息来修改或删除在服务器上的资源,只要它具有这样做的权限。

⑶自我描述性消息

每个消息包括足够的信息来描述如何处理消息。例如,为了调用可由因特网媒体类型(以前称为MIME类型)指定哪个分析器。响应还明确地表明自己的缓存能力。

⑷超媒体作为应用状态的引擎(HATEOAS)

客户端通过正文内容,查询字符串参数,请求头和请求的URI(资源名称)交付状态。通过服务主体内容,响应代码和响应报头到客户提供的状态。这在技术上称为对超媒体(或超文本内的超级链接)。

除了上面的描述,HATEOS也意味着,在必要时,链接被包含在返回的主体(或报头)提供的URI对象本身或相关的对象的检索。我们将在后面详细谈论这个。

任何REST服务必须提供统一的接口是其设计的基础。

2.无状态

由于REST是代表性状态传输的缩写,无状态是关键。从本质上讲,这个什么意思是无论是作为查询字符串参数URI的一部分,身体或头,处理必要状态书文请求被包含在请求本身中,。该URI唯一标识资源和正文包含资源的状态(或状态改变)。服务器执行处理它适当的状态后,或事物的状态上,通过头,状态和响应体传回客户端。

我们中的大多数人已经在行业内习惯于它为我们提供了“会话”横跨多个HTTP请求维护状态的概念容器内的编程。在REST中,如果这种状态必须跨越多个请求,客户端必须包括服务器完成请求的所有信息,重新发送必要的状态。无状态使请求有更大的可扩展性,因为服务器没有维护,更新或传达会话状态。此外,负载平衡器也不必担心无状态会话系统的亲和力。

那么,什么是状态和资源之间的区别?状态,或应用程序的状态,是该服务器关心履行必要的请求数据为当前会话或请求。一个资源或资源的状态,例如定义存储在数据库中的资源表示中的数据。由于应用程序的状态是可能由客户端和每个请求的数据而改变的。资源状态,而另一方面,每一个客户之间的请求保持不变。

曾经有一个后退按钮的Web应用程序,因为它希望你做的事情以特定的命令在某一点上擅离职守的问题?这是因为它违反了无状态原则。有一些不遵守无状态原则的情况下,如三足式OAuth,API调用速率限制,等等。然而,尽一切努力来确保应用程序的状态不会跨越服务(S)的多个请求。

3.缓存

在World Wide Web上,客户端可以缓存响应。响应因此必须,或明或暗地,将自己定义为缓存,或者不用,以防止客户端重复使用无效的或不适当的数据响应进一步的请求。管理良好的缓存部分或完全消除了一些客户端 - 服务器交互,从而进一步提高可扩展性和性能。

4. 客户端服务器

统一接口把客户端从服务器分离出来。关注这分离装置,例如,客户不关心的数据存储,这仍然是内部到每个服务器,这样的客户端代码的可移植性提高。服务器不关心的用户界面或用户的状态,从而使服务器可以是更简单和更可扩展的。服务器和客户端也可以被代替和独立开发的,只要该接口不被改变。

5.分层系统

客户端通常不能告诉服务器是否直接连接到后端服务器,或沿途的中介。中介服务器可能通过启用负载平衡,并通过提供共享缓存提高系统的可扩展性。分层也可以强制执行安全策略。

6.按需代码(可选)

服务器能够暂时延长或通过转移逻辑认为能够执行自主的一客户端的功能。这方面的例子可能包括编译的组件,如Java小程序和客户端脚本如JavaScript。

这些约束条件符合,因此符合REST架构风格,可以使任何类型的分布式超媒体系统具有强烈的增强特性,如性能,可扩展性,简单性,可修改性,可见性,便携性和可靠性。

注:REST架构的唯一可选的约束是按需写代码。如果服务违反任何其他约束,它不能严格称作REST风格。

英文原网站:(http://www.restapitutorial.com/lessons/whatisrest.html