16

API 开发者永不“REST”

 3 years ago
source link: https://www.infoq.cn/article/w3AfrWhsfs23TY9HvSws
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

免责声明:尽管标题有争议,但本文并不是试图证明RPC比REST更好,或者GraphQL比RPC更好。相反,本文的目的是向你介绍这些方法的大致情况以及它们的优缺点。最终的选择将会是一个权衡。

尽管 HTTP 是一个应用层(例如,L7)协议,但在 API 开发方面,HTTP 实际上扮演着一个较低层次的传输机制的角色。

在 HTTP 上如何实现 API 有许多方法,它们在概念上有所不同:

  • REST

  • RPC

  • GraphQL

...但是一个普通的开发人员需要知道的实际清单并不局限于这三个家伙。在这个领域中还有 JSON、gRPC、protobuf 等其它术语。让我们试着一次性了解所有这些术语吧!

mAj2uiI.png!mobile

代表性状态转移(REST)

首先, REST 只是一种软件架构风格。它是一组设计约束,而不是具体的协议。REST 依赖于资源的概念。例如,一个 REST API 是由一组资源(名词)和与这些资源交互的有限数量的动作(动词,查询 fetch、创建 create、更新 update、删除 delete 等)组成。它在思想上非常接近最初的 HTTP 设计,主要基于资源(URLs)和方法(GET、POST、PUT、DELETE)。因此,从实现的角度来看,REST 模型到 HTTP 协议的映射相对简单:

# Create new bookPOST http://myapi.com/books/ (author="R. Feynman", year=1975) -> book_id

# Get book with ID = 1GET http://myapi.com/books/1 () -> (id=1, author="R. Feynman", year=1975)

# Update book with ID = 1PUT http://myapi.com/books/1 (id=1, author="Richard Feynman", year=1975) -> (...)

# Delete book with ID = 1DELETE http://myapi.com/books/1 () -> nu

复制代码

可能每一个现代 web 框架都提供了构建一个 REST 风格的 Web 服务所需的所有现成工具。从客户端的角度来看,调用一个 REST API 非常简单——它只需要将指定的 HTTP 方法发送到一组预定义的 URLs。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK