休息是一种建筑风格,不是一种协议

时间:2016-08-22 04:15:03

标签: rest

我读到Rest是一种架构风格,不是协议。如果有人能详细说明,我将不胜感激。 感谢

3 个答案:

答案 0 :(得分:7)

协议通常描述两个(或更多)对等方必须交换的确切消息(或其部分)。同时指定编排如何交换这些消息及其含义。

架构风格(如REST)根本不描述消息,但指定消息,编排或系统部分必须具有的需求(架构约束)履行。

因此,虽然协议可能会说:"使用以下格式的JSON来请求报价"。一种建筑风格只是说:"客户可以联系服务器,但不是其他方式"。这是一个完全不同的水平。

以下是它们的相关性:架构风格就像是特定架构的模板。特定的体系结构反过来定义了组件之间的协议。

答案 1 :(得分:3)

  

我读到Rest是一种架构风格,不是协议。如果有人能详细说明,我将不胜感激。

来自Fielding's thesis

  

架构风格是一组协调的架构约束,它们限制了架构元素的角色/功能以及符合该样式的任何架构中这些元素之间允许的关系。

section 5.1

中描述了构成REST架构风格的架构约束的概述

回顾菲尔丁的演讲REST in AEM也可能有所帮助,他在那里提出了对REST的具体误解。

相反,如果您查看the introduction in RFC 7230,则会看到它打开

  

超文本传输​​协议(HTTP)是一种无状态应用程序级请求/响应协议,它使用可扩展语义和自描述消息有效负载,与基于网络的超文本信息系统进行灵活交互。

您可以查看Jan Newmarch的{​​{3}},其中包含有关Network Programming in Go的章节。

  

协议通过指定消息,数据类型,编码格式等来定义分布式应用程序的两个组件之间可以进行的对话类型。

REST,您注意到,并未指定任何这些内容 - 它只会限制您可以做出的选择。

答案 2 :(得分:2)

一个很好的比喻是将协议视为如何编写消息和REST,就像机器如何处理它收到的消息一样。

将协议视为定义如何组织两个端点之间的数据。有几种不同的协议,例如HTTPTCPIPARP。所有这些共同点在于它们代表了如何以通用方式定义数据的标准,使得运行可以通过这些协议解释数据的程序的任何机器将正确且精确地解释信号。在每种情况下,每次发出请求时,您都会将二进制文件发送到网络(可能包括互联网)。二进制表示以这样的方式配置:它们是在HTTP等协议中配置的消息,具体取决于您关注的是哪个网络层(HTTP在应用层中,并且您可以阅读更多内容在这里:OSI model)。

另一方面,REST仅在解释其消息后才处理发送到端点的数据。换句话说,接收消息,将消息转换为命令,执行这些命令,生成响应并使用协议(通常在应用程序层中HTTP)转换响应消息,然后将其发送回来作为回应。

当A点在B点向REST API架构发送请求时,它首先将该数据转换为标准化协议(例如HTTP的{​​{1}}和其他需要的协议),然后通过网络直到它到达B点。当B点接收到该数据时,它会转换该数据并将其传递到REST API中,该API将数据解释为命令并运行其特定功能。完成API的功能擦除后,它会使用协议再次对数据进行编码,并将响应发送回A点。

你可以这样想。协议创建消息,以便可以发送和理解它。 REST负责确保服务器执行预期的操作,而不是定义数据如何组织的标准,以便所有可能的端点都能识别它。

这里有一些很好的参考资料:

Communications Protocol

Representational state transfer

它很复杂,需要一段时间才能掌握。除了我在这里展示的内容之外,还有更多内容,但希望它可以作为您的良好起点。