在 Web 开发中,REST API 在确保客户端和服务器之间的顺畅通信方面发挥着重要作用。

您可以将客户端视为前端,将服务器视为后端。

客户端(前端)和服务器(后端)之间的通信通常不是超级直接的。因此,我们使用一个称为应用程序编程接口(或API)的接口来充当客户端和服务器之间的中介。

由于 API 在这种客户端-服务器通信中起着至关重要的作用,因此在设计 API 时应始终牢记最佳实践。这有助于维护它们的开发人员以及使用它们的开发人员在执行这些职责时不会遇到问题。

在本文中,我将带您了解在制作 REST API 时要遵循的 9 个最佳实践。这将帮助您制作出最好的 API,也让 API 使用者的生活更轻松。

首先,什么是 REST API?

REST 代表 具象状态转移。它是Roy Fielding在2000年创建的一种软件架构风格,用于指导Web架构的设计。

任何遵循REST设计原则的API(应用程序编程接口)都被称为RESTful。

简而言之,REST API是两台计算机通过HTTP(超文本传输协议)进行通信的媒介,其通信方式与客户端和服务器通信的方式相同。

REST API 设计最佳实践

1. 使用 JSON 作为发送和接收数据的格式

过去,接受和响应 API 请求主要是用 XML 甚至 HTML 完成的。但如今,JSON(JavaScript Object Notation)在很大程度上已成为发送和接收API数据的事实格式。

这是因为,例如,对于XML,解码和编码数据通常有点麻烦 - 因此XML不再受到框架的广泛支持。

例如,JavaScript有一个内置的方法,通过fetch API解析JSON数据,因为JSON主要是为它制作的。但是,如果您使用的是任何其他编程语言,例如Python或PHP,它们现在都有方法来解析和操作JSON数据。

例如,Python 提供并用于处理 JSON 数据。 json.loads() json.dumps()

若要确保客户端正确解释 JSON 数据,应在发出请求时将响应标头中的类型设置为。 Content-Type application/json

另一方面,对于服务器端框架,其中许多会自动设置。例如,Express现在拥有用于此目的的中间件。NPM 包仍然适用于相同的目的。 Content-Type express.json() body-parser

2. 在端点中使用名词而不是动词

设计 REST API 时,不应在终结点路径中使用谓词。终结点应使用名词,表示每个终结点的作用。

这是因为 HTTP 方法(如 、 、 、 和)已经是用于执行基本 CRUD(创建、读取、更新、删除)操作的谓词形式。 GET POST PUT PATCH DELETE

GET 、 、 和 是最常见的 HTTP 谓词。还有其他的,如、、、等。 POST PUT PATCH DELETE COPY PURGE LINK UNLINK

因此,例如,终结点不应如下所示:

https://mysite.com/getPosts or https://mysite.com/createPost

相反,它应该是这样的: https://mysite.com/posts

简而言之,您应该让 HTTP 谓词处理终结点的作用。因此,将检索数据,将创建数据,将更新数据,并将摆脱数据。 GET POST PUT DELETE

3. 使用复数名词命名集合

您可以将 API 的数据视为来自使用者的不同资源的集合。

如果你有一个类似 的终结点,则可以删除包含请求的帖子,或者使用 或 请求更新帖子,但它不会告诉用户集合中可能存在其他一些帖子。这就是为什么你的集合应该使用复数名词。 https://mysite.com/post/123 DELETE PUT PATCH

因此,它应该是 , 而不是 。 https://mysite.com/post/123 https://mysite.com/posts/123

4. 在错误处理中使用状态代码

在响应对 API 发出的请求时,应始终使用常规 HTTP 状态代码。这将有助于您的用户了解正在发生的事情 - 请求是否成功,或者是否失败,或者其他原因。

下表显示了不同的 HTTP 状态代码范围及其含义:

状态代码范围 意义
100 – 199 信息性响应。
例如,102 表示正在处理资源
300 – 399 重定向
例如,301 表示永久移动
400 – 499 客户端错误
400 表示请求错误,404 表示找不到资源
500 – 599 服务器端错误
例如,500 表示内部服务器错误

