REST
是从几种基于网络的架构风格(列举在下面)中衍生出来的一种混合架构风格,并且添加了一些额外的约束,用来定义统一的连接器接口。
1
|
客户-服务器(CS)
|
2
|
无状态(S)
|
3
|
缓存($)
|
4
|
统一接口(U)
|
5
|
分层系统(LS)
|
6
|
按需代码(COD)
|
(一)REST中的
数据元素(Data Elements)
REST
对于信息的核心抽象是
资源
。任何能够被命名的信息都能够作为一个资源换句话说,任何可能作为一个创作者的超文本引用的目标的概念都必须符合资源的定义。
一个资源是到一组实体的概念上的映射,而不是在任何特定时刻与该映射相关联的实体本身
REST
使用一个
资源标识符
来标识组件之间交互所涉及到的特定资源
。
REST
连接器提供了访问和操作资源的值集合的一个通用的接口,而无须关心其隶属函数
是如何定义的,或者处理请求的软件是何种类型。由命名权威(
namingauthority
)来为资源分配资源标识符,使得引用资源成为可能。由同样的命名权威来负责维护映射的语义有效性(例如,确保隶属函数不会改变).
因为集中式的链接服务器无法满足
Web
的超大规模和多个组织领域的需求,所以
REST
采用了其他的方式——
依赖资源的创作者来选择最符合被标识的概念本质的资源标识符
。
REST
组件通过以下方式在一个资源上执行动作:使用一个表述来捕获资源的当前的或预期的状态、在组件之间传递该表述。
一个
表述
是一个字节序列,以及描述这些字节的表述元数据
。表述的其他常用但不够精确的名称包括:文档、文件、
HTTP
消息实体、实例或变量。
表述由数据、描述数据的元数据、以及(有时候存在的)描述元数据的元数据组成(通常用来验证消息的完整性)
。元数据以名称
-
值对的形式出现,其中的名称对应于一个定义值的结构和语义的标准。响应消息可以同时包括表述元数据和资源元数据(关于资源的信息,并不特定于所提供的表述)。
控制数据
定义了组件之间的消息的用途
,例如被请求的动作或响应的含义。它也被用来提供请求的参数,以及覆盖某些连接元素(
connecting elements
)的默认行为。例如,可以使用包括在请求或响应消息中的控制数据来修改缓存的行为。
如果一个资源在特定时刻的值集合由多个表述组成,可以使用
内容协商
来选择将包括在一个特定消息中的最佳表述
。
表述的数据格式被称为一种
媒体类型
。
一个表述能够被包括在一个消息中,并由接收者根据消息的控制数据和媒体类型的性质来做处理。
媒体类型有些是用来做自动处理的,有些是用来呈现给用户来查看的,还有少数是可以同时用于两种用途的。
组合的媒体类型能够被用来将多个表述封装在单个消息之中。
(二)REST中的
连接器(Connectors)
连接器
代表了一个组件通信的抽象接口
,通过提供清晰的关注点分离、并且隐藏资源的底层实现和通信机制,从而改善了架构的简单性
。
所有的
REST
交互都是无状态的
。也就是说,无论之前有任何其他请求,每个请求都包含了连接器理解该请求所必需的全部信息。这个约束能够实现四个功能:
1
)它使得连接器无需保存请求之间的应用状态,从而降低了物理资源的消耗并改善了可伸缩性;
2
)它允许对交互进行并行处理,处理机制无需理解交互的语义;
3
)它允许中间组件孤立地查看并理解一个请求,当需要对服务作出动态安排时,这是必需要满足的;
4
)它强制每个请求都必须包含可能会影响到一个已缓存响应的可重用性的所有信息。
主要的连接器类型是
客户端
和
服务器
。两者之间的本质区别是:客户端通过发送请求来发起通信;服务器侦听连接并对请求作出响应,以便为其服务提供访问的途径。
一个组件可能包括客户端和服务器两种连接器
。
第三种连接器类型是
缓存连接器
,可以位于客户端或服务器连接器的接口处,以便保存当前交互的可缓存的响应,这样它们就能够被以后的请求交互来重用。客户端可以使用缓存来避免重复的网络通信,服务器可以使用缓存来避免重复执行生成响应的处理,这两种情况都可以减小交互的延迟。一个缓存通常在使用它的连接器的地址空间内实现。
一个
解析器
负责将部分或完整的资源标识符翻译成创建组件间连接所需的网络地址信息。
例如,大多数
URI
都包括一个
DNS
主机名,作为一种机制来标识该资源的命名权威。为了发起一个请求,一个
Web
浏览器会从
URI
中提取出主机名,并利用
DNS
解析器来获得该权威的
Internet
协议(
IP
)地址。另一个例子是某些识别模式(例如
URN[124]
)要求一个中间组件将一个永久标识符翻译为一个更加短暂的地址,以便访问被标识的资源。使用一个或多个中间解析器(
intermediate resolvers
)能够通过增加间接层的方式来延长资源引用的寿命,尽管这样做会增加请求的延迟。
连接器类型的最后一种形式是
隧道
,
它简单地跨连接的边界对通信进行中继,例如一个防火墙或更低层的网关
。隧道作为
REST
的一部分来建模,而不是作为网络基础设施的一部分来进行抽象,唯一的原因是某些
REST
组件可能会动态地从主动的组件行为切换到一个通道。主要的例子是当响应一个
CONNECT
方法请求时,
HTTP
代理会切换到一个隧道,从而允许其客户使用一种不同的协议(例如
TLS
)来直接与不支持代理的远程服务器通信。当两端终止通信时,隧道就会消失。
(三)REST中的
组件(Components)
一个
用户代理
使用一个客户端连接器发起请求,并成为响应的最终接收者。
最常见的例子是一个
Web
浏览器,它提供了对信息服务的访问途径,并且根据应用的需要呈现服务的响应。
一个
来源服务器
使用一个服务器连接器管理被请求资源的名字空间。
来源服务器是其资源表述的权威数据来源,并且必须是任何想要修改资源的值的请求的最终接收者。每个来源服务器都为其服务提供了一个以资源的层次结构形式出现的通用的接口。资源的实现细节被隐藏在这一接口的背后。
为了支持转发,可能还要对请求和响应进行转换,中间组件同时扮演了客户端和服务器两种角色。
一个
代理组件
是由客户端选择的中间组件,用来为其他的服务、数据转换、性能增强(
performance enhancement
)、或安全保护(
security protection
)提供接口封装。一个
网关(也叫作反向代理)组件
是由网络或来源服务器强加的中间组件,用来为其他的服务、数据转换、性能增强,或安全增强(
security enforcement
)提供接口封装。
需要注意的是,代理和网关之间的区别是,何时使用代理是由客户端来决定的。
分享到:
相关推荐
REST(Representational State Transfer):表述性状态转移,分布式超媒体软件的一种架构风格。源自2000年Roy Thomas Fielding的博士论文。 一套简单的设计原则、一种架构风格(或模式),不是一种具体的标准或架构。 ...
REST (Representational State Transfer)是代表状态传输的缩写。它代表了分布式超媒体系统的体系结构风格,该风格是Roy Field在他的论文中定义的。...REST提出了一些设计概念和准则。本手册将为您做出详细介绍。
Restlet项目为“建立REST概念与Java类之间的映射”提供了一个轻量级而全面的框架。它可用于实现任何种类的REST式系统,而不仅仅是REST式Web服务。 Restlet项目受到Servlet API、JSP(Java Server Pages)、...
通过“一切皆文件”的概念,形成了Unix的生态,Unix的哲学是自下而上的。
REST(Representational State Transfer):表述性状态转移,分布式超媒体软件的一种架构风格。源自2000年Roy Thomas Fielding的博士论文。 一套简单的设计原则、一种架构风格(或模式),不是一种具体的标准或架构。 ...
REST是设计分布式网络服务或API时遵循的架构原则以及设计风格, 前后端分离最佳实践的开发标准或规范。本文为资料收藏的.md笔记,选取比较重要的资料,收集了以下内容: 重要概念介绍,如前述的第2-第4个关键词。 ...
REST(Representational State Transfer):表述性状态转移,分布式超媒体软件的一种架构风格。源自2000年Roy Thomas Fielding的博士论文。 一套简单的设计原则、一种架构风格(或模式),不是一种具体的标准或架构。 ...
REST(一些实用指南) 示例项目(使用 .NET 5 用 C# 编写)调用 我想总结的有关 REST 的要点如下: REST是一种用于描述 Web 架构的架构风格 REST IS协议不可知 REST是关于 Web 架构的(REST != API) REST不是设计...
RESTful API 设计: 深入探讨如何设计和实现符合 REST 架构风格的 API,包括资源、URI 设计、HTTP 方法等。 SOAP 服务: 讨论如何使用 PHP 创建和部署基于 SOAP 协议的 Web 服务,并介绍 SOAP 的工作原理和基本概念...
不仅讲解REST与面向资源的架构(ROA)的概念与原理,还向读者介绍如何编写符合REST风格的Web 2.0应用。本书详实、易懂,实战性强,提供了大量RESTful Web服务开发的最佳实践和指导,适合广大的Web开发人员、Web架构...
是一种用于组织资源的架构风格,当应用于基于 HTTP 的服务时,允许构建无状态、解耦、可扩展的服务。 HTTP 方法、HTTP 标头和 MIME 类型都允许开发人员实现 REST 风格。 框架之类的 和 可用于加速尝试实现 RESTful ...
REST的基本概念。 REST(Representational State Transfer)是Roy Fielding博士在2000年他的博士论文 中提出来的一种软件架构风格。REST本身并不涉及任何新的技术,它基于HTTP 协议, 比起SOAP和XML-RPC 来说它更加...
还有一个连接器允许你容易地按REST风格通过XML文档来处理JDBC源(source);此外,一个基于JavaMail API的SMTP连接器允许你发送内容为XML的Email。 Restlet API包括一些能够创建基于字符串、文件、流(stream)、...
通过REST风格体系架构,请求和响应都是基于资源表示的传输来构建的。资源是通过全局ID来标识的,这些ID一般使用的是一个统一资源标识符(URI)。客户端应用使用HTTP方法(如,GET、POST、PUT或DELETE)来操作一个或...
讲解REST与面向资源的架构(ROA)的概念与原理,如何编写符合REST风格的Web 2.0应用。仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
还有一个连接器允许你容易地按REST风格通过XML文档来处理JDBC源(source);此外,一个基于JavaMail API的SMTP连接器允许你发送内容为XML的Email。 Restlet API包括一些能够创建基于字符串、文件、流(stream)、...
REST是一种架构风格,其核心是面向资源,REST专门针对网络应用设计和开发方式,以降低开发的复杂性,提高系统的可伸缩性。REST提出设计概念和准则为:1.网络上的所有事物都可以被抽象为资源(resource) 2.每一个资源...
使徒作为无头的CMS 非常适合构建网站,但是,许多项目只需要一个“无头”的CMS:一种通过定义架构来创建新... 我们将从谈论片段开始,因为它们很好地映射到REST概念。 但是apostrophe-headless也支持使用页面。 我们
模式:装饰器模式:规格模式:查询对象(条件) 模式:图层超类型(实体) 模式:命令模式:查询模式:消息传递(服务总线,信号器,文件系统,rabbitmq)服务API 风格: 实用REST:资源,http动词,crud +动作/命令...