当前位置: 首页 > news >正文

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&#xff0…...

IOS/安卓+charles实现抓包(主要解决证书网站无法打开问题)

安装 官网下载 https://www.charlesproxy.com/latest-release/download.do 安装charles文档 流程 上述链接解决下图问题 使用介绍 Charles介绍 上述链接看一至三即可,了解首页各个按钮的作用 charles全面使用教程及常见功能详解(较详细&#xff09…...

七、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…...

好题记录:

好题记录&#xff1a; 1:2:3&#xff1a;三级目录 1: 下面代码的结果是&#xff1a;&#xff08; &#xff09; 下面代码的结果是&#xff1a;&#xff08; &#xff09;#include <stdio.h> int main() {int arr[] {1,2,3,4,5};short *p (short*)arr;int i …...

web前端之JavaScrip中的闭包

MENU 闭包--笔试-11defineReactive函数&#xff0c;利用闭包封装Object.defineProperty()闭包--节流函数--笔试-10闭包的定义JavaScript闭包的9大经典使用场景 闭包–笔试-11 function fun() { var n 9; // js 中强行给一个未声明的变量赋值&#xff0c;// 程序不会报错// 并…...

Windows下命令行启动与关闭WebLogic的相关服务

WebLogic 的服务器类型 WebLogic提供了三种类型的服务器&#xff1a; 管理服务器节点服务器托管服务器 示例和关系如下图&#xff1a; 对应三类服务器&#xff0c; 就有三种启动和关闭的方式。本篇介绍使用命令行脚本的方式启动和关闭这三种类型的服务器。 关于WebLogic 的…...

LeetCode Hot100 169.多数元素

题目&#xff1a; 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 方法一&#xff1a;哈希表 ​ class Solution {public int…...

数据结构:堆的实现思路

我们之前写过堆的实现代码&#xff1a;数据结构&#xff1a;堆的实现-CSDN博客 这篇文章我们了解一下堆到底是如何实现的 1.堆向下调整算法 现在我们给出一个数组&#xff0c;逻辑上看做一颗完全二叉树。我们通过从根节点开始的向下调整算法可以把它调整成一个小堆 向下调…...

结合 DBSCAN 示例代码介绍 DBSCAN

前文为JoyT的科研之旅第一周——科研工具学习及论文阅读收获-CSDN博客 DBSCAN 介绍 DBSCAN&#xff08;Density-Based Spatial Clustering of Applications with Noise&#xff09;是一种基于密度的聚类算法&#xff0c;它能够识别出任意形状的簇&#xff0c;并有效地处理噪声…...

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连接和操作设备&#xff0c;vscode不…...

微前端实战:打造高效、灵活的前端应用架构

文章目录 一、微前端简介二、微前端的优势1. 高度模块化2. 独立部署3. 易于扩展4. 技术栈无关5. 独立升级 三、微前端的原理四、微前端案例思路《微前端实战》编辑推荐内容简介作者简介目录前言/序言 随着互联网行业的快速发展&#xff0c;前端应用的规模和复杂度也在不断增加。…...

csv文件EXCEL默认打开乱码问题

这里讨论的问题是&#xff0c;当用记事本打开带有中文字符的csv正常时&#xff0c;用excel打开却是乱码。 简单概括就是&#xff1a;编码问题&#xff0c;windows的 excel打开csv文本文件时&#xff0c;默认使用的是系统内的ANSI&#xff0c;在中文环境下就是GB2312。如果写文件…...

C语言之实现贪吃蛇小游戏篇(2)

目录 &#x1f387;测试游戏test.c &#x1f387;游戏头文件包含&函数声明snake.h &#x1f387;游戏实现snake.c &#x1f387;测试游戏test.c #define _CRT_SECURE_NO_WARNINGS 1 #include "snake.h" void test() {int ch 0;do{Snake snake { 0 };//创建…...

Comparator接口

Comparator接口 Comparator 是 Java 中用于比较对象的接口。它允许开发者实现自定义的比较逻辑&#xff0c;以用于对对象进行排序或者确定它们的顺序。 主要方法&#xff1a; Comparator 接口中包含一个抽象方法&#xff1a; int compare(T o1, T o2)&#xff1a;用于比较两…...

SELinux refpolicy详解(9)

