当前位置: 首页 > 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。 文…...

如何5分钟从IntelliJ IDEA无缝切换到VSCode:终极快捷键迁移指南

如何5分钟从IntelliJ IDEA无缝切换到VSCode&#xff1a;终极快捷键迁移指南 【免费下载链接】vscode-intellij-idea-keybindings Port of IntelliJ IDEA key bindings for VS Code. 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-intellij-idea-keybindings 你是…...

突破平台限制:res-downloader高效捕获网络资源的全方位解决方案

突破平台限制&#xff1a;res-downloader高效捕获网络资源的全方位解决方案 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 在…...

量化文明:贾子理论(Kucius Theory)CVC/WVC方程揭示可持续性密码

量化文明&#xff1a;贾子理论&#xff08;Kucius Theory&#xff09;CVC/WVC方程揭示可持续性密码摘要&#xff1a;贾子理论通过文明方程&#xff08;CVC/WVC&#xff09;构建数理模型&#xff0c;量化文明价值与智慧资本。核心公式以意义、能量、时间积分定义CVC&#xff0c;…...

从“单点防御”到“全局联动”:手把手教你用EDR和NDR构建企业安全闭环

从“单点防御”到“全局联动”&#xff1a;手把手教你用EDR和NDR构建企业安全闭环 当企业的安全团队还在疲于应对零散的端点告警和网络流量异常时&#xff0c;攻击者早已开始采用自动化工具进行横向移动。传统孤立的防御手段就像用多个单点摄像头监控银行金库——每个摄像头都…...

探索光的世界:Ray Optics Simulation 几何光学仿真平台深度解析

探索光的世界&#xff1a;Ray Optics Simulation 几何光学仿真平台深度解析 【免费下载链接】ray-optics A web app for creating and simulating 2D geometric optical scenes, with a gallery of (interactive) demos. 项目地址: https://gitcode.com/gh_mirrors/ra/ray-op…...

零基础玩转像素心智:手把手教你用情绪解码器分析用户评论

零基础玩转像素心智&#xff1a;手把手教你用情绪解码器分析用户评论 1. 认识像素心智情绪解码器 1.1 什么是情绪解码器 像素心智情绪解码器(Pixel Mind Decoder)是一款基于M2LOrder核心引擎构建的AI情绪识别工具。它将复杂的自然语言处理技术封装在一个充满复古游戏风格的1…...

当前主流的AI编程助手Trae、Cursor、通义灵码功能对比分析

Trae、Cursor和通义灵码是当前主流的AI编程助手&#xff0c;它们在功能定位、技术架构和使用体验上各有特色。以下是三款工具的详细对比分析&#xff1a; Trae详细操作手册和常见问题解决&#xff0c;请访问http://www.zrscsoft.com/sitepic/12166.html 一、核心功能对比 功能…...

rk3576 点亮 LCD(mipi)

rk3576 适配 mipi 屏 瑞芯微 RK3576 是一款面向中高端 AIoT 市场的 SoC,其 MIPI DSI (Display Serial Interface) 接口在性能和灵活性上相比前代(如 RK3399/RK3568)有显著提升,特别是在物理层协议的支持上更加现代化。相比RK3399 RK3568的mipi 接口少了 8lane,但是RK3576…...

Mid-70激光雷达与相机无目标标定:从环境搭建到实战避坑

1. 为什么选择Ubuntu 16.04进行Mid-70标定 最近在给Livox Mid-70激光雷达做相机标定时&#xff0c;我踩了个大坑——在Ubuntu 22.04上折腾了整整两天都没搞定环境配置。后来才发现问题出在版本兼容性上&#xff1a;ROS Kinetic、Ceres 1.14.x和Eigen 3.2.92这几个关键组件在新系…...

Phi-4-reasoning-vision-15B多场景落地:OCR/图表分析/GUI理解三类任务统一部署

Phi-4-reasoning-vision-15B多场景落地&#xff1a;OCR/图表分析/GUI理解三类任务统一部署 1. 模型介绍 Phi-4-reasoning-vision-15B是微软推出的视觉多模态推理模型&#xff0c;能够处理多种视觉理解任务。这个模型特别擅长从图像中提取和理解信息&#xff0c;无论是文档文字…...