REST API 设计最佳实践

50 阅读4分钟

应用程序编程接口,或API,是指各种软件服务之间的通信通道。传输请求和响应的应用程序分别称为客户端和服务器。有不同类型的API协议:

⑴REST - 依赖于客户端/服务器方法,将API的前端和后端分离,并在开发和实现中提供了相当大的灵活性。

⑵RPC - 远程过程调用(RPC)协议发送多个参数并接收结果。

⑶SOAP - 支持互联网上广泛的通信协议,如HTTP、SMTP和TCP。

⑷WebSocket - 提供一种通过持久连接在浏览器和服务器之间交换数据的方式。

作为软件工程师,我们日常工作中的大部分内容都是使用或创建REST API。系统之间通信的标准方法是通过API。因此,正确构建REST API以避免将来出现问题至关重要。一个定义良好的API应该易于使用、简洁且难以误用。 以下是一些通用建议:

一、使用名词代替动词

端点路径中不应使用动词。相反,路径名应包含名词,这些名词标识我们要访问或更改的端点所属的对象。

例如,不要使用 /getAllClients 来获取所有客户端,而是使用 /clients。

二、使用复数资源名词

使用复数形式的资源名词,因为这适用于所有类型的端点。 例如,不要使用/employee/:id/ ,而应使用/employees/:id/ 。

三、保持一致性

当我们说保持一致性时,这意味着可预测性。当我们定义了一个端点时,其他端点的行为应该类似。因此,对于资源使用相同的大小写,对所有端点使用相同的身份验证方法,使用相同的header,使用相同的状态代码等。

四、简单化

我们应该像现在这样,将所有的端点命名资源导向。如果我们想要为用户定义一个API,我们可以这样描述: /users /users/124 因此,第一个API获取所有用户,第二个API获取特定的用户。

五、使用正确的状态码

这个非常重要。HTTP状态码有很多,但是我们通常只使用其中的一些。不要使用太多的状态码,而是在整个API中使用相同的状态码来表示相同的结果,例如:

200表示一般成功。

201表示创建成功。

202表示请求成功。

204表示无内容。

307表示重定向的内容。

400表示错误的请求。

401表示未经授权的请求。

403表示缺少权限。

404表示缺少资源。

5xx表示内部错误。

六、不要返回纯文本

REST APIs应该接受JSON作为请求负载并以JSON响应,因为这是数据传输的标准。然而,仅仅返回一个带有JSON格式字符串的正文是不够的;我们需要指定Content-Type头为application/JSON。唯一的例外是如果我们在客户端和服务器之间发送和接收文件的情况。

七、进行恰当的错误处理

我们希望在发生错误时消除任何混淆。我们必须正确处理错误并返回一个指示发生了什么的响应代码(从400到5xx错误)。我们需要在响应正文中返回一些详细信息以及状态码。

八、有良好的安全措施

我们希望客户端和服务器之间的所有通信都受到保护,这意味着我们需要始终使用SSL/TLS,没有例外。同时,允许通过API密钥进行身份验证,应该使用带有过期日期的自定义HTTP头来传递API密钥。

九、使用分页功能

如果我们的API需要返回大量数据,应使用分页功能,因为这将使我们的API具有前瞻性。在这里建议使用page和page_size参数。 例如:/products?page=10&page_size=20

十、版本控制

从第一个版本开始对API进行版本控制是至关重要的,因为我们的API可能有不同的用户。这将允许我们的用户避免受到我们未来可能做出的更改的影响。API版本可以通过HTTP头或查询/路径参数传递。 例如,/products/v1/4 此外,不要忘记记录您的API,因为API的质量只取决于其文档的质量。文档应该展示完整的请求/响应周期示例。在这里,我们可以使用Apifox定义作为真实来源。