5. 使用嵌套在端点上显示关系

通常,不同的端点可以相互链接,因此您应该嵌套它们,以便更容易理解它们。

例如,在多用户博客平台的情况下,不同的帖子可以由不同的作者编写,因此在这种情况下,诸如这样的端点将进行有效的嵌套。 https://mysite.com/posts/author

同样,帖子可能有其单独的评论,因此要检索评论,像这样的端点将是有意义的。 https://mysite.com/posts/postId/comments

您应该避免深度超过 3 层的嵌套,因为这会使 API 变得不那么优雅和可读。

6. 使用筛选、排序和分页来检索请求的数据

有时,API的数据库可能会变得非常大。如果发生这种情况,从此类数据库中检索数据可能会非常慢。

筛选、排序和分页都是可以对 REST API 集合执行的操作。这允许它只检索,排序和排列必要的数据到页面中,以便服务器不会被请求占用太多。

以下为筛选终结点的示例:

此终结点将获取任何具有 JavaScript 标记的帖子。 https://mysite.com/posts?tags=javascript

7. 使用 SSL 确保安全

SSL 代表安全套接字层。这对于 REST API 设计中的安全性至关重要。这将保护您的API,并使其不易受到恶意攻击。

您应该考虑的其他安全措施包括:使服务器和客户端之间的通信私密化,并确保使用API的任何人都不会获得超过他们请求的内容。

SSL证书不难加载到服务器上,并且主要在第一年免费提供。在无法免费购买的情况下,购买它们并不昂贵。

通过 SSL 运行的 REST API 的 URL 与不通过 SSL 运行的 REST API 的 URL 之间的明显区别是 HTTP:
中的“s”在 SSL 上运行。
不在 SSL 上运行。 https://mysite.com/posts http://mysite.com/posts

8. 通过版本控制保持清晰

REST API 应具有不同的版本,因此不会强制客户端(用户)迁移到新版本。如果您不小心,这甚至可能会破坏应用程序。

Web开发中最常见的版本控制系统之一是语义版本控制。

语义版本控制的一个示例是 1.0.0、2.1.2 和 3.3.4。第一个数字表示主要版本,第二个数字表示次要版本,第三个数字表示修补程序版本。

来自科技巨头和个人的许多RESTful API通常都是这样的:
对于版本1
,版本2 https://mysite.com/v1/ https://mysite.com/v2

Facebook以这种方式发布他们的API:

Spotify以相同的方式进行版本控制:

并非每个 API 都是如此。Mailchimp以不同的方式版本自己的API:

以这种方式使 REST API 可用时,不会强制客户端迁移到新版本,以防它们选择不这样做。

9. 提供准确的 API 文档

当您制作REST API时,您需要帮助客户端(消费者)学习并弄清楚如何正确使用它。最好的方法是为 API 提供良好的文档。

文档应包含:

  • API 的相关端点

  • 终结点的示例请求

  • 以多种编程语言实现

  • 针对不同错误及其状态代码列出的消息

可用于 API 文档的最常用工具之一是 Swagger。您还可以使用 Postman(软件开发中最常见的 API 测试工具之一)来记录 API。

结论

在本文中,您了解了构建 REST API 时要记住的几个最佳实践。

请务必将这些最佳实践和约定付诸实践,以便您可以构建功能强大的应用程序,这些应用程序运行良好、安全,并最终使 API 使用者的生活更轻松。

感谢您的阅读。现在,使用这些最佳实践制作一些 API。

