熟悉spring、springboot体系的同学都有接触过REST,但是大家和我一样可能会使用,却没有系统了解过。此篇文章主要梳理了什么是REST、RESTFUL及RPC以及其之间的差别。
什么是GRPC?
RPC
- RPC(Remote Procedure Call Protocol) 远程过程调用协议。
- RPC是一种通过网络从远程计算机程序上请求服务,不需要了解底层网络技术的协议。
- RPC主要作用就是不同的服务间方法调用就像本地调用一样便捷。
RPC框架包含4个核心的组件,分别是Client ,Server,Client Stub以及Server Stub,这个Stub大家可以理解为存根
● 客户端(Client),服务的调用方。
● 服务端(Server),真正的服务提供者。
● 客户端存根,存放服务端的地址消息,再将客户端的请求参数打包成网络消息,然后通过网络远程发送给服务方。
● 服务端存根,接收客户端发送过来的消息,将消息解包,并调用本地的方法
REST
REST是一种架构风格,指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。REST规范把所有内容都视为资源,网络上一切皆资源,每个资源都有一个唯一的标识符(通常是 URL),客户端通过 URL 访问和操作资源。REST并没有创造新的技术,组件或服务,只是使用Web的现有特征和能力。 可以完全通过HTTP协议实现,使用 HTTP 协议处理数据通信。REST架构对资源的操作包括获取、创建、修改和删除资源的操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。
区别:
GRPC
GRPC 是一个高性能、开源和通用的 RPC 框架,由 Google 开发并开源。它基于 HTTP/2 标准,使用 Protocol Buffers(protobuf)作为默认的数据序列化和接口描述语言,可以在各种环境中构建分布式系统。GRPC 支持多种编程语言,包括 C、C++、Java、Go、Python、Node.js 等,使得不同语言的应用程序能够相互通信。
优势及特点:
- 高性能:gRPC 基于 HTTP/2 协议,利用了其多路复用、流控制、头部压缩等特性,从而提供了更高效的网络通信,可以支持大规模的并发连接和低延迟的通信。
- 简单易用:gRPC 使用 Protocol Buffers 来定义服务接口和消息格式,使得开发者可以轻松地定义和维护接口,并生成相应的客户端和服务器端代码。
- 跨语言支持:gRPC 支持多种编程语言,可以在不同的语言环境中使用相同的服务接口,使得不同语言的应用程序能够方便地进行通信。
Protocol Buffers
Protocol Buffers(protobuf)是一种轻量级、高效的数据序列化和接口描述语言,由 Google 开发并开源。它可以用于在不同的应用程序之间进行数据交换和通信。
- 高效的数据序列化:Protocol Buffers 使用二进制格式来表示数据,相比于文本格式(如 XML、JSON),二进制格式更加紧凑,传输效率更高,可以减少网络带宽和数据存储空间的消耗。
- 跨语言支持:Protocol Buffers 支持多种编程语言,包括 C、C++、Java、Go、Python、JavaScript 等,使得不同语言的应用程序能够方便地进行数据交换和通信。
- 自描述性:Protocol Buffers 使用 .proto 文件来定义数据结构和消息格式,这些文件可以被编译成不同编程语言的代码,包括消息类、序列化和反序列化方法等,使得数据结构的定义和使用变得简单和一致。
- 高性能:由于 Protocol Buffers 使用了二进制格式和紧凑的数据表示,加上自动生成的代码,使得序列化和反序列化的性能非常高效。