博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RPC与REST的差别
阅读量:7026 次
发布时间:2019-06-28

本文共 1548 字,大约阅读时间需要 5 分钟。

一:RPC

RPC 即远程过程调用, 非常easy的概念, 像调用本地服务(方法)一样调用server的服务(方法).
通常的实现有 XML-RPC , JSON-RPC , 通信方式基本同样, 所不同的仅仅是数据传输的格式.
(假设你已经习惯于XML繁重的尖括号,你最好还是能够尝试下更加轻型,高效,传输效率高的 JSON.)
一个简单的通信过程通常为:
Request

xml version="1.0"?

>

<methodCall> <methodName>member.get_username_by_id</methodName> <params> <param> <value><i4>1</i4></value> </param> </params> </methodCall>

Response

xml version="1.0"?

>

<methodResponse> <params> <param> <value><string>Zhu Tao</string></value> </param> </params> </methodResponse>

向server发送一个过程调用的方法及其參数, 得到server返回的方法运行的结果.

2:REST

REST 不是一种协议,它是一种架构, 一种 Web Service 能够假设满足 REST 的几个条件, 通常就称这个系统是 Restful 的.

这里提到的条件包含:

C/S结构 (这是Internet服务的一个基本特征)

无状态 (非常熟悉吧,呵呵)
能够cache (想起了浏览器?)
分层系统 (想起了无数的架构?)
统一的接口 (假设这是可能的,程序猿有福了, :D)
code on demand(可选, 事实上是一种扩展性的要求)
看了这几个特征后,你想起了什么?

你可能会破口而出: HTTP.

我答: You got it!

HTTP是WWW的最核心的协议, 它将简单的分布于世界各个角落的资源都统一起来, 统一的地址, 简单的方法, 和一定数量的表达方式.(你可能对这三点描写叙述非常模糊,请go ahead).

REST 的三个要素是 唯一的资源标识, 简单的方法 (此处的方法是个抽象的概念), 一定的表达方式.

REST 是以 资源 为中心, 名词即资源的地址, 动词即施加于名词上的一些有限操作, 表达是对各种资源形态的抽象.

以HTTP为例, 名词即为URI(统一资源标识), 动词包含POST, GET, PUT, DELETE等(还有其他不经常使用的2个,所以 整个动词集合是有限的), 资源的形态(如text, html, image, pdf等)

三:RPC与REST的差别

假设你想仅仅记住一点,那么就请记住 RPC是以动词为中心的, REST是以名词为中心的, 此处的 动词指的是一些方法, 名词是指资源.

你会发现,以动词为中心,意味着,当你要须要加入新功能时,你必须要加入很多其他的动词, 这时候server端须要实现 相应的动词(方法), client须要知道这个新的动词并进行调用.

而以名词为中心, 假使我请求的是 hostname/friends/, 不管这个URI相应的服务怎么变化,client是无需 关注和更新的,而这样的变化对client也是透明的.

至于其他的差别,如对实现语言的依赖, 耦合性等,这些都是上面提到的这个根本差别所衍生的.

让我们回到引入部分的2个问题. 当你每天使用HTTP冲浪时,你都在使用 REST 与远程的server进行亲热接触. 当你使用Gtalk和同事朋友沟通时,你则是在享受着 RPC 的便利.

转载地址:http://yxoxl.baihongyu.com/

你可能感兴趣的文章
Swift - 06 - 数值类型转换和类型别名
查看>>
华为3G模块EM770W在LINUX下的驱动安装
查看>>
omnet++4.0安装使用
查看>>
Jquery JSOPN在WebApi中的问题
查看>>
[React Testing] Conditional className with Shallow Rendering
查看>>
a or an
查看>>
Coursera课程《大家的python》(Python for everyone)课件
查看>>
PHP程序猿必须学习的第二课——站点安全问题预防
查看>>
2016第5周三
查看>>
Spring学习10-SpringMV核心组件2及SpringMVC项目示例
查看>>
hdu 5620 KK's Steel(推理)
查看>>
(笔记)电路设计(十五)之基本电路单元的认识
查看>>
nginx 日志获取不到远程访问ip问题解决
查看>>
有若干个字符串,比較找出当中最大者
查看>>
开源 免费 java CMS - FreeCMS2.0 会员我的评论
查看>>
Servlet 工程 web.xml 中的 servlet 和 servlet-mapping 标签 《转载》
查看>>
数据库读写分离的初步理解
查看>>
[转]window下使用SetUnhandledExceptionFilter捕获让程序的崩溃
查看>>
Codeforces Beta Round #9 (Div. 2 Only) A. Die Roll 水题
查看>>
代码的组织机制
查看>>