浅谈RPC,gRPC和RESTful

news2024/11/24 10:42:10

RPC

远程过程调用(Remote Procedure Call,RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一个地址空间(通常为一个开放网络的一台计算机)的子程序,而程序员就像调用本地程序一样,无需额外地为这个交互作用编程(无需关注细节)。基于该协议实现的RPC框架,如dubbo,springcloud,grpc等。

gRPC

gRPC(Google Remote Procedure Call)是现在最流行的二进制 RPC 框架之一。

  • 该技术遵循一个使用 HTTP 2.0 协议的 RPC API 实现,但 HTTP 不会呈现给 API 开发人员或服务器。因此,开发人员无需担心 RPC 概念如何映射到 HTTP,从而降低了复杂性。
  • grpc序列化方式采用protobuf,protobuf比json和xml要好很多,缺点就是没有json好阅读。protobuf是Google设计的一种序列化方案,他可以将 对象转换为字节流,这个过程就成为序列化;反之,也能将字节流再转换位对象,这个过程叫反序列化。

四种调用方式:

  • 单向RPC
  • 服务端流式RPC
  • 客户端流式RPC
  • 双向流RPC

RESTful

符合REST设计风格的Web API称为RESTful API:

  • 资源是由URI来指定。
  • 对资源的操作包括获取、创建、修改和删除,这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。
  • 依赖于JSON来收发数据

gRPC vs Restful

那么可以从RPC风格的url和Restful风格的url上进行比较。

比如你提供一个查询订单的接口,用RPC风格,你可能会这样写:

/queryOrder?orderId=123

用Restful风格:

Get  
/order/123

gRPC是面向过程,Restful是面向资源,并且使用了Http动词。从这个维度上看,Restful风格的url在表述的精简性、可读性上都要更好。

在这里插入图片描述

参考文档:gRPC使用,官方文档

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

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

相关文章

UniFi USW-Flex 室内-室外 POE 交换机

选择理由 选择理由是是因为要户外使用,对比下户外可以使用的 POE 交换机并不是很多。 UniFi USW-Flex 室内-室外 5 端口 PoE 千兆交换机能够支持在户外和户内使用。 户外使用需要具有基本的防水性能,尤其是冬天比较寒冷的时候也需要具备一定的环境耐受…

SpringBoot接收请求参数的方式

【方式一】原始方式 因为SpringBoot封装了Servlet,所以也允许使用HttpServletRequest类中的方法来获取 /*** 【方式一】原始方式*/RequestMapping("/demo01")public String demo01(HttpServletRequest request) {// 参数名要与页面提交的参数名一致Strin…

【十二】设计模式~~~行为型模式~~~命令模式(Java)

命令模式-Command Pattern【学习难度:★★★☆☆,使用频率:★★★★☆】 1.1. 模式动机 在软件设计中,我们经常需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是哪个&#xf…

是德Keysight N9000A(agilent)N9000B CXA信号分析仪

Keysight N9000A (Agilent) CXA 信号分析仪是一款多功能、低成本的工具,可用于基本信号表征。它可以帮助您在多个层面上加速产品测试和开发;降低成本、吞吐量、设计增强等。通过 CXA 中的 X 系列可扩展性获得基本功能 -并期待更多。 我们无法预测未来&a…

Midjourney绘制插画,绘画重来没有如此之简单 - 第12篇

历史文章(文章累计460) 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 用…

【Mininet】基础篇:Mininet创建简单网络拓扑及简单网络拓扑脚本编写

大家好,我是文思月! 每文一言:不要假装努力,结果不会陪你演戏! 本篇文章: 使用Mininet创建简单的网络拓扑,并创建网络拓扑脚本。 正文如下: 1. 最小网络拓朴 创建最小的网络拓扑…

c++多态及其多态的原理

目录 多态的定义及实现多态的条件 多态的原理虚函数表动态绑定和静态绑定总结多态原理 单继承和多继承下的虚函数表单继承下的虚函数表(有虚函数覆盖)多继承下的虚函数表(有虚函数覆盖)为什么子类对象赋值给父类对象,也…

耕耘不缀、丰收如期,中药入血组又双叒叕升级了

春去夏来,小满已至,麦浪序曲逐渐拉响,百趣人在中药领域的勤耕不辍也迎来了本年度的第一次丰收。中药入血组作为中药临床应用重磅产品,此次升级可谓“一优化,两提升,三新增”。“一优化”为分析图例优化&…

Python之pyecharts的常见用法1-水球图

Pyecharts是一个基于Echarts的Python可视化库,可以用Python语言轻松地生成各种交互式图表和地图。它支持多种图表类型,包括折线图、柱状图、散点图、饼图、地图等,并且可以通过简单的API调用实现数据可视化。 Pyecharts的优点包括&#xff1a…

Spring Cloud Alibaba 整合Seata 之概念介绍及Seata-server搭建

目录 前言 基础介绍 官方文档 模式分类 角色介绍 Seata Server 部署 - docker-compose 数据库 服务器 docker-compose.yaml nacos配置 启动 前言 Seata 是 阿里巴巴 开源的 分布式事务中间件,以 高效 并且对业务 0 侵入 的方式,解决 微服务…

过零投切开关的安科瑞低压电力电容器设计

安科瑞 徐浩竣 江苏安科瑞电器制造有限公司 zx acrelxhj 摘要:目前,我们经常使用的电容器投切开关在实际的运行过程中还存在着很多问题,新型的过零投切开关主要利用微电子技术,同时企业对电路的结构等开展了进一步的优化与调整…

真的有必要定义VO,BO,PO,DO,DTO吗?

今天给大家带来一篇关于VO,BO,PO,DO,DTO的文章,阅读完这篇文章之后,希望大家对VO,BO,PO,DO,DTO有自己的见解。 1. 概念 在讲具体的概念之前,我们…

I.MX6ULL_Linux_驱动篇(35) linux并发与竞争

Linux是一个多任务操作系统,存在多个任务共同操作同一段内存或者设备的情况,多个任务或者中断都能访问的资源叫做共享资源,就和共享单车一样。在驱动开发中要注意对共享资源的保护,也就是要处理对共享资源的并发访问。比如共享单车…

Mybatis插件MyBatisCodeHelperPro使用

目录 MyBatisCodeHelperPro的安装(IDEA插件的两种安装方式) 通过IDEA连接MySQL数据库,方便后续的数据库操作 MyBatisCodeHelperPro的使用 1、新建项目工程测试 2、在pom文件中引入依赖(后面测试需要用到) 3、编写…

使用docker部署 java web项目完整记录

概述:基于java及vue开发的前后端web应用, 整套系统由 一个后端服务一个管理端前端vue一个用户端前端vue项目组, 涉及的中间件及第三方应用有 mysql、redis、nginx, 采用docker方式部署整套系统 一、docker 安装 1、参考文档&…

jira中issue状态的改变触发jenkins job构建

背景:想通过监控jira中 issue状态的变化去触发jenkins job的构建 在jenkins中安装插件:JIRA Trigger plugin. 下载地址:https://plugins.jenkins.io/jira-trigger/ 在Jenkins-> Manage Jenkins -> Configure System -> JIRA Trigg…

UnityVR--EventManager--事件中心2

目录 前言 事件中心的结构 EventManager事件管理器 EventType事件类型 EventListener监听及回调 EventDataBase回调时需要传递的参数 总结 前言 上一篇(事件中心1)中,简单解释了委托、事件、监听者,是用于管理项目运行过程…

深度学习进阶篇[9]:对抗生成网络GANs综述、代表变体模型、训练策略、GAN在计算机视觉应用和常见数据集介绍,以及前沿问题解决

【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍:【深度学习入门到进阶】必看系列,含激活函数、优化策略、损失函数、模型调优、归一化…

多线程-*同步代码块*解决两种线程创建方式的线程安全问题

线程安全问题及解决 当我们使用多个线程访问同一资源(可以是同一个变量、同一个文件、同一条记录等)的时候,若多个线程只有读操作,那么不会发生线程安全问题。但是多个线程中对资源有读和写的操作。就容易出现线程安全问题。 举…

PyTorch 深度学习 || 专题三:PyTorch 数据的准备

PyTorch 数据的准备 1. 生成数据的准备工作 import torch import torch.utils.data as Data#准备建模数据 x torch.unsqueeze(torch.linspace(-1, 1, 500), dim1) # 生成列向量 y x.pow(3) # yx^3#设置超参数 batch_size 15 # 分块大小 torch.manual_seed(10) # 设置种子点…