1. 概述

在这篇文章中,我们将比较REST和gRPC,这两种用于Web API的架构风格。

2. 什么是REST?

REST(Representational State Transfer)是一种为设计Web API提供指导原则的架构风格。它使用标准的HTTP 1.1方法,如GETPOSTPUTDELETE来操作服务器端资源。此外,REST API提供了预定义的URL,客户端必须使用这些URL与服务器进行连接。

3. 什么是gRPC?

gRPC(远程过程调用)是由Google开发的一种开源数据交换技术,使用的是HTTP/2协议。它使用Protocol Buffers二进制格式(Protobuf)进行数据交换。这种架构风格还规定了开发者在开发或消费Web API时必须遵循的规则。

4. REST与gRPC比较

4.1. 指南与规则

REST是一套设计Web API的指南,并不强制执行任何东西。而gRPC通过定义一个.proto文件,要求客户端和服务器在数据交换时必须遵守,从而实现了规则的强制性。

4.2. 基于HTTP的协议

REST基于HTTP 1.1协议提供请求-响应通信模型。因此,当多个请求到达服务器时,它必须依次处理每一个。

然而,gRPC采用基于HTTP/2的客户端-响应通信模型,用于设计依赖于HTTP/2的Web API。因此,gRPC支持流式通信,并能同时处理多个请求。此外,它还支持类似于REST的单个消息通信。

4.3. 数据交换格式

REST通常使用JSON和XML进行数据传输,而gRPC则依赖于Protobuf在HTTP/2协议上进行数据交换。

4.4. 序列化与强类型

REST在大多数情况下使用JSON或XML,需要进行序列化和转换成目标编程语言,无论是客户端还是服务器,这会增加响应时间并可能导致解析请求/响应时出错。

然而,gRPC提供自动将强类型消息转换为所选编程语言的Protobuf交换格式。

4.5. 延迟

使用HTTP 1.1的REST需要为每个请求进行TCP握手,因此可能会遇到延迟问题。

相反,gRPC依赖于HTTP/2协议,它使用多路复用流。因此,多个客户端可以同时发送多个请求,而无需为每个请求建立新的TCP连接。此外,服务器还可以通过已建立的连接向客户端推送通知。

4.6. 浏览器支持

基于HTTP 1.1的REST API具有普遍的浏览器支持。然而,gRPC的浏览器支持有限,因为许多旧版本的浏览器对HTTP/2的支持尚不成熟。因此,它可能需要gRPC-web和代理层来在HTTP 1.1和HTTP/2之间进行转换。目前,gRPC主要适用于内部服务。

4.7. 代码生成功能

REST没有内置的代码生成功能,但我们可以使用第三方工具如Swagger或Postman为API请求生成代码。

另一方面,gRPC通过其protoc编译器,提供了原生的代码生成功能,兼容多种编程语言

5. 总结

在这篇文章中,我们比较了两种Web API的架构风格:REST和gRPC。

总结来说,REST在集成微服务和第三方应用到核心系统方面更为方便

然而,gRPC适用于诸如物联网系统(需要轻量级的消息传输)、无浏览器支持的移动应用以及需要多路复用流的应用场景。