RPC与REST有什么区别?

  • Post author:
  • Post category:其他


原文:

RPC与REST有什么区别?

77bb0997e4bdf72180a6c1c86262531c.jpeg

背景

好多开发的同学在工作中,经常分不清RPC和REST的区别,导致经常沟通不在一个层次上。甚至有些同学把这两个当成同一个东西。

RPC与REST的区别?

对比名称

rpc

rest

备注

架构风格

RPC是基于过程调用的架构风格,它将远程方法调用封装为本地方法调用的形式,实现了不同进程或不同机器之间的通信。

REST是基于资源的架构风格,它通过URL表示资源,使用HTTP协议的GET、POST、PUT、DELETE等方法来对资源进行操作。

一个是基于通信的调用架构,一个是基于资源的,不一样哈。

通信协议

RPC通常使用更轻量级、二进制的协议,如Protocol Buffers、Thrift等,以提高性能和效率。

REST使用基于文本的协议,如HTTP,以实现跨平台和跨语言的互操作性。

数据格式

RPC通常使用较为紧凑和高效的二进制数据格式,如Protocol Buffers,以降低数据传输的大小和网络开销。

REST通常使用基于文本的数据格式,如JSON、XML等,以易读易解析的方式呈现数据。

接口形式

RPC的接口通常定义了明确的方法名、参数和返回值类型,类似于本地方法调用,隐藏了网络通信的细节。

REST的接口通过HTTP方法和URL来表示对资源的操作,如GET /users,PUT /users/1等。

状态管理

RPC是无状态的,每个请求都是独立的,服务端不需要保留客户端的状态信息。

REST是有状态的,客户端可以通过使用会话、Cookie等机制来维护和传递状态信息。

这点特别重要,好多工作好多年的同学还不清楚。REST是可选的。

RPC和REST在什么场景下使用?


RPC适用的场景包括:

  • 分布式系统:RPC可用于不同进程或不同机器之间的方法调用,方便实现分布式系统的通信。

  • 高性能要求:由于RPC使用轻量级、二进制的通信协议,如Protocol Buffers,能够提供较高的性能和效率。

  • 内部系统集成:企业内部的服务之间常常需要相互调用,使用RPC可以简化和加速这些调用过程。

  • 强类型语言:RPC广泛用于静态、强类型的编程语言中,如Java、C++等,以便更好地支持类型的定义和校验。


REST适用的场景包括:

  • Web服务:REST是一种基于HTTP协议的架构风格,非常适合构建Web服务和API。

  • 资源操作:REST通过URL和HTTP方法来表示对资源的操作,适合处理资源的增删改查等操作。

  • 跨平台和跨语言:REST使用基于文本的数据格式,如JSON、XML,便于不同平台和语言之间的数据交换和解析。

  • 状态无关:REST的无状态特性使其能够扩展和分布式部署,适合构建可伸缩的系统。

  • 前后端分离:REST与前端开发常常结合使用,可以实现前后端的解耦和并行开发。

最后

在企业里面一般rpc用于服务与服务之间的通讯比较多,比如openfegin这种,但是rest主要是基于资源的解决方案,类似c++或python要去调用java或之间互相通讯,那么这种跨语言跨平台一般考虑场景就是通过rest的方式实现。当然大部分rpc也实现得了,因为大部分是通过http协议来通讯的,只要这个rpc支持就可以了。


参考文章:


https://baike.baidu.com/item/%E8%BF%9C%E7%A8%8B%E8%BF%87%E7%A8%8B%E8%B0%83%E7%94%A8/7854346?fromtitle=RPC&fromid=609861&fr=aladdin


https://baike.baidu.com/item/RPC%E6%9C%8D%E5%8A%A1%E5%99%A8/617414?fr=ge_ala


https://baike.baidu.com/item/rest/6330506?fr=ge_ala



版权声明:本文为qq_16498553原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。