RESTful架构与RPC架构
RESTful架构与RPC架构
在RESTful
架构中,关注点在于资源,操作资源时使用标准方法检索并操作信息片段,在RPC
架构中,关注点在于方法,调用方法时将像调用本地方法一样调用服务器的方法。
RESTful架构
REST
即表述性状态传递Representational State Transfer
,是一种软件架构风格,也可以称作是一种设计API
的模式,REST
通过HTTP
协议定义的通用动词方法GET
、POST
、PUT
、DELETE
,以URI
对网络资源进行唯一标识,响应端根据请求端的不同需求,通过无状态通信,对其请求的资源进行表述,符合REST
设计规范的架构就称为RESTful
架构。
主要原则
- 网络上的所有事物都被抽象为资源
- 每个资源都有一个唯一的资源标识符
- 对资源的各种操作不会改变资源标识符
- 所有的操作都是无状态的
- 同一个资源具有多种表现形式如
xml
、json
等
统一资源接口
安全性是指访问REST
接口时不会对服务端资源状态发生改变。
幂等性是指对于同一REST
接口的URI
多次访问时,得到的资源状态是相同的。
GET
: 安全的,幂等的,用于读取资源POST
: 不安全的,不幂等的,用于服务端自动产生的实例号创建资源,更新部分资源PUT
: 不安全的,幂等的,用于客户端的实例号创建资源,更新资源DELETE
: 不安全的,幂等的,用于客户端实例号删除资源
实例
- 查询
user
,GET https://127.0.0.1/user/1
,通过直接携带params
查询用户 - 新增
user
,POST https://127.0.0.1/user
,请求body
附带用户注册信息 - 修改
user
,PUT https://127.0.0.1/user
,请求body
附带userid
标识信息 - 删除
user
,DELETE https://127.0.0.1/user
,请求body
附带userid
标识信息 - 通过请求头
Accept
来获取同一资源的不同形式,如application/json
与application/xml
等 - 若将版本号看作同一资源的不同表现形式的话,同样应该在
Accept
字段来区分版本而不是直接在URI
中添加版本号
RPC架构
RPC
即远程过程调用Remote Procedure Call
,简单的理解是一个节点请求另一个节点提供的服务,远程过程调用,是相对于本地过程调用来说的,当调用方法时就像调用本地方法一样调用远程服务器的方法,做到了轻量、无感知通信。
结构组成
- 客户端
client
:服务的调用方 - 服务端
server
:服务的提供方 - 客户端存根
client stub
:将客户端请求参数打包成网络消息,再发给服务方 - 服务端存根
server stub
:接收客户端发来的消息,将消息解包,并调用本地方法
通信过程
客户端
1. 将这个调用映射为Call Id
2. 将这个Call Id与参数等序列化,以二进制形式打包
3. 将序列化数据包通过网络通信发送到服务端
4. 等待服务端响应
5. 服务端调用成功并返回结果,反序列化后进行下一步操作
服务端
1. 在本地维护一个Call Id的Map,用以保证Id与调用方法的对应
2. 等待客户端请求
3. 得到一个请求后,将数据包反序列化,得到Call Id与参数等
4. 通过Map寻找Call Id所对应的函数指针
5. 通过函数指针调用函数,并将数据包反序列化后的参数传递,得到结果
6. 将结果序列化之后通过网络通信返回到客户端
注:
此处的客户端指的是本地调用者,也可以是一台服务器
此处的服务端指的是被调用者,也可以是一台服务器
数据包通信时无论是使用socket进行TCP传输,或使用HTTP进行传输都是可行的
相关比较
- 在通信协议方面来说,
RESTful
是使用HTTP
协议进行数据传输,RPC
一般是使用TCP
协议数据传输,当然传输协议并不是RPC
的重点,一般使用TCP
协议传输是因为其效率高,使用HTTP
协议传输是完全可行的。 - 在性能方面,
RPC
的传输效率高于RESTful
数据传输的效率,因为RCP
具有高效紧凑的进程通信机制,且传输数据量小,在交换大量消息时效率高。 - 在灵活度方面,
RESTful
架构的灵活度高于RPC
架构,使用RESTful
架构具有比较好的可读性,RPC
在编写与调试时略显繁琐。 - 使用
RESTful
架构的接口进行数据传输可以得到多语言支持,HTTP
协议相对更规范、更通用、更标准,对于中间件而言最先支持的几种协议都包含RESTful
数据传输规范。 - 内部服务的相互调用推荐使用
RPC
,而对外的接口推荐使用RESTful
,例如微服务架构模式一般就采用对内RPC
对外RESTful
的模式。
每日一题
https://github.com/WindrunnerMax/EveryDay
参考
https://www.jianshu.com/p/7d6853140e13
https://www.jianshu.com/p/ee92c9accedd
https://www.zhihu.com/question/28570307
https://www.zhihu.com/question/25536695
https://www.runoob.com/w3cnote/restful-architecture.html
https://blog.csdn.net/bieleyang/article/details/76272699
https://blog.csdn.net/u014590757/article/details/80233901
RESTful架构与RPC架构的更多相关文章
- 12 RESTful架构(SOAP,RPC)
12 RESTful架构(SOAP,RPC) 推荐: http://www.ruanyifeng.com/blog/2011/09/restful.html
- RPC架构-美团,京东面试题目
RPC(Remote Procedure Call) RPC服务 从三个角度来介绍RPC服务:分别是RPC架构,同步异步调用以及流行的RPC框架. RPC架构 先说说RPC服务的基本架构吧.允许我可耻 ...
- REST RPC架构思想
1.REST RPC是什么? REST RPC是一个改进版的RPC架构,它是为了解决传统的RPC和REST方案的一些不足之处而生的,它结合了REST API和RPC的优点,同时又克服了REST API ...
- 前端调用后端的方法(基于restful接口的mvc架构)
1.前端调用后台: 建议用你熟悉的一门服务端程序,例如ASP,PHP,JSP,C#这些都可以,然后把需要的数据从数据库中获得,回传给客户端浏览器(其实一般就是写到HTML中,或者生成XML文件)然后在 ...
- 分布式架构核心RPC原理
在应用的迭代演进过程中,随着系统访问量提高,业务复杂度提高,代码复杂度提高,应用逐渐从单体式架构向面向服务的分布式架构转变.RPC(Remote Procedure Call Protocol远程过程 ...
- RESTful架构及SOA架构简单解析
1.RESTful架构 本人也是刚接触ASP.NET开发,以下为自己简单的理解,并做了一些记录,表述不当或者错误之处还请指正,在此谢过. 首先,REST(REpresentational State ...
- RPC架构
RPC架构 学习了: https://www.cnblogs.com/ChrisMurphy/p/6550184.html RPC架构简介,有一个Java例子: http://blog.csdn.ne ...
- 分布式架构基石RPC的实现原理
RPC的由来 随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构 当网站流量很小时, ...
- 软件架构的演进,了解单体架构,垂直架构,SOA架构和微服务架构的变化历程
软件架构演进 软件架构的发展经历了从单体结构.垂直架构.SOA架构到微服务架构的过程,博客里写到了这四种架它们的特点以及优缺点分析,个人学习之用,仅供参考! 1.1.1 单体架构 特点: 1 ...
- 高吞吐高并发Java NIO服务的架构(NIO架构及应用之一)
高吞吐高并发Java NIO服务的架构(NIO架构及应用之一) http://maoyidao.iteye.com/blog/1149015 Java NIO成功的应用在了各种分布式.即时通信和中 ...
随机推荐
- 百度网盘(百度云)SVIP超级会员共享账号每日更新(2024.01.23)
一.百度网盘SVIP超级会员共享账号 可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答. 我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免 ...
- [转帖]@Scope("prototype")的正确用法——解决Bean的多例问题
https://www.jianshu.com/p/54b0711a8ec8 1. 问题,Spring管理的某个Bean需要使用多例 在使用了Spring的web工程中,除非特殊情况,我们都会选择 ...
- [转帖]网站开启 IPv6 的三种方式
https://zhuanlan.zhihu.com/p/443835798 从传统二进制部署的 Nginx ,到云原生部署的 K8S.Istio,分别介绍网站开启 IPv6 的三种方式. 1.Ngi ...
- [转帖]oracle 11g 分区表创建(自动按年、月、日分区)
https://www.cnblogs.com/yuxiaole/p/9809294.html 前言:工作中有一张表一年会增长100多万的数据,量虽然不大,可是表字段多,所以一年下来也会达到 1G ...
- [转帖]Linux:CPU频率调节模式以及降频方法简介
概述 cpufreq的核心功能,是通过调整CPU的电压和频率,来兼顾系统的性能和功耗.在不需要高性能时,降低电压和频率,以降低功耗:在需要高性能时,提高电压和频率,以提高性能. cpufreq 是一个 ...
- Windows 修改时间提示: 某些设置已隐藏或由你的组织管理 的解决方案
最近公司的一台生产服务器时间不对. 因为机器有域控的需求, 所以加入了域, 想改时间时有这样的提示信息: 某些设置已隐藏或由你的组织管理 百度了很久发现没有解决方法.. 但是突然发现可以使用 运行-& ...
- [转帖]ELF文件详解
一.ELF概述 1.ELF的定义 ELF(Executable and Linkable Format)文件是一种目标文件格式,常见的ELF格式文件包括:可执行文件.可重定位文件(.o).共享目标文件 ...
- ebpf的简单学习
ebpf的简单学习-万事开头难 前言 bpf 值得是巴克利包过滤器 他的核心思想是在内核态增加一个可编程的虚拟机. 可以在用户态定义很多规则, 然后直接在内核态进行过滤和使用. 他的效率极高. 因为避 ...
- [转帖]台积电3nm成功量产,稳了吗?
https://docs.pingcode.com/info/13836.html?p=13836 2023-01-19 资讯 21 原标题:台积电3纳米成功量产:未来与三星仍将决战鳍式场效晶体管(F ...
- 你应该知道的Hooks知识
Hooks Hooks 是 React16.8 的新增特性,能够在不写 class 的情况下使用 state 以及其他特性. 动机 在组件之间复用状态逻辑很难 复杂组件变得难以理解 难以理解的 cla ...