RPC和REST对比
RPC和REST对比
参考学习
RPC 和 REST 之间有什么区别?
当我们对比RPC和REST时,其实是在对比RPC风格的API和REST风格的API,后者通常成为RESTful API。
远程过程调用(RPC)和 REST 是 API 设计中的两种架构风格。API 是允许两个软件组件使用一组定义和协议相互通信的机制。
RPC API 允许开发人员在外部服务器中调用远程函数,就好像它们在软件本地一样。例如,您可以通过远程调用其他聊天应用程序上的消息收发函数来向应用程序添加聊天功能。
相比之下,REST API 允许您在远程服务器上执行特定的数据操作。例如,您的应用程序可以使用 REST API 在远程服务器上插入或修改员工数据。
RPC 和 REST 有何相似之处?
远程过程调用(RPC)和 REST 都是设计 API 的方法。API 在现代 Web 设计和其他分布式系统中均不可或缺。它们允许两个独立的分布式应用程序或服务进行通信,而无需知道另一个应用程序或服务的内部工作原理。除了少量的数据交换外,这两个应用程序或服务彼此之间可能几乎没有关系。
API 也是程序后端(逻辑组件)与程序前端(显示组件)通信的常用机制。当您使用 API 而不是紧密耦合的集成来设计网页和 Web 应用程序时,您可以确保它们能够进行扩展而更改,同时只需要更少的代码重写。
接下来,我们将讨论 RPC 与 REST API 之间的其他相似之处。
-
抽象
虽然网络通信是 API 的主要目标,但较低级别的通信本身是从 API 开发人员那里抽象出来的。这使开发人员可以专注于功能而不是技术实施。 -
交流
REST 和 RPC 都使用 HTTP 作为底层协议。RPC 和 REST 中最常用的消息格式是 JSON 和 XML。JSON 因其可读性和灵活性而备受青睐。 -
跨语言兼容性
开发人员可以用他们选择的任何语言实施 RESTful 或 RPC API。只要 API 的网络通信元素符合 RESTful 或 RPC 接口标准,您就可以使用任何编程语言编写其余代码。
架构原则:RPC vs.REST
在远程过程调用(RPC)中,客户端在服务器上进行远程函数(也称为方法或过程)调用。通常,在调用期间会向服务器传递一个或多个数据值。
相比之下,REST 客户端则是请求服务器针对特定服务器资源执行操作。操作仅限于创建、读取、更新和删除(CRUD),并以 HTTP 动词或 HTTP 方法的形式传达。
RPC 侧重于函数或操作,而 REST 则侧重于资源或对象。
RPC 原则
接下来,我们将讨论 RPC 系统通常遵循的一些原则。但这些原则并不像 REST 那样标准化。
-
远程调用
RPC 调用是由客户端对远程服务器上的函数进行的,就像该函数是在本地调用到客户端的一样。 -
传递参数
客户端通常向服务器函数发送参数,与本地函数大致相同。 -
存根
函数存根同时存在于客户端和服务器上。在客户端上,它进行函数调用。在服务器上,它调用实际函数。
REST 原则
REST 原则是标准化的。REST API 必须遵循这些原则才能被归类为 RESTful。
-
客户端-服务器
REST 的客户端-服务器架构将客户端与服务器分离。该架构将客户端和服务器视为独立系统。 -
无状态
服务器不会保留两次客户端请求之间客户端状态的记录。 -
可缓存
客户端或中间系统可能会根据客户端是否指定了可以缓存响应来缓存服务器响应。 -
分层系统
中间系统可以存在于客户端与服务器之间。客户端和服务器都对中间系统一无所知,并像它们直接连接一样运行。 -
统一接口
客户端和服务器通过一组标准化指令和消息收发格式与 REST API 通信。资源由其 URL 标识,此 URL 称为 REST API 端点。
工作原理:RPC vs.REST
在远程过程调用(RPC)中,客户端使用 HTTP POST 按名称调用特定函数。客户端开发人员必须事先知道函数名称和参数,RPC 才能正常工作。
在 REST 中,客户端和服务器使用 GET、POST、PATCH、PUT、DELETE 和 OPTIONS 等 HTTP 动词来执行选项。开发人员只需要知道服务器资源 URL,而不必关心单个函数的名称。
下表显示了客户端用于在 RPC 和 REST 中执行类似操作的代码类型。

