首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

RPC伪装成REST是个坏主意吗?

RPC伪装成REST是个坏主意吗?

这个问题涉及到了软件开发中的通信协议和设计原则。REST(Representational State Transfer)是一种流行的网络应用程序的设计风格和开发方式,它主张使用HTTP协议和URI来定位资源,并通过HTTP方法(如GET、POST、PUT、DELETE等)来操作资源。而RPC(Remote Procedure Call)是一种远程过程调用的方式,它允许一个程序调用另一个程序中的函数或方法,并获取返回值。

将RPC伪装成REST并不是一个好的主意,原因如下:

  1. 违反了REST的设计原则:REST强调资源的无状态性和可缓存性,而RPC通常需要维护状态和会话信息。将RPC伪装成REST可能会导致程序设计上的混乱和不一致。
  2. 可读性和可维护性差:REST的设计原则和规范明确,易于理解和实现。而将RPC伪装成REST会降低代码的可读性和可维护性,增加后期维护的难度。
  3. 性能和效率低:REST通常使用HTTP协议进行通信,而HTTP协议是基于文本的,这会导致额外的开销和性能损失。而RPC通常使用二进制协议进行通信,可以提高通信效率和性能。

因此,将RPC伪装成REST并不是一个好的主意。如果需要在软件开发中实现远程过程调用,建议使用专门的RPC框架或库,如gRPC等。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

RPCREST还有RESTFul到底什么玩意?

