简介
通常,REST和HTTP可以互换使用。在本文中,我们将研究REST和HTTP的真正含义,以及为什么它们是两回事。

什么是休息?
REST表征状态迁移的全称是表达状态迁移,最早是在Roy Fielding的论文中提出的。在这篇文章中,菲尔丁提出了他的理想的万维网软件体系结构的概念。
REST不是一个标准或规范。相反,Fielding将REST描述为分布式超媒体系统的架构。他认为RESTful结构有很多属性,所以REST非常适合大型互联系统,比如互联网。
接下来,我们将解释定义RESTful系统的属性。
和资源表示
RESTful系统的核心构建块是资源,可以是网页、视频流、图像等。资源甚至可以是抽象的概念,例如数据中的用户列表或特定位置的天气预报。唯一的限制是系统中的每个资源都是唯一的和可识别的。
此外,资源可能有许多表示形式。在C/S架构中,服务负责管理资源的状态,但是客户机可以选择它们想要与之交互的表示。
统一界面
统一接口是RESTful系统的独特属性之一,它要求客户端使用同一套标准操作来访问所有资源。
统一接口的优点是很容易创建与其提供的服务相分离的实现,这使得服务的开发不会影响客户端。需要权衡的是,统一接口可能会给一些系统增加不必要的限制,或者要求服务器执行的效率低于专业化操作,如果Spring Cloud的服务调用不如Dubbo高效。
无国籍的
在RESTful系统中,所有操作都应该是无状态的。这意味着从客户端到服务器的每个调用都不能依赖于任何共享状态,这也意味着对服务器的每个请求都必须包含服务器完成请求所需的所有数据。
REST中的无状态需求让位于几个关键属性:
可见性:可以单独分析每个请求,以监控系统健康状况和响应速度可靠性:当系统出现故障时,更容易从中恢复可伸缩性:只需添加更多的服务器资源来处理更多的请求。不过这样也会带来一个折中,就是客户端和服务器交互很多次的时候,对武器的请求会比较大,会包含重复的数据。
什么是HTTP?
与REST不同,超文本传输协议是一个定义良好且受约束的标准。HTTP是为互联网上的大多数日常教育提供的通信协议:

网页浏览器加载网页,流媒体电影,用移动设备在家关灯,显然REST和HTTP不一样。HTTP是由互联网工程任务组维护的协议。虽然它不同于REST,但它具有RESTful系统的许多功能。这不是偶然的,因为Roy Fielding是RFC for HTTP的原始作者之一。
重要的是RESTful系统不需要使用HTTP。碰巧的是,HTTP是一个好的开始,因为它展示了许多RESTful的特性。
让我们仔细看看使HTTP成为RESTful协议的一些特征。
和媒体类型。
在HTTP的世界里,资源通常是远程服务器上的文件。这些文件可以是HTML、CSS、Javascript、图形以及构成当前网页的所有其他文件。每个文件都可以被视为唯一的资源,可以通过唯一的URL进行寻址。
然而,HTTP不仅仅用于文件。资源这个词也可以指远程服务器上的任何数据:客户、产品、配置、设置等。这就是HTTP在构建现代API中变得流行的原因。它提供了一种一致且可预测的方式来访问和操作远程数据。
此外,HTTP允许客户端为某些资源选择不同的表示。在HTTP中,报头和各种已知的媒体类型用于处理。
例如,一个天气网站可以为同一个天气预报提供HTML和JSON。一个适合在Web浏览器中显示,另一个适合在另一个系统中存档历史天气数据。
HTTP方法
遵循HTTP的REST原则的另一种方式是,它为每个资源系统设置了相同的方法。虽然有将近12种HTTP方法可用,但大多数服务器主要以四种方式处理映射CRUD操作:POST、GET、PUT和DELETE。
预先知道这些操作可以很容易地创建和使用Web服务客户机。与SOAP协议相比,HTTP可以保持操作设置的最小化和一致性,而SOAP协议的操作是可定制的和不受限制的。
当然,个别Web服务可能会选择一些方法来拒绝一些资源,或者需要对一些敏感资源进行认证。反正一套可能的HTTP方法是众所周知的,不能在网站之间更改。
HTTP不总是RESTful的
但是,HTTP实现RESTful原则的所有方式也可能违背他们的方式。
首先,REST不是通信协议,而HTTP是通信协议。
接下来,也许最有争议的事情是大多数Web服务器现在使用cookie和会话来存储状态。当使用这些参考服务器状态时,它违反了无状态原则。

最后,URL的使用可能导致整个Web服务器的统一接口。示例:以下URL:
//toolkit . net . cn/API/v1/customers id = 17 action = clone
尽管这个URL必须使用一个预定义的HTTP方法(比如GET)来请求,但是它使用查询参数来提供其他操作。在这种情况下,我们必须指定一个名为clone的操作,这显然不适合系统中的所有资源。如果没有更详细的解释,不清楚回应是什么。
结论
尽管许多人交替使用REST和HTTP这两个术语,但事实上它们是不同的东西。REST指的是特定架构风格的一组属性。而HTTP是一个定义良好的协议,它展示了RESTful系统之外的很多功能。


