Restful API -- 前后端程序员都需要了解的基础

635 阅读2分钟

RESTful API(Representational State Transfer)是一种基于HTTP协议的接口设计风格,用于构建网络服务。

Restful API 也是目前十分经典并且被广泛应用的 API 书写规范。你可以在各类网站上看到的它的影子。

如果你想要设计一个更加规范的网站,那么 Restful API 是你最值得了解的一个知识点。

开始

这是一个 RESTful API 例子:

POST https://api.example.com/v1/libraries/1/categories/2/books
Content-Type: application/json
​
{
  "title": "The Art of Computer Programming",
  "author": "Donald E. Knuth",
  "isbn": "978-0201896831",
  "publicationDate": "1968-01-01"
}

上述中的例子具有几个部分:

  • POST HTTP 动词
  • [https://api.example.com](https://api.example.com) API域名,有时候如果域名需要复用,则可以 https://xx.com/api
  • /v1版本
  • libraries, categories, books使用名词来定位资源。
  • /libraries/1/categories/2/books RESTful API 应该使用 URI(统一资源标识符) 来定位资源,以确保每个资源都有一个唯一的标识符。URI 应该具有层级结构,以便表示资源之间的关系。
  • 使用json或者XML表示数据

Restful API 更多的部分

除了上述的部分,Restful API 还可以具有更多,例如参数:

GET /users?page=1&pageSize=10

使用 HATEOAS(Hypermedia As The Engine Of Application State)来提高 RESTful API 的可发现性:

GET /users/1
{
  "id": 1,
  "name": "Tom",
  "age": 25,
  "links": [
    {
      "rel": "orders",
      "href": "/users/1/orders"
    },
    {
      "rel": "edit",
      "href": "/users/1/edit"
    }
  ]
}

客户端可以通过 API 返回的链接自主地遍历 API,并进行资源的操作。

Restful API 的发展

RESTful API 的未来发展方向主要包括以下几个方面:

  • 支持更多的协议和数据格式,如 gRPCGraphQL 等。
  • 增强 API 的安全性和稳定性,包括 OAuth2 认证、HTTPS 协议等。
  • 支持更多的语言和框架,使得 RESTful API 可以更加广泛地应用于不同的开发环境中。
  • 支持自动化工具,如 Swagger、Postman 等,以便更加方便地进行 API 的设计、文档编写和测试。

QA

Q:为什么在RESTful API设计中,经常使用复数名词作为路径的一部分?

A:

资源集合的概念 在RESTful架构中,每个URL代表一种资源。通常情况下,API会操作资源的集合(collection)。使用复数名词可以直观地表示这一点。例如:

  • https://api.example.com/v1/libraries 表示多个图书馆的集合。
  • https://api.example.com/v1/libraries/1/books 表示图书馆ID为1的所有图书的集合。

语义清晰 复数名词明确地表示资源的集合,而单数名词(id)则表示单个资源。这有助于使API的语义更加清晰。例如::

  • GET /libraries 获取所有图书馆
  • POST /libraries 创建一个新的图书馆
  • GET /libraries/{libraryId} 获取某个特定图书馆的信息

参考资料

RESTful API 设计指南 - 阮一峰的网络日志

REST API 设计规范:最佳实践和示例