wiki百科:在分布式计算,远程过程调用(英语:Remote Procedure Call,缩写为 RPC计算机通信协议。...RPC一种服务器-客户端(Client/Server)模式,经典实现是一通过发送请求-接受回应进行信息交互的系统。...符合REST设计风格的Web API称为RESTful API: 资源由URI来指定: 如我们在查询一用户的信息的时候直接将用户的ID拼接在URI上如: https://zh.qq.org/id/...请求达到服务器且有返回,还是在前面这个确定的情况下业务逻辑也正常返回了?在rest规范好像是也没有明确定义,这个成功到底怎么一成功呢?...RPCrest 的区别是?? 简单对比 RPC 和 Restful API 面对对象不同: RPC 更侧重于动作。 REST 的主体资源。

4.1K20

为什么多线程坏主意

每一程序员都需要成为 一多线程编程的高手?...替代性的方案: 使用事件驱动的编程方法 特别声明: 对于大部分的多线程程序,使用事件驱动更好的选择 只有当使用CPU多核的时候, 才需要使用多线程编程 2 多线程的本质 ?...9 事件驱动编程被用来干什么 大多数的GUIs编程: 一处理器对应一事件 处理器用来执行行为(撤销,删除文件等) 分布式系统 一处理器用来对应一输入源 处理进来的请求,返回结果 事件驱动的I/O...可以长时间的运行处理程序而不需要冻结 13 你需要放弃多线程?...14 总结 并发从根本上很难的, 尽可能的避免 多线程比事件更加强大,但是这种强大的功能很少真正需要 多线程编程比事件编程更加难以写出正确的代码, 只有真正的专家才能掌握 将事件 编程当做基本的开发工具

1K20
  • 你真的知道你喜欢REST而不是RPC的原因

    是因为RPC的请求风格天生邪恶? 还是REST就是灵丹妙药? 两种请求风格长分别长什么样子 在比较这两种请求风格之前,让我们看看他们究竟长什么样子。...在这篇文章中,当我谈论RPC我们一般都指的是:你的GET或POST方法什么操作。 使用这种类型的RPC,您可以通过HTTP作为传输协议来操作数据。...RPCREST大决战 既然大家都在一劲的争论到底谁好,或者REST就是好,RPC就是不好,等等。为了能把问题说清楚,我们试图寻找一些比较指标,然后对二者进行一全方位的对比,看最后谁胜出?...但某些情况下,设计一REST API似乎比RPC更难一点,因为它给你定了一框框,让你实现一致的API,让你必需依赖于资源,而不是操作。 这两都需要去处理命名的一致性。...可预测性和语义 使用RPC,语义大部分时候依赖在端点上的,并且没有对其含义的全局共享理解,什么意思呢?就是没有一规范和约定。

    1.2K60

    REST?RPC?时候改变你对微服务的认知了!

    比如,REST等。这种方式自然的。我们只需要调用另外一模块就是了,然后等待响应返回,然后继续。这样的方式确实也满足了我们的很多的场景:用户通过点击页面的一按钮然后希望发生一些事情。...查询请求,查找一些东西的请求(request)。重要的,查询不会使得系统状态发生改变。 ps:这里注意 请求 事件 的区别。命令和查询都属于请求驱动。...独立上下文,一般指有那么一组service,它们共享同一发布流水线或者同一领域模型【domain model】)。...如果你认为REST就是微服务构建的主要交互方式的话,那么也许你错了;如果你认为rpc就是构建微服务的的主要交互方式的话,那么也许你又错了。...如果以后有人和讨论起微服务的模式的时候,你可以说RESTrpc(请求驱动)以及事件驱动共同混合使用才会构建出更好的微服务来!

    748140

    Java并行流陷阱:为什么指定线程池可能坏主意

    Java并行流陷阱:为什么指定线程池可能坏主意Java Stream 并不支持指定线程池,实际编码中,有些开发者可能会使用一些“技巧”来指定线程池。...使用公用池的好处可以避免创建过多无用的线程,特别是对于CPU密集型任务,新增线程反而会增加上下文开销。流式编程可能函数式编程最被大众接受的一种编程方式。...理论上,流的处理过程中,所有的方法都应该是纯函数,遵循引用透明原则,内部可以对具体执行流程进行优化,其不为 IO 密集型任务理所应当的。...但是,这个 trick 不可靠的。...以下使用CompletableFuture 的 trick 实现,基本思路一样的:java 代码解读复制代码ForkJoinPool forkJoinPool = new ForkJoinPool(

    1810

    腾讯,开源了,高性能 RPC 框架,要干DUBBO

    Tars基于名字服务使用Tars协议的高性能RPC开发框架,同时配套一体化的服务治理平台,帮助个人或者企业快速的以微服务的方式构建自己稳定可靠的分布式应用。...拥有着类似设计理念的Tars也是一兼顾易用性、高性能、服务治理的框架,目的让开发更简单,聚焦业务逻辑,让运营更高效,一切尽在掌握。...服务节点: 服务节点可以认为服务所实际运行的一具体的操作系统实例,可以是物理主机或者虚拟主机、云主机。随着服务的种类扩展和规模扩大,服务节点可能成千上万甚至数以十万计。...Set配置具体一Set分组下所有服务的公共配置,在应用配置的基础上进行补充追加。 服务配置具体一服务下所有节点的公共配置,可以引用应用配置。...节点配置应用节点的个性化配置,它和服务配置合并成为具体一服务节点的配置。 项目地址 开源地址: https://gitee.com/TarsCloud/Tars

    1.9K20

    RPC 通信协议 ?→ 我们来看下它的演进过程

    看着你们这一身腱子肉,我哪敢骗你们;只要你们把下面的看完,骗没骗你们,你们自己说了算 RPC 的演进过程   先说明一下,下文中的示例虽然 Java 代码实现的,但原理通用的,重点理解其中的原理...迭代开发逐步完善的过程,而这也算是一改进哦     但这一版还是有很多缺点,最明显的一就是 Stub 只能代理 IUserService 的一方法 getUserById ,局限性太大,不够通用...这些协议孰好孰坏,本文不做过多阐述,这里提出来只是想告诉大家:序列化与反序列化协议 RPC 中的重要一环 总结   1、RPC 的演进过程 ?   ...3、RPC 框架     RPC 不等同于 RPC 框架,RPC 概念,分布式通信方式     基于 RPC 产生了很多 RPC 框架:Dubbo、Netty、gRPC、BRPC、Thrift...、JSON-RPC 等等     RPC 框架对 RPC 进行了功能丰富,包括:服务注册、服务发现、服务治理、服务监控、服务负载均衡等功能   现在回到标题:RPC 通信协议 ?

    77310

    时间管理伪命题

    时间难以管理的 ? 以一简单点例子来说明: 我今天定了一目标,打算花半天时间学习一下 vue.js,做一基础的 mvc 案例出来。...那么假设我有4小时进行学习,于是我会列出下面的一计划详单: 第一小时,阅读官方文档,有一大致理念上的了解; 第二小时,阅读别人的博客案例,了解真实用法怎么做的; 第三小时,设计我的案例,完成简单的界面框架...文档债务也很常见,许多开发的不喜欢写文档,其实是懒,那么到后来, 会不断的有人来问你,A怎么回事,B又是怎么来的.. 烦不胜烦。这些都在你的计划内? 一句话,出来混的,始终还是要还的! C....或者,让自己上下班临界时间处理邮件,办法。 D. 座位上的叨扰 总有些人,会特别喜欢面对面沟通,觉得这样效率最高的。没错,"你“的效率的确是提高了,但别人呢?...后记 你重度拖延症患者,还是一自我管理强人?对于时间管理,你怎么看呢,欢迎留言讨论 ?

    57420

    大型项目 python 烂语言

    我想你若写过django 的应该清楚自己公司的一项目中注册了 n 多个 app 用于支持不同的业务需求,你是否想过当开发人员超过5,app 数量达到10以上(当然这里的数字我少说了,大些公司一起开发一大项目的最少...我见过一 django 项目 文件大小100多M, 你可自己脑补一下项目有多大,还没完,这才是一django项目,当公司内部还有django项目 且内部通过 rpc 进行调度的时候,这时候各个app...之间的关系就是一网状的结构,这个时候其项目的复杂度上了一指数级别的。...好的,通过上述介绍我也简短回复一下我们标题提出的这个问题,python烂语言对于做大项目?...我的回答是否定的,一门语言是否好语言在于使用语言的人本身,不在于语言本身,就像大家调侃那个语言世界上最好的语言一道理。本期我们就先介绍到这里,后期会带着大家从代码和原理的层面去讲解这个解决方案。

    1.4K50

    Hibernate中SessionFactory线程安全的?Session线程安全的(两线程能够共享同一Session)?

    SessionFactory对应Hibernate的一数据存储的概念,它是线程安全的,可以被多个线程并发访问。SessionFactory一般只会在启动的时候构建。...Session轻量级非线程安全的对象(线程间不能共享session),它表示与数据库进行交互的一工作单元。Session由SessionFactory创建的,在任务完成之后它会被关闭。...Session持久层服务对外提供的主要接口。Session会延迟获取数据库连接(也就是在需要的时候才会获取)。...为了避免创建太多的session,可以使用ThreadLocal将session和当前线程绑定在一起,这样可以让同一线程获得的总是同一session。

    1.8K20

    ssl证书域名一证书 ?

    多个域名能用一张ssl证书?   ...ssl证书确实是一域名对应一ssl证书,但不等于要为你的域名都购买一张ssl证书,ssl证书按照功能类型可分为单域名型证书、多域名型证书、通配符型域名证书,你的域名如果很多可以使用多域名型证书,二级子域名很多可以使用通配符型证书...在多域名ssl证书里,提交的第一域名被默认主域名,而其他域名被认为SAN(主体替代名称)域名。...例如,如果用户希望在单个证书下保护五不同的域名,则在ssl注册过程中添加的第一域名将成为基本域名,其他四域将被视为SAN域名。   ...如果您拥有多个域名和子域名的网站,并希望通过一ssl证书来保护所有域名,那么多域名通配符ssl证书最佳的选择。

    6.1K20

    你说说RPC的一请求的流程怎么样的?

    前言 面试的时候经常被问到RPC相关的问题,例如:你说说RPC实现原理、让你实现一RPC框架应该考虑哪些地方、RPC框架基础上发起一请求是怎样一流程等等。...首先我们区分两角色一服务提供方,一服务调用方。服务调用方其实是通过动态代理、负载均衡、网络调用等机制去服务提供方的机器上去执行对应的方法。...第二参数当前一次请求的一唯一标识,在多个线程同时请求一方法时,用这个id来进行区分,以后无论做链路追踪还是日志管理都可以以此id为依据。 第三参数就是 实际的调用方法中的参数值。...总结 其实整个RPC的请求过程就是如下(不含异步调用): 做一总结,用大白话把一RPC请求流程描述出来: 首先无论调用方还是服务提供方都要注册到注册中心; 服务调用方把请求参数对象序列化成二进制数据...参考: 如何设计一短小精悍、可拓展的RPC框架?(含实现代码) 一篇文章了解RPC框架原理

    1.5K20

    你,下一VR影视传奇

    并对到场来的10多家战略合作伙伴、50多家媒体朋友、300位与会的行业精英表示感激,原本以为VR的寒冬,其实在专业的领域尤其VR影视领域,其热闹程度可见一斑!...本届大赛2016年全民VR视频大赛的重磅升级,将面向全球VR影视创作团队或个人征集精品VR原创影视及视频内容。...该公司的前期作品《VR Noir》获得了The Proto Awards,并被誉为虚拟现实技术怎么样改变电视业的标杆之作。...方淦的回答:“我们更倾向于注重体验且拥有好故事的团队。”而徐昊认为:“优秀的团队不仅拥有扎实的专业知识,也需要有一定的技术研发能力。”...随后,小编又问及了一参加比赛的团队都较为关心的问题“对于优秀的团队,是否会有投资意向?”符总表示:“最好的资源贴向精品。”符总虽未正面回答小编的问题,但也表现出了对于优秀团队的赏识与垂爱。

    67250

    HTTP 与 TCP 的 KeepAlive 东西

    HTTP 中的 KeepAlive 1.1 为什么 HTTP 短连接 众所周知,HTTP 一般短连接,Client 向 Server发送一 Request,得到 Response后,连接就关闭。...通常我们所说的长连接,指的是一连接创建后,除非出现异常情况,否则从应用启动到关闭期间,连接一直建立的。...例如在 RPC 框架 Dubbo 中,服务的消费者在启动后,就会一直维护服务提供者的底层 TCP 连接。...需要注意的,这 2 小时,指的是只有 KeepAlive 探测包,如果期间存在其他数据传输,则重新计时。...很多 RPC 框架,在调用方没有请求发送时,也会定时的发送心跳 SQL,保证连接可用。例如,很多数据库连接池,都会支持配置一心跳 SQL,定时发送到 mysql,以保证连接存活。

    1.6K31

    MLOps 构建在一谎言上的

    文章无非短评,其中引用了大会小组议题“如何理解人工智能实施”(https://www.youtube.com/watch?v=EzmTZlho-EI)中的内容: 人工智能基于经验提供竞争优势。...因此我认为,并没有多少人有兴趣去厘清为什么近十机器学习项目中会有九失败。正好,我就是来搞清楚的。...不幸的,这只是我查证过程中遵循的一线索(breadcrumb)。显然,Transform 2019 大会小组讨论并非我能确证的信息来源。 那么,下面我们去追溯《CIO Dive》杂志文章吧。...不幸的,我们对这一论点的来源一无所知。也许只是《CIO Dive》杂志文章出于某种目的而捏出来的一数字,或许是作者忘记指出对其它最终详细评定 87% 数据科学项目失败的文章的引用。...尽管十机器学习项目中完全有可能失败九,但对此做出一可靠的衡量几乎不可能得,甚至“失败”或“投产”也是无法准确定义的。首当其冲,我们应如何准确定义机器学习模型的投产?

    65020

    『数据密集型应用系统设计』读书笔记(四)

    因此,除非临时使用,采用语言内置编码通常是一坏主意。 JSON、XML JSON、XML 和 CSV 属于文本格式,因此具有人类可读性。...服务中的数据流: RESTRPC 有两种流行的 Web 服务方法: REST 和 SOAP。他们在哲学方面几乎截然相反的。 REST 不是一协议,而是一基于 HTTP 原则的设计哲学。...根据 REST 原则设计的 API 称为 RESTful。 相比之下,SOAP 用于制作网络 API 请求的基于 XML 的协议。...在上面提到的所有编码的基础上构建了各种 RPC 框架: 例如,Thrift 和 Avro 带有 RPC 支持,gRPC 使用 Protocol Buffers 的 RPC 实现。...由于这些原因,REST 似乎公共 API 的主要风格。 RPC 框架的主要重点在于同一组织拥有的服务之间的请求,通常在同一数据中心内。

    1.2K50

    刷屏洗脑的“咿呀嘿”,到底啥?

    因为当时还是一代码库,用户需要有一定的机器学习基础,才能在电脑上设置,其火爆程度远不如今日。...一阶运动模型的思想用一组自学习的关键点和局部仿射变换来建立复杂运动模型。 通过这个模型,可以轻易地让让静态的马跑起来,效果如下图所示: ? 模型框架主要由2部分构成,运动估计模块和图像生成模块。...运动估计模块的目的,预测一密集的运动场。研究人员假设存在一抽象的参考框架,并且独立估计两变换,分别是「从参考到源」和「从参考到驱动」,这样就能够独立处理源帧和驱动帧。...其中,VoxCeleb 大型人声识别数据集。...它包含来自 YouTube 视频的 1251 位名人的约 10 万段语音,同时数据基本上性别平衡的(男性占 55%),这些名人有不同的口音、职业和年龄。 ?

    1.7K30

    模块化开发前端的一方向

    所以具体来讲的话,模块化开发就是指将复杂的应用功能分为多个模块进行开发,这样一来一模块就是实现特定功能的文件,有了模块,最直接的价值就是我们可以更方便地管理代码,甚至直接引入使用别人的代码,想要什么功能...图片模块化开发的发展其实早期 JavaScript 的模块化基于文件划分的方式去实现的,这是我们 web 当中最原始化的模块系统,当然这个方式下有几个突出的问题,例如命名冲突、全局污染等。...后面我们采用命名空间方式,约定每一模块只暴露一全局的对象,所有的模块成员都挂载到这个对象下面,具体做法就是在 JavaScript 的模块化的基础上,将每一模块包裹成为全局对象的方式去实现,类似于在模块内去为我们的模块一些成员去添加命名空间...1、依赖加载目前这种方式应用较为广泛的,像 require js、sea.js等,除了编写规范不一样,实际都是通过相关require api把模块 chunk 文件拿回来,当加载完成之后再运行逻辑代码...3、小程序化此外,随着微信、支付宝等App的实践,小程序容器技术 FinClip 也成为模块化的一种选择,他的原理其实就和前面模块化开发的模式一直,将复杂紧耦合的功能应用解耦为一的小模块,但不同的这些小模块的承载方式都换为了小程序

    22240

    这4JavaScript操作符,你知道啥子

    然而,当一用户没有账户时是什么意思呢?更准确的做法将无账户视为null,而不是0,因为银行账户可以存在无(或负)钱的情况。...我们来看看它们如何联系在一起的。 var x = nullvar y = 5 console.log(x ??= y) // => 5console.log(x = (x ??...y)) // => 5 这个赋值操作符只有在当前值为空或未定义的情况下才会赋一新的值。上面的例子强调了这个操作符本质上空值赋值的语法糖。接下来,让我们看看这个操作符与默认参数有何不同。...当一引用为空时,表达式停止计算并返回一未定义的值。让我们来看看一例子。...然而,你知道三元运算符可以用于变量赋值? var budget = 0var transportion = (budget > 0) ?

    47531
    领券