REST API 最佳实践 – REST 端点设计示例相关推荐

  1. android 首页接口设计方案,Android开发最佳实践——1.接口设计

    Android开发最佳实践--1.接口设计 一个项目刚开始的时候,最需要确认的就是接口设计了:数据如何传递,使用什么格式什么协议乃至如何保证安全性.如果一个项目的接口设计不合理--比如没有考虑到安全性 ...

  2. 核心API最佳实践——JDK日志分级

    核心API最佳实践--JDK日志分级 时间:2005-10-29 08:00 来源:网管之家bitsCN.com 字体:[大 中 小] 日志(Log)是什么?字典对其的解释是"对某种机器工作 ...

  3. ASP.NET Core Web API 最佳实践指南

    原文地址: ASP.NET-Core-Web-API-Best-Practices-Guide 介绍 当我们编写一个项目的时候,我们的主要目标是使它能如期运行,并尽可能地满足所有用户需求. 但是,你难 ...

  4. RESTful API 最佳实践

    RESTful是目前最流行的 API 设计规范,用于 Web 数据接口的设计. 它的大原则容易把握,但是细节不容易做对.本文总结 RESTful 的设计细节,介绍如何设计出易于理解和使用的 API. ...

  5. 使用Android API最佳实践

    本文由伯乐在线-imesong翻译自meetme.欢迎加入Android小组.转载请参见文章末尾处的要求. 写在前面 现在,Android应用程序中集成第三方API已十分流行.应用程序都有自己的网络操 ...

  6. 使用Android API最佳实践 Retrofit OKHttp GSON

    点击此处查看原文 写在前面 现在,Android应用程序中集成第三方API已十分流行.应用程序都有自己的网络操作和缓存处理机制,但是大部分比较脆弱,没有针对网络糟糕情况进行优化.感谢Square ln ...

  7. 索尼vgn ux拆屏幕_UX最佳实践:如何设计可扫描的应用程序屏幕截图

    索尼vgn ux拆屏幕 by Girish Rawat 由吉里什·拉瓦特(Girish Rawat) 如何设计可扫描的应用程序屏幕截图 (How to Design Scannable App Scr ...

  8. 简述使用REST API 的最佳实践

    Facebook,Google,Github,Netflix,Amazon和Twitter等许多巨头都拥有自己的REST(ful)API,您可以访问它们来获取甚至写入数据. 但是,为什么所有都需要RE ...

  9. Prometheus Metrics 设计的最佳实践和应用实例,看这篇够了!

    Prometheus 是一个开源的监控解决方案,部署简单易使用,难点在于如何设计符合特定需求的 Metrics 去全面高效地反映系统实时状态,以助力故障问题的发现与定位.本文即基于最佳实践的 Metr ...

最新文章

  1. android 画布旋转,Android-在安卓开发中,如何实现一个简单的图片旋转
  2. mysql binlog c++_MySQL binlog的格式解析
  3. PLSQL 升级到最新版本 以及 破解注册细则
  4. graphpad饼状图_应用 Graphpad 统计作图,助你写文章事半功倍
  5. MAX6299MTT在CPLD上的应用
  6. 配置文件填写内网地址和127.0.0.1的区别
  7. 如何判断iPhone5 iPhone 5S iPhone6 iPhone6 plus?
  8. Ubuntu系统字体所在的文件夹的位置。
  9. 看电影 - 国产凌凌漆
  10. Win32计算器:输入出生年月日,输出周岁,星座以及距离下一次生日的天数
  11. 计算机考研360能去哪里,计算机专业考研,有什么好的211院校推荐?
  12. safari 模拟手机显示
  13. 钟祥义工与残疾人互动频繁
  14. 浙江宁波天童禅寺重阳节前夕慰问鄞州区东吴福利院
  15. 定制xdoclet 标签
  16. VPP线程之间报文调度
  17. nginx的DR模式
  18. C++ 繁华的曼哈顿
  19. 3.java基础--- if、switch语句编程题
  20. iframe 嵌入页面后无法显示的问题

热门文章

  1. 关于单片机替代PLC的思考
  2. 批处理修改注册表调整输入法
  3. 1.19.5.4.流上的Join、常规Join、时间区间Join、时态表Join、基于处理时间的时态Join、时态表函数Join、用法
  4. 操作系统systemd启动自启服务进程
  5. linux的周期行计划任务叫做atd,Linux任务计划
  6. 大话设计模式读书笔记之原型模式
  7. 信息系统分析与设计——第八章 领域对象建模
  8. 2019年8月13日 星期二 本周计划
  9. 科卡在线linux,典型建网方案之家庭内部网设计
  10. 嘎吱作响Creaks for mac(解谜游戏)中文版支持m1