![1ead73329fafc9ce6ef8ecc931bf5a8f.png](https://i-blog.csdnimg.cn/blog_migrate/17ff58c2becc3ea5bda832d7cc12f108.jpeg)
远程过程调用 (RPC) 是最简单的API范例之一,用一句话概括就是其client在server上执行代码块,换句话说,就是要像调用本地的函数一样去调远程函数。之前我们讲到REST是关于资源(resources) 的,而RPC是关于动作 (actions) 的。客户端通过类型传递方法名称 (method) 和参数 (arguments) 到服务器,并接收回JSON或XML。
RPC APIs 通常遵循两个简单的规则:
- 端点包含要执行的操作名称。
- API调用使用恰当的HTTP动词: GET用于只读请求,POST用于其他请求。
RPC风格非常适合于那些需要暴露各种 action 的api,这些操作可能比用CRUD封装的操作有更多的细微差别和复杂性。RPC样式的API还适用于复杂的资源模型或针对多种类型资源的操作。
下面我给大家举个例子,Slack公司的API就是采用了这种RPC风格的 web API。下面这个例子展示了一个POST 请求去调用Slack's 回话存档的 RPC API。 参考链接
Method URL: https://slack.com/api/conversations.archive
HOST slack.com
Content-Type: application/x-www-form-urlencoded
Slack的对话 API 允许一些操作 [具体链接] ,例如归档 (archive)、加入(join)、离开 (leave) 和 重命名 (rename) 等。尽管在在这些例子中看起来有一个明确的“资源”,但并不是所有这些操作都能很好地适应REST模式。
此外,还有些其他操作,比如“发布消息”:chat.postMessage,它与web 客户端的消息资源、附件资源和可见性设置有着复杂的关系。
![dc2d99444d8eb5816db2af0cda4ed9fe.png](https://i-blog.csdnimg.cn/blog_migrate/9b1f1d71650c42c32505474e3f781442.jpeg)
RPC风格的API同样支持HTTP,但是它还有其他一些用于支持RPC风格API的高性能协议,包括Apache Thrift和gRPC。Thrift和gRPC请求都是序列化的 (gRPC支持JSON)。结构化的数据和清晰的接口定义支持了这种序列化。Thrift和gRPC也有编辑数据结构的内置机制,在这里就不多展开阐述了,有感兴趣的小伙伴可以去了解一下!
往期API设计文章
Justin:【API设计系列】GraphQL | 一种为你的API 而生的查询语言
Justin:【设计API系列】你真的清晰的了解过REST APIs么?奶茶的故事让你再也不会忘记它
Justin:【设计API系列】一文了解常见的事件驱动APIs范例