关于restful:开发出优秀的API构建RESTful-API的13种最佳实践

43次阅读

共计 3329 个字符,预计需要花费 9 分钟才能阅读完成。

首发于公众号《前端全栈开发者》,第一工夫浏览最新文章,会优先两天发表新文章。

Facebook、GitHub、Google 以及其余许多巨头都须要一种服务和生产数据的形式。在当今的开发环境中,RESTful API 依然是服务和生产数据的最佳抉择之一。

然而你是否思考过学习行业标准?设计 RESTful API 的最佳实际是什么?从实践上讲,任何人都能够在不到五分钟的工夫内疾速启动数据 API——无论是 Node.js,Golang 还是 Python。

咱们将探讨在构建 RESTful API 时应思考的 13 种最佳实际。但首先,让咱们疾速说明 RESTful API。

什么是 RESTful API?

RESTful API 须要满足以下束缚能力被称为 RESTful API。

  1. 客户端 - 服务器模型 :RESTful API 遵循客户端 - 服务器模型,其中服务器为数据提供服务,而客户端连贯到服务器以应用数据。客户端和服务器之间的交互是通过 HTTP(S)申请进行的,该申请传输了申请的数据。
  2. 无状态 :更重要的是,RESTful API 应该是无状态的。每个申请都被视为独立申请。服务器不应跟踪可能影响未来申请后果的任何外部状态。
  3. 对立接口 :最初,一致性定义了客户端和服务器之间的交互方式。RESTful API 定义了命名资源的最佳实际,但定义了容许你批改资源 / 与之交互的固定 HTTP 操作。能够在 RESTful API 中拜访以下 HTTP 操作:

    • GET 申请:检索资源
    • POST 申请:创立资源或将信息发送到 API
    • PUT 申请:创立或替换资源
    • PATCH 申请:更新现有资源
    • DELETE 申请:删除资源

在对 RESTful API 的个性有了更深刻的理解后,是时候理解更多对于 RESTful API 的最佳实际了。

本文为你提供了 13 种最佳实际的可行清单。让咱们来摸索!

1. 正确应用 HTTP 办法

咱们曾经探讨了可用于批改资源的 HTTP 办法:GET,POST,PUT,PATCH 和 DELETE。

尽管如此,许多开发人员还是偏向于滥用 GET 和 POST 或 PUT 和 PATCH。通常,咱们看到开发人员应用 POST 申请来检索数据。此外,咱们看到开发人员应用 PUT 申请来替换资源,而他们只想更新该资源的单个字段。

确保应用正确的 HTTP 办法,因为这将为应用你的 RESTful API 的开发人员减少很多凌乱。最好是保持应用预约的准则。

2. 命名约定

理解 RESTful API 命名约定将对你有组织地设计 API 有很大帮忙。依据你服务的资源设计一个 RESTful API。

例如,你的 API 治理着作者和书籍(是的,一个经典的例子)。当初,咱们要增加一个新作者或拜访一个 ID 为 3 的作者。你能够设计上面的路由来达到这个目标:

  • api.com/addNewAuthor
  • api.com/getAuthorByID/3

设想一下,一个 API 承载了许多资源,每个资源都有许多属性。可能的端点列表将变得无穷无尽,而且对用户不是很敌对。所以咱们须要一种更有条理和标准化的形式来设计 API 端点。

RESTful API 最佳实际形容了端点应以资源名称结尾,而 HTTP 操作则形容操作。当初咱们失去:

  • POST api.com/authors
  • GET api.com/authors/3

如果咱们想拜访 ID 为 3 的作者已经写过的所有书籍怎么办?对于这种状况,RESTful API 也有解决办法:

  • GET api.com/authors/3/books

最初,如果您要为 ID 为 3 的作者删除 ID 为 5 的书,该怎么办?同样,让咱们遵循雷同的结构化办法来造成以下端点:

  • DELETE api.com/authors/3/books/5

简而言之,利用 HTTP 操作和资源映射的结构化形式来造成易于了解的端点门路。这种办法的最大长处是,每个开发人员都理解 RESTful API 的设计形式,他们能够立刻应用 API,而不用浏览你的每个端点的文档。

3. 应用复数资源

