什么是REST
REST是一种架构风格,指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。REST规范把所有内容都视为资源,网络上一切皆资源。
重要的两个概念
1、REST 是面向资源的,这个概念非常重要,而资源是通过 URI 进行暴露。
URI 的设计只要负责把资源通过合理方式暴露出来就可以了。对资源的操作与它无关,操作是通过 HTTP动词来体现,所以REST 通过 URI 暴露资源时,会强调不要在 URI 中出现动词。
2、REST很好地利用了HTTP本身就有的一些特征,如HTTP动词、HTTP状态码、HTTP报头等等
什么是RPC
远程方法调用,就是像调用本地方法一样调用远程方法。
RPC是远程调用过程的简写,是一个协议,处于网络通信协议的第五层:会话层,其下就是TCP/IP协议,在建立在其基础上的通信会话协议。
常见RPC框架结构图
RPC框架要做到的最基本的三件事:
1、服务端如何确定客户端要调用的函数;
在远程调用中,客户端和服务端分别维护一个【ID->函数】的对应表, ID在所有进程中都是唯一确定的。客户端在做远程过程调用时,附上这个ID,服务端通过查表,来确定客户端需要调用的函数,然后执行相应函数的代码。
2、如何进行序列化和反序列化;
客户端和服务端交互时将参数或结果转化为字节流在网络中传输,那么数据转化为字节流的或者将字节流转换成能读取的固定格式时就需要进行序列化和反序列化,序列化和反序列化的速度也会影响远程调用的效率。
3、如何进行网络传输(选择何种网络协议);
多数RPC框架选择TCP作为传输协议,也有部分选择HTTP。如gRPC使用HTTP2。不同的协议各有利弊。TCP更加高效,而HTTP在实际应用中更加的灵活。
REST与RPC比较
注意:为什么说RPC性能要高于REST
首先声明REST API 和 RPC 都是把一个个函数封装成接口暴露出去,以供调用
不过 REST API 一般都是基于 HTTP 协议(表示层),而 RPC 则可以不基于 HTTP,可以基于TCP/IP协议(会话层)
因此,如果是后端两种语言互相调用,用 RPC 可以获得更好的性能(因为RPC 本质上像调用本地方法一样调用远程方法,省去了 HTTP 报头等一系列东西),应该也更容易配置
如果是前端通过 AJAX 调用后端,那么用 REST API 的形式比较好(因为无论如何也避不开 HTTP 这道坎)
从性能角度看,使用Http时,Http本身提供了丰富的状态功能与扩展功能,但也正由于Http提供的功能过多,导致在网络传输时,需要携带的信息更多( HTTP 报头等一系列东西,Tcp就不要携带这些信息),从性能角度上讲,较为低效。而RPC服务网络传输上仅传输与业务内容相关的数据,传输数据更小,性能更高。
为什么说REST 灵活度高于RPC
以Spring Cloud为代表所支持的Restful 协议,最大优势在于可以穿透防火墙 ,使用方便,无论哪种语言都支持http协议,基本上可以使用各种开发语言实现的系统,都可以接受Restful 的请求
因为它是基于http的,防火墙极少封闭http端口的,除非管理员不想客户通过B/S方式访问服务器. 这就是能穿透防火墙的原因
“80端口是为HTTP(HyperText Transport Protocol)即超文本传输协议开放的可以通过HTTP地址(即常说的“网址”)加“:80”来访问网站,因为浏览网页服务默认的端口号都是80,因此只需输入网址即可。
借鉴博客===========
https://www.cnblogs.com/helloworldmybokeyuan/p/11626833.html 讲的很好的博客
https://blog.csdn.net/u014590757/article/details/80233901 服务之间的调用之RPC、Restful深入理解
https://blog.csdn.net/apricotCandy/article/details/87977528 这个是网络7层传输结构
https://www.cnblogs.com/baizhanshi/p/8482612.html tcp 和 HTTP 联系及区别