REST 代表 REpresentational State Transfer,API 代表应用程序接口。 REST 是一种软件架构风格,它定义了用于创建 Web 服务的规则集。遵循 REST 架构风格的 Web 服务被称为 RESTful Web 服务。它允许请求系统通过使用统一和预定义的规则集来访问和操作 Web 资源。基于 REST 的系统中的交互通过 Internet 的超文本传输协议 (HTTP) 发生。
一个 Restful 系统包括:
- 请求资源的客户。
- 有资源的服务器。
根据行业标准创建 REST API 很重要,这可以简化开发并提高客户端采用率。
RESTful API 的架构约束:下面列出了六个架构约束,这些约束使得任何 Web 服务:
- 统一接口
- 无国籍
- 可缓存
- 客户端服务器
- 分层系统
- 点播代码
REST 架构的唯一可选约束是按需代码。如果服务违反任何其他约束,则不能严格将其称为 RESTful。
统一接口:这是区分 REST API 和非 REST API 的关键约束。它表明,无论设备或应用程序类型(网站、移动应用程序)如何,都应该有一种与给定服务器交互的统一方式。
统一接口的指导原则有四个:
- 基于资源:单个资源在请求中标识。例如:API/用户。
- 通过表示操作资源:客户端具有资源的表示,并且包含足够的信息来修改或删除服务器上的资源,前提是它具有这样做的权限。示例:通常当用户请求用户列表时,用户会获得一个用户 ID,然后使用该 ID 删除或修改该特定用户。
- 自描述消息:每条消息都包含足够的信息来描述如何处理消息,以便服务器可以轻松地分析请求。
- 超媒体作为应用程序状态引擎(HATEOAS):它需要包含每个响应的链接,以便客户端可以轻松发现其他资源。
无状态:这意味着处理请求的必要状态包含在请求本身中,服务器不会存储与会话相关的任何内容。在 REST 中,客户端必须包含服务器的所有信息来满足请求,无论是作为查询参数、标头还是 URI 的一部分。无状态可实现更高的可用性,因为服务器不必维护、更新或传达该会话状态。当客户端需要向服务器发送过多数据时存在一个缺点,因此它缩小了网络优化的范围并需要更多带宽。
可缓存:每个响应都应包括响应是否可缓存以及响应可以在客户端缓存多长时间。客户端将从其缓存中为任何后续请求返回数据,并且无需再次向服务器发送请求。管理良好的缓存部分或完全消除了一些客户端-服务器交互,进一步提高了可用性和性能。但有时用户可能会收到过时的数据。
客户端-服务器: REST 应用程序应该具有客户端-服务器架构。客户端是请求资源的人,不关心数据存储,数据存储在每个服务器内部,服务器是持有资源的人,不关心用户界面或用户状态。它们可以独立进化。客户端不需要了解任何有关业务逻辑的信息,服务器不需要了解任何有关前端 UI 的信息。
分层系统:一个应用架构需要由多个层组成。除了直接层之外,每一层都不知道任何层的任何信息,并且客户端和终端服务器之间可能有很多中间服务器。中间服务器可以通过启用负载平衡和提供共享缓存来提高系统可用性。
按需编码:这是一个可选功能。据此,服务器也可以向客户端提供可执行代码。按需代码的示例可能包括编译后的组件(例如Java小程序)和客户端脚本(例如 JavaScript)。
REST API 规则:在创建 REST API 端点时应牢记某些规则。
- REST 基于资源或名词,而不是基于动作或动词。这意味着 REST API 的 URI 应始终以名词结尾。示例:/api/users 是一个很好的示例,但 /api?type=users 是创建 REST API 的一个坏示例。
- HTTP 动词用于标识操作。一些 HTTP 动词是 – GET、PUT、POST、DELETE、UPDATE、PATCH。
- 一个 Web 应用程序应该被组织成像用户这样的资源,然后使用 HTTP 动词(如 – GET、PUT、POST、DELETE)来修改这些资源。作为开发人员,只需查看所使用的端点和 HTTP 方法,就应该清楚需要做什么。
URI HTTP verb Description api/users GET Get all users api/users/new GET Show form for adding new user api/users POST Add a user api/users/1 PUT Update a user with id = 1 api/users/1/edit GET Show edit form for user with id = 1 api/users/1 DELETE Delete a user with id = 1 api/users/1 GET Get a user with id = 1 - 始终在 URL 中使用复数形式以在整个应用程序中保持 API URI 一致。
- 发送正确的 HTTP 代码以指示成功或错误状态。
注意:您可以轻松使用 GET 和 POST,但为了使用 PUT 和 DELETE,您需要安装方法覆盖。您可以通过以下代码执行此操作:
npm install method-override --save
这只需通过编写以下代码即可在您的代码中使用此包:
var methodOverride = require("method-override");
现在您可以轻松使用 PUT 和 DELETE 路由:
app.use(methodOverride("_method"));
HTTP 动词:一些常见的 HTTP 方法/动词描述如下:
- GET:检索由请求 URI 标识的一个或多个资源,它可以缓存接收到的信息。
- POST:从提交请求和响应中创建资源,在这种情况下不可缓存。如果没有对端点应用安全措施,则此方法是不安全的,因为它允许任何人通过提交创建随机资源。
- PUT:更新请求 URI 指定的服务器上的现有资源。
- DELETE:删除请求 URI 指定的服务器上的现有资源。它总是为每个请求返回一个合适的 HTTP 状态。
- GET、PUT、DELETE 方法也称为幂等方法。应用一次操作或多次应用具有相同的效果。示例:从服务器删除任何资源,它成功并返回 200 OK,然后再次尝试删除该资源,它会显示错误消息 410 GONE。