什么是 REST?

2025年3月17日 | 阅读 3 分钟

Representational State Transfer(REST)是一种软件架构风格,它定义了创建 Web 服务的约束。遵循 REST 架构风格的 Web 服务称为 RESTful Web Services。它区分了计算机系统和 Web 服务。REST 架构风格描述了 六个 约束。

What is REST?

1. 统一接口

统一接口定义了 客户端服务器 之间的接口。它简化和分解了架构,使得每个部分都可以进行开发。统一接口有四个指导原则:

  • 基于资源: singoli 资源使用 URI 作为资源标识符来标识。资源本身与返回给客户的表示不同。例如,服务器不能发送数据库,而是发送表示一些数据库记录的、根据服务器请求和实现细节而转换为 HTML、XML 或 JSON 的内容。
  • 通过表示来操作资源: 当客户端表示与元数据关联的资源时,服务器上会有信息来修改或删除它。
  • 自描述消息: 每条消息都包含足够的信息来描述消息如何被处理。例如,可以通过 Internet 媒体类型(称为 MIME 类型)来指定解析器。
  • 作为超媒体应用状态引擎 (HATEOAS): 客户通过查询字符串参数、请求体、请求头和请求的 URI 提供状态。服务通过 响应码、响应头响应体 向客户提供状态。这被称为超媒体(超文本中的超链接)。
  • 除了上述描述,HATEOS 还意味着,在必要时,对象或本身会包含在链接体(或头)中,以提供用于检索相关对象的 URI。
  • REST 服务 提供的相同接口是设计的基础。

2. 客户端-服务器

客户端-服务器接口将客户端与服务器分离。例如,关注点分离不具有与每个服务器内部存储的内部关系,以提高客户数据代码的可移植性。服务器不与用户界面或用户状态相关联,从而使服务器更简单且可扩展。服务器和客户端可以独立替换和开发,直到接口发生变化。

3. 无状态

无状态 意味着服务状态在后续请求和响应之间不持久。这意味着请求本身包含处理请求所需的状态。它可以是 URI 的一部分,如查询字符串参数、实体或头。URI 标识资源以及该资源的状态(或状态更改)。服务器执行适当的状态或状态片段(s)后,将相关内容通过头、状态和响应体发送回客户端。

  • 我们行业中的大多数人都习惯于使用容器进行编程,这给了我们“session”的概念,它在多个 HTTP 请求之间维护状态。在 REST 中,客户端可以包含所有信息来满足服务器的请求,并在状态中包含多个请求。无状态性可以实现更高的可扩展性,因为服务器不 维护、更新通信 任何会话状态。资源状态是定义资源表示的数据。

例如,存储 在数据库中的数据。考虑应用程序状态,它可能根据客户端和请求而变化。对于请求它的每个客户,资源状态都是恒定的。

4. 分层系统

它直接连接到最终服务器或任何中间服务器,客户端无法得知。中间服务器通过实现 负载均衡提供 共享缓存来提高系统的 可扩展性。层可以强制执行安全策略。

5. 可缓存

在万维网上,客户端可以缓存响应。因此,响应会清晰地定义自己是否不可用,或者阻止客户端 重复使用 陈旧或 不合适的数据 进行后续请求。妥善管理 的缓存可以消除一些客户端-服务器交互,从而提高可扩展性和性能。

6. 按需编码(可选)

服务器通过执行的逻辑暂时移动或优化客户端的功能。已编译组件的示例包括 Java applets客户端脚本

遵守这些约束将使任何分布式超媒体系统都具有期望的偶发属性,例如 性能、可扩展性、可变性、可见性、可移植性可靠性

注意:REST 架构的可选约束是“按需编码”。如果服务违反了约束,则不能严格引用它。


下一主题凯撒密码技术