REST (Represent State Transfer, 表现层状态转换) 是一种 API 的设计风格,源于 Roy Thomas Fielding 博士于 2000 年的博士论文。
RESTful API 有下面的这些关键特性和设计原则
- 资源是由 URI 来指定。
- 对资源的操作包括获取、创建、修改和删除,这些操作正好对应 HTTP 协议提供的 GET、POST、PUT 和 DELETE 方法。
- 通过操作资源的表现形式来操作资源。
- 资源的表现形式则是 XML 或者 HTML,取决于读者是机器还是人、是消费 Web 服务的客户软件还是 Web 浏览器。当然也可以是任何其他的格式,例如 JSON。
Stateless
REST API 一个重要的特性是要求 API 是 stateless (无状态的), 即要求服务器仅仅依靠当前请求的所给信息来处理请求,不应该依赖任何保存在服务器端的状态信息。
- 对于一个集群的多个服务器来说,一个请求无论发送到哪一个服务器都应该具有相同的返回,服务器中不应该保存任何和特定用户相关的信息;
- 对于单个服务器来说,一个请求的结果不能受到前一个请求的影响。
RESTful API 设计的层次
Level | Flag |
---|---|
LEVEL-3 | Hypermedia/HATEOAS |
LEVEL-2 | 使用 HTTP Methods 来代表请求的操作 |
LEVEL-1 | 使用以资源名命名的 URL |
RESTful API 的版本管理
methods | example | |
---|---|---|
URL | example/v1/resources | 实现简单 |
Query | example/resources?v=2 | 实现简单 |
Header | custom-header:api-version=2 | 更符合 REST 的原则 |
Media Type | Accept: application/resources.v2.json | 更符合 REST 的原则 |
Error handling
以 HTTP code 来表示请求的结果