REST 是 Representational State Transfer 的缩写,是 Roy Fielding 于 2000 年提出的一种通过 HTTP 设计松散耦合应用程序的架构风格,通常用于 Web 服务的开发。REST 不强制,可以不遵守,它只是一种高级设计指南。
架构约束
REST 定义了六种架构约束来构成 Web 服务, 我们常见的 RESTful API,就是指使用 HTTP 并遵循 REST 原则的 RESTful API。这些架构约束有以下作用:
- 提高系统的可伸缩性和可靠性:客户端-服务器分离、无状态和分层系统等架构约束可以使系统更容易扩展和维护,并且可以提高系统的可靠性。
- 提高系统的性能:缓存可以减少对服务器资源的消耗,提高系统的性能和可伸缩性。
- 提高系统的安全性和隔离性:分层系统可以提供更好的安全性和隔离性,使系统更加安全可靠。
- 统一接口可以使开发人员更加容易地理解和使用 API,降低了开发和维护的成本。
- 按需代码可以减少服务器端的负载,提高了客户端的灵活性和可扩展性。
一个 RESTful API,具体需要满足以下条件:
- 统一接口
- CS
- 无状态
- 缓存
- 系统分层
- 按需编码(可选)
接下来我们来详细看看这六大架构约束。
CS(客户端-服务器分离)
这是 REST 风格的基本原则之一。客户端和服务器之间的分离可以使客户端和服务器分别演化和扩展,提高了系统的可伸缩性和可靠性。通过客户端-服务器分离,客户端和服务器可以分别由不同的开发团队进行开发和维护,并且可以使客户端和服务器之间的协议更加简单和清晰。
无状态
服务器不应维护客户端的状态信息。每个请求都应该包含足够的信息以便服务器可以处理请求,这样可以使服务器更容易扩展,提高系统的可伸缩性和可靠性。无状态的设计可以降低系统的复杂度,并且可以减少对服务器资源的消耗。
缓存
服务器应该尽可能地使用缓存来提高性能和可扩展性。客户端可以缓存服务器返回的响应,以减少对服务器的请求。服务器也可以缓存请求的响应,以减少对后端系统的请求。缓存可以减少网络带宽的使用,提高系统的性能和可伸缩性。
统一接口
REST 使用一组标准接口来实现客户端和服务器之间的通信。这些接口包括资源的标识、资源的表示、自描述消息、超媒体作为应用程序状态的引擎等。通过使用这些标准接口,REST 可以使客户端和服务器之间的通信更加简单和可靠。统一接口可以使开发人员更加容易地理解和使用 API。
分层系统
REST 允许系统被分成多个层次,每个层次都可以有自己的功能。这样可以提高系统的可伸缩性和可靠性,同时也提供了更好的安全性和隔离性。分层系统可以使开发人员更加容易地扩展和修改系统,也可以提高系统的可靠性和安全性。
按需代码(可选)
REST 可以通过向客户端传输可执行的代码(例如 JavaScript)来扩展客户端的功能。这样可以减少服务器端的负载,同时也提高了客户端的灵活性和可扩展性。按需代码可以使开发人员更加容易地扩展和修改客户端功能。
以上的所有约束,都有助于我们构建一个真正的 RESTful API,当然,也可以不遵守。注意:这些约束并不是死的,如果你违反了一两个,也不影响称为 RESTful API - 不过根据约束该 API 当然不符合 “真正的 RESTful” 。
知识扩展:
了解更多 REST API 相关知识。