RPC与REST的差别

一: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 的便利.

时间: 2024-10-14 01:57:45

RPC与REST的差别的相关文章

java rmi浅谈

首先比较下RPC和RMI的差别: 首先java提供了RMI的api,jdk1.5之后虚拟机自动生成两个类:存根类stub和骨架类skelton. stub是给客户端的,当客户端调用远程对象的一个方法时,实际上是调用本地存根对象的相应方法.skelton负责在服务端为远程对象接受客户端的请求.RMI必须要有JVM支持,所以,如果C,S都使用java开发,可以考虑使用RMI. RPC可以跨语言,客户端请求参数中就带有需要调用的类,方法及参数 -----------------------------

WSDL Style和use的组合方式说明

原文地址:http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing9 use属性可以为literal,encoded: style可以为rpc,document,我们来对五种类型的style/use决定的binding作一比较,分别是 rpc/encoded,rpc/literal,document/literal none-wrapper,document/literal with wrapper,docume

架构设计:系统间通信(10)——RPC的基本概念

1.概述 经过了详细的信息格式.网络IO模型的讲解,并且通过JAVA RMI的讲解进行了预热.从这篇文章开始我们将进入这个系列博文的另一个重点知识体系的讲解:RPC.在后续的几篇文章中,我们首先讲解RPC的基本概念,一个具体的RPC实现会有哪些基本要素构成,然后我们详细介绍一款典型的RPC框架:Apache Thrift.接下来我们聊聊服务治理和DUBBO服务框架.最后总结一下如何在实际工作中选择合适的RPC框架. 2.RPC概述 2-1.什么是RPC RPC(Remote Procedure

如何设计一个RPC系统

版权声明:本文由韩伟原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/162 来源:腾云阁 https://www.qcloud.com/community RPC是一种方便的网络通信编程模型,由于和编程语言的高度结合,大大减少了处理网络数据的复杂度,让代码可读性也有可观的提高.但是RPC本身的构成却比较复杂,由于受到编程语言.网络模型.使用习惯的约束,有大量的妥协和取舍之处.本文就是通过分析几种流行的RPC实现案例,提供

谈谈如何使用Netty开发实现高性能的RPC服务器

RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络,从远程计算机程序上请求服务,而不必了解底层网络技术的协议.说的再直白一点,就是客户端在不必知道调用细节的前提之下,调用远程计算机上运行的某个对象,使用起来就像调用本地的对象一样.目前典型的RPC实现框架有:Thrift(facebook开源).Dubbo(alibaba开源)等等.RPC框架针对网络协议.网络I/O模型的封装是透明的,对于调用的客户端而言,它就认为自己在调用本地的一个对象.至

Linux内核RPC请求过程

这篇文章讲讲server端RPC报文的处理流程.server端RPC报文的处理函数是svc_process,这个函数位于net/sunrpc/svc.c中.这个函数须要一个svc_rqst结构的指针作为參数,svc_rqst是与RPC请求相关的一个数据结构,这里包括了接收到的RPC消息,RPC消息的解析结果也放在这个数据结构中,RPC消息的处理结果也放在这个消息中了.这个数据结构的定义在include/linux/sunrpc/svc.h.因为我主要想解说NFS,所以非常多RPC的知识就略过不讲

Atitit.js javascript的rpc框架选型

1. Dwr1 2. 使用AJAXRPC1 2.2. 数据类型映射表1 3. json-rpc轻量级远程调用协议介绍及使用2 3.1. 2.3.JavaScript客户端调用示例2 3.2. 2.4.直接GET请求进行调用2 4. atiri3 1. Dwr Dwr要自己一个method挑选了,麻烦的.. 2. 使用AJAXRPC 在调用RPC方法时,如果没有传递回调函数,则是同步调用:如果传递回调函数,则是异步调用. 2.1.1.1. 同步调用 2.1. 数据类型映射表 AJAXRPC支持基本

Netty开发实现高性能的RPC服务器

Netty开发实现高性能的RPC服务器 RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络,从远程计算机程序上请求服务,而不必了解底层网络技术的协议.说的再直白一点,就是客户端在不必知道调用细节的前提之下,调用远程计算机上运行的某个对象,使用起来就像调用本地的对象一样.目前典型的RPC实现框架有:Thrift(facebook开源).Dubbo(alibaba开源)等等.RPC框架针对网络协议.网络I/O模型的封装是透明的,对于调用的客户端而

由SOAP说开去 - - 谈谈WebServices、RMI、RPC、SOA、REST、XML、JSON

引子: 关于SOAP其实我一直模模糊糊不太理解,这种模模糊糊的感觉表述起来是这样: 在使用web服务时(功能接口),本来我就可以通过安卓中固有的http类(使用http协议),来发送http请求,并且解析返回的数据(一般是xml或者json),得到我要的结果 为什么还非得多此一举使用soap呢,而且soap自己的介绍也说,它其实没有发明技术,它其实就是http+xml 在安卓中使用soap的方法是:(下载第三方类库),装配一个soap请求体,使用soap包装过的http类,通过http把请求体发