RPC与REST有什么区别?

news2024/9/24 7:18:31

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/810698.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习技巧应用24-深度学习手撕代码与训练流程的联系记忆方法

大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用24-深度学习手撕代码与训练流程的联系记忆方法,大家都知道深度学习模型训练过程是个复杂的过程,这个过程包括数据的收集,数据的处理,模型的搭建,优化器的选择,损失函数的选择,模型训练,模型评估等步骤,其中缺少…

gitee使用参考

Git代码托管服务 2.1 常用的Git代码托管服务 gitHub( 地址:https://github.com/ )是一个面向开源及私有软件项目的托管平台,因为只支持Git 作为唯一的版本库格式进行托管,故名gitHub码云(地址:…

shell脚本:数据库的分库分表

#!/bin/bash ######################### #File name:db_fen.sh #Version:v1.0 #Email:admintest.com #Created time:2023-07-29 09:18:52 #Description: ########################## MySQL连接信息 db_user"root" db_password"RedHat123" db_cmd"-u${…

ROS暑期学校分享-2023

云课的优势 https://gitcode.net/ZhangRelay/cocubesim 网络编程和单机编程 网络编程和单机编程是两种不同的编程方式,它们的主要区别在于其应用场景和实现技术上。 1 应用场景 网络编程主要用于构建基于互联网的应用程序,例如Web应用程序、网上购物…

安装typora

1、下载压缩包 链接:https://pan.baidu.com/s/1nFvk3hAyXNbvKPJnu9ipIA 提取码:sdyy 2、安装typora 3、打开Crack 4、将这个dll文件复制粘贴到typora的安装路径里

Linux--进程的新建状态

新建状态: 操作系统创建了进程的内核数据结构(task_struct、mm_struct、页表),但是页表没有创建映射关系,而且磁盘里的程序的代码和数据未加载到物理内存

Spring注解系列——@PropertySource

在Spring框架中PropertySource注解是非常常用的一个注解,其主要作用是将外部化配置解析成key-value键值对"存入"Spring容器的Environment环境中,以便在Spring应用中可以通过Value或者占位符${key}的形式来使用这些配置。 使用案列 // Propert…

React 路由使用-详细介绍

路由初使用 抽象路由模块 src\page\Article\index.js const Article () > {return (<div><p>文章页</p></div>); };export default Article;src\router\index.js // 导入页面 import Article from "../page/Article"; import Login fr…

Leetcode 剑指 Offer II 037. 小行星碰撞

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定一个整数数组 asteroids&#xff0c;表示在同一行的小行星。…

无涯教程-jQuery - Dragable拖动函数

Drag-able 函数可与JqueryUI中的交互一起使用。此函数可在任何DOM元素上启用可拖动功能。无涯教程可以通过使用鼠标单击来拖动可拖动元素。 Drag able - 语法 $( "#draggable" ).draggable(); Drag able - 示例 下面是一个简单的示例&#xff0c;显示可拖动的用法…

【Java面试丨消息中间件】Kafka

一、kafka是如何保证消息不丢失 1. 介绍 使用kafka在消息的收发过程都有可能会出现消息丢失 &#xff08;1&#xff09;生产者发送消息到broker丢失 &#xff08;2&#xff09;消息在broker中存储丢失 &#xff08;3&#xff09;消费者从broker接收消息丢失 2. 生产者发送消…

002-Spring Bean 从扫描到创建

目录 Spring Bean 从扫描到创建扫描流程 class 到 BeanDefinition引入扫描&#xff1a;ClassPathBeanDefinitionScannerdoScanfindCandidateComponents(basePackage)registerDefaultFilters()this.registry 创建流程 BeanDefinition 到 Bean统一 BeanDefinition 类型finishBean…

HTML+CSS+JavaScript:轮播图自动播放

一、需求 轮播图如下图所示&#xff0c;需求是每隔一秒轮播图自动切换一次 二、代码素材 以下是缺失JS部分的代码&#xff0c;感兴趣的小伙伴可以先自己试着写一写 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /&…

【笔记】Java并发编程

Callable 和 Runable Java 8 并发教程&#xff1a;Threads和Executors 原文&#xff1a;Java 8 Concurrency Tutorial: Threads and Executors 译者&#xff1a;BlankKelly 来源&#xff1a;Java8并发教程&#xff1a;Threads和Executors 两种提交方式 submit和execute subm…

【数据结构】带头+双向+循环链表(DList)(增、删、查、改)详解

一、带头双向循环链表的定义和结构 1、定义 带头双向循环链表&#xff0c;有一个数据域和两个指针域。一个是前驱指针&#xff0c;指向其前一个节点&#xff1b;一个是后继指针&#xff0c;指向其后一个节点。 // 定义双向链表的节点 typedef struct ListNode {LTDataType dat…

开发一个RISC-V上的操作系统(五)—— 协作式多任务

目录 往期文章传送门 一、什么是多任务 二、代码实现 三、测试 往期文章传送门 开发一个RISC-V上的操作系统&#xff08;一&#xff09;—— 环境搭建_riscv开发环境_Patarw_Li的博客-CSDN博客 开发一个RISC-V上的操作系统&#xff08;二&#xff09;—— 系统引导程序&a…

NO4 实验四:生成Web工程

1、说明 使用 mvn archetype&#xff1a;generate 命令生成 Web 工程时&#xff0c;需要使用一个专门的 archetype。这个专门生成 Web 工程骨架的 archetype 可以参照官网看到它的用法&#xff1a; 2、操作 注意&#xff1a;如果在上一个工程的目录下执行 mvn archetype&…

LeetCode208.Implement-Trie-Prefix-Tree<实现 Trie (前缀树)>

题目&#xff1a; 思路&#xff1a; tire树&#xff0c;学过&#xff0c;模板题。一种数据结构与算法的结合吧。 代码是&#xff1a; //codeclass Trie { private:bool isEnd;Trie* next[26]; public:Trie() {isEnd false;memset(next, 0, sizeof(next));}void insert(strin…

第72篇:近年HVV、红队攻防比赛中常见外围打点漏洞的分析与总结

前言 大家好&#xff0c;我是ABC_123。前一段时间我花时间花精力总结了最近两三年中&#xff0c;在攻防比赛中比较常见的Web打点漏洞类型&#xff0c;捎带着把钓鱼邮件的主题类型也总结了一下。今天分享出来&#xff0c;相信无论是对于攻击方还是防守方&#xff0c;都能从中获…

【雕爷学编程】MicroPython动手做(14)——掌控板之OLED屏幕2

知识点&#xff1a;什么是掌控板&#xff1f; 掌控板是一块普及STEAM创客教育、人工智能教育、机器人编程教育的开源智能硬件。它集成ESP-32高性能双核芯片&#xff0c;支持WiFi和蓝牙双模通信&#xff0c;可作为物联网节点&#xff0c;实现物联网应用。同时掌控板上集成了OLED…