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

RPC与REST的差别的更多相关文章

  1. WSDL Style和use的组合方式说明

    原文地址:http://www.ibm.com/developerworks/cn/webservices/ws-whichwsdl/#listing9 use属性可以为literal,encoded ...

  2. Webservices-1.web服务定义简介

    一.WEB服务定义(摘自维基百科)详情:http://zh.wikipedia.org/wiki/Web%E6%9C%8D%E5%8A%A1 Web服务是一种服务导向架构的技术,通过标准的Web协议提 ...

  3. web服务的三大主流架构

    1.远程过程调用 2.服务导向架构 3.表述性状态转移 今天在自学Spring架构时貌似发现 rest的表现.与RPC方式的最大差别,SOA方式更加关注如何去连接服务而不是去特定某个实现的细节.而re ...

  4. java rmi浅谈

    首先比较下RPC和RMI的差别: 首先java提供了RMI的api,jdk1.5之后虚拟机自动生成两个类:存根类stub和骨架类skelton. stub是给客户端的,当客户端调用远程对象的一个方法时 ...

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

    RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络,从远程计算机程序上请求服务,而不必了解底层网络技术的协议.说的再直白一点,就是客户端在不必知道 ...

  6. Atitit.js javascript的rpc框架选型

    Atitit.js javascript的rpc框架选型 1. Dwr1 2. 使用AJAXRPC1 2.2. 数据类型映射表1 3. json-rpc轻量级远程调用协议介绍及使用2 3.1. 2.3 ...

  7. 系统间通信(10)——RPC的基本概念

    1.概述 经过了详细的信息格式.网络IO模型的讲解,并且通过JAVA RMI的讲解进行了预热.从这篇文章开始我们将进入这个系列博文的另一个重点知识体系的讲解:RPC.在后续的几篇文章中,我们首先讲解R ...

  8. 如何设计一个RPC系统

    版权声明:本文由韩伟原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/162 来源:腾云阁 https://www.qclou ...

  9. 分布式系统间通信之RPC的基本概念(六)

    RPC(Remote Procedure Call Protocol)远程过程调用协议.一个通俗的描述是:客户端在不知道调用细节的情况下,调用存在于远程计算机上的某个对象,就像调用本地应用程序中的对象 ...

随机推荐

  1. 韦东山网课https://edu.csdn.net/course/play/207/1117

    接口讲解https://edu.csdn.net/course/play/207/1117

  2. COGS——C 908. 校园网 || 洛谷——P 2746 [USACO5.3]校园网Network of Schools

    http://www.cogs.pro/cogs/problem/problem.php?pid=908   ||  https://www.luogu.org/problem/show?pid=27 ...

  3. amazeui学习笔记--css(HTML元素3)--表单Form

    amazeui学习笔记--css(HTML元素3)--表单Form 一.总结 1.form样式使用:在容器上添加 .am-form class,容器里的子元素才会应用 Amaze UI 定义的样式. ...

  4. Android EditText回车不换行

    有时候我们需要在EditText组件输入完直接点回车进入 回车点击事件中处理相关业务,总是换行很伤脑筋,索性网上搜了一个办法,很实用,在这里记下来. 首先获取组件id: edt_city= (Edit ...

  5. 【剑指offer】对面和相等的正方体

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/26509459 剑指offer上的全排列相关题目. 输入一个含有8个数字的数组.推断有么有可 ...

  6. 关于stm32加不进.h文件的问题

    把路径也设置好了,但是.h文件加入不进去, 编译的时候.h文件也出来了 那是因为.h或对应的.c文件中存在错误,改掉错误就能成功,有时候keil不会报错,可能是因为定义变量没有定义好 如果显示某个变量 ...

  7. Spring 定时器 No qualifying bean of type [org.springframework.scheduling.TaskScheduler] is defined(转)

    最近项目里面,用了spring的定时任务,一直以来,项目运行的不错.定时器也能正常使用.可是,今天启动项目测试的时候,盯着启动Log看了一阵子,突然间发现,启动的Log中居然有一个异常,虽然一闪而过, ...

  8. 部分城市关于.Net招聘数量

    2016-12-09更新统计数据 上海 10730 北京 6322 广州 4157 深圳 3548 成都 2291 重庆 706 厦门 285 2015-01-30日,前程无忧搜索".Net ...

  9. Spark Streaming教程

      废话不说,先来个示例,有个感性认识再介绍. 这个示例来自spark自带的example,基本步骤如下: (1)使用以下命令输入流消息: $ nc -lk 9999 (2)在一个新的终端中运行Net ...

  10. js进阶 12-6 如何获取正在发生事件的名字和是哪个元素在发生事件

    js进阶 12-6 如何获取正在发生事件的名字和是哪个元素在发生事件 一.总结 一句话总结:event.type 描述事件的类型.        event.target 触发该事件的 DOM 元素. ...