主要区别:vs.REST
远程过程调用(RPC)和 REST 都是用于设计相应的客户端和服务器系统接口以通过互联网进行通信的方法。但两者的结构、实施和基本原则各不相同。使用 REST 设计的系统称为 RESTful API,而使用 RPC 设计的系统就是 RPC API。
下面列出了两者的更多区别。
-
开发时间
RPC 是在 1970 年代末和 1980 年代初开发的,而 REST 则是由计算机科学家 Roy Fielding 于 2000 年首次创造的术语。 -
操作格式
由于 HTTP 方法,REST API 拥有一组标准化服务器操作,但 RPC API 没有。某些 RPC 实施为标准化操作提供了框架。 -
数据传递格式
REST 可在同一 API 内传递任何数据格式和多种格式,如 JSON 和 XML。
但对于 RPC API 而言,数据格式由服务器选择,并且在实施过程中是固定的。您可以拥有特定的 JSON RPC 或 XML RPC 实施,但客户端没有灵活性。 -
省/市/自治区
在 API 的上下文中,无状态是指服务器不存储有关客户端先前交互的任何信息的设计原则。每个 API 请求都是独立处理的,服务器不依赖任何已存储的客户端状态来处理请求。
REST 系统必须始终是无状态的,但 RPC 系统可以有状态,也可以无状态,具体取决于设计。
何时使用:RPC 与REST
远程过程调用(RPC)通常用于调用服务器上需要操作结果的远程函数。当您需要进行复杂计算或者想要在服务器上触发远程过程时,可以使用它,并使该进程对客户端隐藏。
下面列出一些操作,对于这些操作而言,RPC 是不错的选择:
- 使用远程设备的摄像头拍照
- 在服务器上使用机器学习算法识别欺诈行为
- 在远程银行系统上将资金从一个账户转到另一个账户
- 远程重启服务器
REST API 通常用于针对服务器上的数据对象执行创建、读取、更新和删除(CRUD)操作。这使得 REST API 非常适用于需要统一公开服务器数据和数据结构的情况。
下面列出一些操作,对于这些操作而言,REST API 是一个理想选择:
- 将产品添加到数据库
- 检索音乐播放列表的内容
- 更新某人的地址
- 删除博客文章
为什么 REST 取代了 RPC?
虽然 REST Web API 已经成为当今的标准,但远程过程调用(RPC)并未消失。REST API 通常用于应用程序,因为它更易于开发人员理解和实施。但 RPC 仍然存在,并在更适合的应用场景中使用。
RPC 的现代实施(如 gRPC)现在更受欢迎。在某些应用场景下,gRPC 的性能优于 RPC 和 REST。它允许客户端-服务器间的流式通信,而非请求和响应数据交换模式。
差异摘要:RPC vs.REST