接前一篇文章&#xff1a;SELinux refpolicy详解&#xff08;8&#xff09; 三、refpolicy内容详解 上一回讲解了refpolicy源码根目录下的build.conf文件的前一部分内容。本回继续讲解其后一部分。 2. build.conf 文件路径&#xff1a;refpolicy源码根目录/build.conf。 文…...

零基础上手,秒识别检测,IDEA研究院发布全新T-Rex模型

目标检测作为当前计算机视觉落地的热点技术之一&#xff0c;已被广泛应用于自动驾驶、智慧园区、工业检测和卫星遥感等场景。开发者在研究相关目标检测技术时&#xff0c;通常需熟练掌握图像目标检测框架&#xff0c;如通用目标检测框架 YOLO 系列&#xff0c;旋转目标检测框架…...

python每日一题——20旋转图像

题目 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]]…...

云计算生成式 -给你不一样的音乐推荐新体验

目录 摘要&#xff1a; 正文&#xff1a; 一、亚马逊云与生成式 AI 结合的展望/总结 二、我用亚马逊云科技生成式 AI 产品打造了什么&#xff0c;解决了什么问题 三、未来云端技术发展趋势的见解 四、云端技术未来需要解决的问题 1、如何保护数据安全和隐私&#xff1f; …...

Zabbix 6.0部署+自定义监控项+自动发现与自动注册+部署zabbix代理服务器

Zabbix 6.0 Zabbix 6.0一、关于zabbix1、什么是zabbix2、zabbix工作原理3、zabbix 6.0 特性4、zabbix 6.0 功能组件 二、Zabbix 6.0 部署1、 部署 zabbix 服务端(1) 部署 Nginx PHP 环境并测试(2) 部署数据库(3) 编译安装 zabbix server 服务端(4) 部署 Web 前端&#xff0c;进…...

Docker 简介及其常用命令详解

Docker 简介及其常用命令详解 Docker 自推出以来&#xff0c;已成为开发和运维领域的重要工具。它简化了应用的部署、测试和分发过程&#xff0c;使得容器化技术成为现代软件开发的标准实践。本文将为您提供Docker的基础介绍以及其常用命令的详细讲解。 什么是Docker&#xf…...

基于PHP的高中生物学习平台

有需要请加文章底部Q哦 可远程调试 基于PHP的高中生物学习平台 一 介绍 此高中生物学习平台基于原生PHP开发&#xff0c;数据库mysql。系统角色分为用户和管理员。(附带参考设计文档) 技术栈&#xff1a;phpmysqlphpstudyvscode 二 功能 学生 1 注册/登录/注销 2 个人中心 …...

Git多库多账号本地SSH连接配置方法

Git多库多账号本地SSH连接配置方法 一、前言二、环境三、帮助文档四、多环境配置4.1 配置config文件 五、生成RSA秘钥对5.1 ssh秘钥位置5.2 生成秘钥对&#xff08;公钥、私钥&#xff09;5.3 添加公钥到GIT用户配置中 六 测试git是否可以使用七、总结 一、前言 在使用Git管理…...

爬虫学习-基础(HTTP原理)

目录 一、URL和URI 二、HTTP和HTTPS &#xff08;1&#xff09;HTTP &#xff08;2&#xff09;HTTPS &#xff08;3&#xff09;HTTP与HTTPS区别 &#xff08;4&#xff09;HTTPS对HTTP的改进&#xff1a;双问的身份认证 三、TCP协议 &#xff08;1&#xff09;TCP三次握手…...

Gazebo 中为地面和车轮添加摩擦属性

Gazebo 中为地面和车轮添加摩擦属性 Link friction properties not applied from URDF to Gazebo SDFormat Specification Adding friction to model wheels Gazebo中模型自行滑动&#xff08;后溜&#xff09;的原因探究 移动机器人在仿真时&#xff0c;一旦以较大的速度启动&…...

【重点】【滑动窗口】3. 无重复字符的最长子串

题目 参考《算法小抄》重的解法&#xff0c;重点理解&#xff01;&#xff01;&#xff01; class Solution {public int lengthOfLongestSubstring(String s) {if (s.length() < 2) {return s.length();}char[] array s.toCharArray();int left 0, right 0, res 0;int…...