002-REST-什么是 REST ?

本文深入探讨REST架构风格的六种核心约束:统一接口、无状态、可缓存、客户端-服务器、分层系统和按需代码。这些约束定义了RESTful服务的基础,确保分布式超媒体系统的性能、可伸缩性和可靠性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    REST 架构风格描述了六种约束。应用于架构的这些约束最初由 Roy Fielding 在他的博士论文中传达并定义了 RESTful 的基础 - 样式

六种约束


1. 统一的接口;
2. 无状态;
3. 可缓存;
4. Client-Server;
5. 分层系统;
6. 按需代码(可选)

六种约束 - 统一的接口

统一接口约束定义了客户端和服务器之间的接口。它简化并解耦了架构,使每个部分都能独立运行扩展。统一接口的四个指导原则:

资源型(Resource-Based):
    使用 URI 作为资源标识符在请求中标识各个资源。资源本身在概念上与返回给客户端的表示愤慨。例如,服务器不发送其数据库,而是发送一些表示某些数据库记录的 HTML,XML,JSON,例如芬兰语,并以 UTF-8 编码,具体取决于请求的详细信息和服务器实现。
通过表征操纵资源(Manipulation of Resources Through Representations):
    当客户端持有资源的表示(包括附加的任何元数据)时,它有足够的信息来修改或删除服务器上的资源,前提是它有权限这样做。
自描述信息(Self-descriptive Messages
):
    每条消息都包含足够的信息来描述如何处理消息。例如,要调用的解析器可以由 Internet 媒体类型(以前称为 MIME 类型)指定。响应还明确指出了它们的缓存能力。
超媒体作为应用程序状态引擎(HATEOAS):
    客户端通过请求体内容,查询字符串参数请求头和请求的 URI(资源名)来提供状态。服务通过请求体内容,响应代码和响应头向客户端提供状态。这在技术上被称为超媒体(或超文本中的超链接)。
    除了上面的描述之外,HATEOS 还意味着,在必要时,链接包含在返回的返回体(或返回头)中,以提供用于检索对象本身或相关对象的 URI。
    任何 REST 服务必须提供的统一接口是其设计的基础。
六种约束 - 无状态
    由于 REST 是 REpresentational State Transfer 的首字母缩写,无状态是关键。从本质上讲,这意味着处理请求的必须状态包含在请求体中,无论是作为 URI,查询字符串参数,请求体还是请求头的一部分。URI 唯一标识资源,请求体包含该资源的状态(或状态更改)。然后再服务器进行处理之后,通过请求头,状态和响应体将适当的状态或重要状态的片段传送回客户端。
    
    我们大多数已经在业界工作了一段时间的人习惯于在容器内编程,这为我们提供了“session”的概念,它在多个 HTTP 请求中维护状态。在 REST 中,客户端必须包含服务器的所有信息以完成请求,如果该状态必须跨越多个请求,则 根据需要重新发送状态。无状态可以实现更高的可伸缩性,因为服务器不必维护,更新或传达该session状态。此外,负载均衡器不必担心无状态系统的session亲和性。
    
    那么状态和资源之间的区别是什么?状态或应用程序状态是服务器关心满足当前会话或请求所需的请求数据的状态。资源或资源状态是定义资源表示的数据 - 例如,存储在数据库中的数据。将应用程序状态视为可能因客户端和每个请求而导致的数据。另一方面,资源状态在请求它的每个客户端都是不变的。
    
    曾经有一个 Web 应用程序的后腿按钮的问题,因为它希望你按照一定的顺序做事,所以它在某个时候出现了 AWOL 吗?那是因为它违反了无状态原则。有些情况下不符合无状态原则,例如 three-legged OAuth, API 调用率限制等。但是,请尽一切努力确保应用程序状态不会跨越你的多个服务请求。
六种约束 - 可缓存
    与万维网一样,客户端可以缓存响应。因此,响应必须隐式或显式地将自身定义为可缓存或不可缓存,以防止客户端重用陈旧或不适当的数据以响应进一步的请求。管理良好的缓存部分或完全消除了一些客户端 - 服务器交互,进一步提高了可伸缩性和性能。
六种约束 - 客户端服务器
    统一接口将客户端与服务器分开。这种关注点分离意味着,例如,客户端不关心数据存储,数据存储仍然是每个服务器的内部,从而提高了客户端代码的可移植性。服务器不关心用户接口或用户状态,因此服务器可以更简单,更具可伸缩性。只要不改变接口,服务器和客户端也可以独立替换和开发。
六种约束 - 分层系统
    客户端通常无法判断它是直接连接到终端服务器,还是沿途的中介。中间服务器可以通过启用负载均衡和提供共享缓存来提高系统可伸缩性。分层可以实施安全策略。
六种约束 - 按需代码(可选)
    服务器能够通过向客户端传输可以执行的逻辑来临时扩展或自定义客户端的功能。这样的示例可以包括诸如 Java 小程序之类的编译组件和诸如 JavaScript 之类的客户端脚本。
    
    遵守这些约束,从而符合 REST 架构风格,将使任何类型的分布式超媒体系统具有理想的新兴属性,例如性能,可伸缩性,简单性,可修改性,可见性,可移植性和可靠性。
    
注意:
    REST 架构的唯一可选约束是按需代码。如果服务违反任何其它约束,则不能严格地将其称为 RESTful。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值