翻译-理解RPC,REST和GraphQL

原文

了解 RPC 相关的一些知识,这个文章写得不错。

未完待续。。。

每个API都会表现出一些模式,最终归结为 RPC, REST, 或者一个”查询语言”

http vs rpc

rpc 缺点:耦合性强
http缺点:使用效率低,冗余数据多
优点:解耦

通用定义的http1.1协议的tcp报文包含太多废信息,一个POST协议的格式大致如下

HTTP/1.0 200 OK 
Content-Type: text/plain
Content-Length: 137582
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84

<html>
<body>Hello World</body>
</html>

即使编码协议也就是body是使用二进制编码协议,报文元数据也就是header头的键值对却用了文本编码,非常占字节数。如上图所使用的报文中有效字节数仅仅占约 30%,也就是70%的时间用于传输元数据废编码。

Remote Procedure Call (RPC)

RPC 是最早,最简单的 API 交互形式。是可以执行另一个服务器上一段代码的一种途径。当使用 HTTP 或者 AMQP 实现的时候就是 Web API。有一个方法和一些参数,很像使用 javascript 调用函数,通过方法名字和参数就可以调用了。

例如:

POST /sayHello HTTP/1.1
HOST: api.example.com
Content-Type: application/json
{"name": "Racey McRacerson"}

在JavaScript中同样的,我们定义函数,然后在后面需要的时候调用它。

/* Signature */
function sayHello(name) {
// ...
}
/* Usage */
sayHello("Racey McRacerson");