资源应始终应用其复数模式。为什么?假如你要检索所有作者。因而,你将调用以下端点:GET api.com/authors

当你读取申请时,你无奈判断 API 响应是否只蕴含一个或所有作者。因而,API 端点应该应用复数资源。

4. 正确应用状态码

状态码在这里不只是为了好玩,它们有一个明确的目标,状态码告诉客户端申请的胜利。

最常见的状态码类别包含:

  • 200(OK):申请已胜利解决并实现。
  • 201(Created):批示胜利创立资源。
  • 400(Bad Request):代表客户端谬误。也就是说,申请的格局不正确或短少申请参数。
  • 401(Unauthorized):未受权,你尝试拜访你没有权限的资源。
  • 404(Not Found):申请的资源不存在。
  • 500(Internal Server Error):外部服务器谬误,服务器在执行申请期间引发异样。

状态码的残缺列表能够在 Mozilla Developers 找到。

5. 遵循雷同约定

最常见的是,RESTful API 提供 JSON 数据,因而,应遵循 camelCase 大小写常规。然而,不同的编程语言应用不同的命名约定。

6. 如何解决搜寻,分页,过滤和排序

搜寻,分页,过滤和排序等操作并不代表独自的端点。这些操作能够通过应用随 API 申请提供的查问参数来实现。

例如,让咱们检索按名称升序排列的所有作者。你的 API 申请应如下所示:api.com/authors?sort=name_asc

此外,我想检索一个名称为“Michiel”的作者。该申请看起来像这样 api.com/authors?search=Michiel

侥幸的是,许多 API 我的项目都带有内置的搜寻、分页、过滤和排序功能。这将为你节俭很多工夫。

7.API 版本控制

我不常看到这一点,但这是对你的 API 进行版本调整的最佳实际。这是一种无效的形式来向你的用户传播重大的变动。

通常,API 的版本号蕴含在 API URL 中,例如:api.com/v1/authors/3/books

8. 通过 HTTP 标头发送元数据

HTTP 标头容许客户端随其申请发送其余信息。例如,Authorization 标头通常用于发送身份验证数据以拜访 API。

你能够在此处找到所有可能的 HTTP 标头的残缺列表。

9. 限速

速率限度是管制每个客户端申请数量的一种乏味办法。这些是服务器可能返回的速率限度标头:

  • X-Rate-Limit-Limit:通知客户端在指定工夫距离内能够发送的申请数。
  • X-Rate-Limit-Remaining:通知客户端在以后工夫距离内仍能够发送多少个申请。
  • X-Rate-Limit-Reset:通知客户端速率限度何时重置。

10. 有意义的错误处理

如果呈现问题,请务必向开发人员提供有意义的谬误音讯,这一点很重要。例如,Twilio API 返回以下谬误格局:

{
  "status": 400,
  "message": "Resource books does not exist",
  "code": 24801,
  "more_info": "api.com/docs/errors/24801"
}

在此示例中,服务器返回状态代码和人类可读的音讯。此外,还返回外部错误代码,供开发人员查找特定谬误,这使开发人员能够疾速查找无关该谬误的更多信息。

11. 抉择正确的 API 框架

存在许多用于不同编程语言的框架,抉择一个反对 RESTful API 最佳做法的框架十分重要。

对于 Node.js,后端开发人员喜爱应用 Express.js 和 Koa,而对于 Python,Falcon 是一个不错的抉择。

12. 文档化你的 API

最初,写文档!我不是在开玩笑,这依然是传递你新开发的 API 常识最简略的办法之一。

只管你的 API 遵循 RESTful API 列出的所有最佳实际,但依然值得你花工夫记录各种元素,比方 API 解决的资源或利用于服务器的速率限度。

想想你的其余开发人员,文档大大减少了学习 API 所需的工夫。

13. 把事件简单化!

不要让你的 API 过于简单,放弃资源简略。正确定义你的 API 解决的不同资源,将帮忙你在将来防止资源相干的问题。定义你的资源,还要精确定义它的属性和资源之间的关系。这样一来,如何连贯不同的资源就没有争议的空间了。

如果您喜爱这篇介绍 API 最佳实际的文章,那么您可能还喜爱从头开始学习构建 RESTful API。

正文完
 0