相关文章:
RPC和REST对比
RPC和REST对比 参考学习 RPC 和 REST 之间有什么区别? 当我们对比RPC和REST时,其实是在对比RPC风格的API和REST风格的API,后者通常成为RESTful API。 远程过程调用(RPC)和 REST 是 API 设计中的两种架构风格。API …...
外包干了2年,技术退步明显。。。
前言 简单的说下,我大学的一个同学,毕业后我自己去了自研的公司,他去了外包,快两年了我薪资、技术各个方面都有了很大的提升,他在外包干的这两年人都要废了,技术没一点提升,学不到任何东西&…...
深度学习——第1章 深度学习的概念及神经网络的工作原理
1.1 序言——探索智能机器 千百年来,人类试图了解智能的机制,并将它复制到思维机器上。 人类从不满足于让机械或电子设备帮助做一些简单的任务,例如使用滑轮吊起沉重的岩石,使用计算器做算术。 人类希望计算机能够自动化执行更…...
爬虫爬取百度图片、搜狗图片
通过以下代码可以爬取两大图片网站(百度和搜狗)的图片,对于人工智能、深度学习中图片数据的搜集很有帮助! 一、爬取百度图片 该代码可以爬取任意百度图片中自定义的图片: import requests import re import time imp…...
Android Camera2使用
一 简介 1.1 Camera API: 这是旧版本的相机API,也称为Camera1 API。它提供了较简单的使用方式,适用于旧版Android设备。但它存在一些限制,如性能不佳、操作复杂等 1.2 Camera2 API: 这是新版本的相机API࿰…...
IOS/安卓+charles实现抓包(主要解决证书网站无法打开问题)
安装 官网下载 https://www.charlesproxy.com/latest-release/download.do 安装charles文档 流程 上述链接解决下图问题 使用介绍 Charles介绍 上述链接看一至三即可,了解首页各个按钮的作用 charles全面使用教程及常见功能详解(较详细)…...
七、Lua字符串
文章目录 一、字符串(一)单引号间的一串字符(二)local str "Hello, "(三)[[ 与 ]] 间的一串字符(四)例子 二、字符串长度计算(一)string.len&…...
0基础学java-day13
一、包装类 1. 包装类的分类 1) 针对八种基本数据类型相应的引用类型【对象】—包装类 2) 有了类的特点,就可以调用类中的方法。 3) 如图: 2 包装类和基本数据的转换 3 案例演示 Integer01.java package com.hspedu.wrapper;/*** author 林然* version 1.0*/ p…...
好题记录:
好题记录: 1:2:3:三级目录 1: 下面代码的结果是:( ) 下面代码的结果是:( )#include <stdio.h> int main() {int arr[] {1,2,3,4,5};short *p (short*)arr;int i …...
web前端之JavaScrip中的闭包
MENU 闭包--笔试-11defineReactive函数,利用闭包封装Object.defineProperty()闭包--节流函数--笔试-10闭包的定义JavaScript闭包的9大经典使用场景 闭包–笔试-11 function fun() { var n 9; // js 中强行给一个未声明的变量赋值,// 程序不会报错// 并…...
Windows下命令行启动与关闭WebLogic的相关服务
WebLogic 的服务器类型 WebLogic提供了三种类型的服务器: 管理服务器节点服务器托管服务器 示例和关系如下图: 对应三类服务器, 就有三种启动和关闭的方式。本篇介绍使用命令行脚本的方式启动和关闭这三种类型的服务器。 关于WebLogic 的…...
LeetCode Hot100 169.多数元素
题目: 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 方法一:哈希表 class Solution {public int…...
数据结构:堆的实现思路
我们之前写过堆的实现代码:数据结构:堆的实现-CSDN博客 这篇文章我们了解一下堆到底是如何实现的 1.堆向下调整算法 现在我们给出一个数组,逻辑上看做一颗完全二叉树。我们通过从根节点开始的向下调整算法可以把它调整成一个小堆 向下调…...
结合 DBSCAN 示例代码介绍 DBSCAN
前文为JoyT的科研之旅第一周——科研工具学习及论文阅读收获-CSDN博客 DBSCAN 介绍 DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,它能够识别出任意形状的簇,并有效地处理噪声…...
vscode 调试jlink
文章目录 软件使用说明1、启动GDB Server2、下载gdb3、vscode配置4、调试 软件 vscodejlink - (JLinkGDBServer.exe)gcc-arm-none-eabi-10-2020-q4-major (arm-none-eabi-gdb.exe) 使用说明 vscode通过TCP端口调用JLinkGDBServer通过jlink连接和操作设备,vscode不…...
微前端实战:打造高效、灵活的前端应用架构
文章目录 一、微前端简介二、微前端的优势1. 高度模块化2. 独立部署3. 易于扩展4. 技术栈无关5. 独立升级 三、微前端的原理四、微前端案例思路《微前端实战》编辑推荐内容简介作者简介目录前言/序言 随着互联网行业的快速发展,前端应用的规模和复杂度也在不断增加。…...
csv文件EXCEL默认打开乱码问题
这里讨论的问题是,当用记事本打开带有中文字符的csv正常时,用excel打开却是乱码。 简单概括就是:编码问题,windows的 excel打开csv文本文件时,默认使用的是系统内的ANSI,在中文环境下就是GB2312。如果写文件…...
C语言之实现贪吃蛇小游戏篇(2)
目录 🎇测试游戏test.c 🎇游戏头文件包含&函数声明snake.h 🎇游戏实现snake.c 🎇测试游戏test.c #define _CRT_SECURE_NO_WARNINGS 1 #include "snake.h" void test() {int ch 0;do{Snake snake { 0 };//创建…...
Comparator接口
Comparator接口 Comparator 是 Java 中用于比较对象的接口。它允许开发者实现自定义的比较逻辑,以用于对对象进行排序或者确定它们的顺序。 主要方法: Comparator 接口中包含一个抽象方法: int compare(T o1, T o2):用于比较两…...
SELinux refpolicy详解(9)
接前一篇文章:SELinux refpolicy详解(8) 三、refpolicy内容详解 上一回讲解了refpolicy源码根目录下的build.conf文件的前一部分内容。本回继续讲解其后一部分。 2. build.conf 文件路径:refpolicy源码根目录/build.conf。 文…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?
论文网址:pdf 英文是纯手打的!论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误,若有发现欢迎评论指正!文章偏向于笔记,谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...
