1.REST RPC是什么?

  REST RPC是一个改进版的RPC架构,它是为了解决传统的RPC和REST方案的一些不足之处而生的,它结合了REST API和RPC的优点,同时又克服了REST API和RPC的缺点。我们先来看看传统的RPC和REST API方案的优点和一些不足之处。

1.1RPC的优点

  • 屏蔽网络细节
  • 易用,和本地调用类似
  • 提供灵活的API
  • 支持多种协议

1.2RPC的缺点

  传统的RPC一般是基于protobuf或thrift去实现的,这类实现方式主要有存在这几个问题。

  • 使用麻烦,使用时需要先写一个DSL描述文件,然后用代码生成器生成各种语言代码,如果model类很多的时候,这个工作就很繁琐,工作量也较大。
  • 维护性差,当某些model类需要修改时,必须重新定义和编译,做一些繁琐而重复的工作。
  • 学习成本比较高,使用它们之前先要学习代码生成器如何使用,还要学习复杂的DSL语法定义规则,而这些语法规则并不是通用的,一段时间不用之后又要重新去学习。
  • 最大问题是不能快速响应API升级,当API或者协议演进的时候,需要给客户端提供新的SDK,当多语言的客户端较多时,每加一个接口时都要更新一堆不同语言的SDK,这是维护升级的噩梦。

1.3REST API的优点

  轻量级,简单易用。无需要额外的SDK,维护性和扩展性都比较好 。

1.4REST API的缺点

  只支持http协议,使用时需要关注http协议和网络层的细节,而http协议比较臃肿。

1.5REST RPC的特点

  REST RPC则吸收RPC和REST API的优点,同时又克服了他们的主要缺点,REST RPC的API和REST API类似,服务请求api是字符串形式,支持mian/sub/sub形式的API,使用方便又无须提供专门的SDK,解决了rpc模型类定义复杂繁琐的问题,也解决了多语言sdk更新的问题。因为api是字符串弱类型的,无需专门的多语言支持的sdk包了,还可以快速响应api和协议升级。它同时克服了rest api只能支持http协议的问题,rest rpc可以支持多种协议,http,tcp都可以,把协议和网络细节完全屏蔽,使用者无需关心协议,就像本地调用一样简单。

2.REST RPC的实现形式

  REST RPC的实现形式有两种,一种基本形式和一种变体形式,变体形式是为了克服基本形式的缺点。

2.1REST RPC基本形式

  REST API的协议是json格式的,调用者需要先将参数序列化为json字符串。 REST RPC的API是通用的,变化的只有服务端提供的API名称和对应的参数对象,使用者传入服务端提供的服务API名称和参数对象对应的json字符串。

通用REST API原型:

string call(string service_name, string json);
  • 客户端调用:
call("handler1", "{"name":"TiMax","age":20,"city":"zhuhai"}");
  • 对应的服务端处理程序:
struct Person
{
string name;
int age;
string city;
};
handler1(Person p);

2.2REST RPC变体形式

  变体形式只适用于C++或其它支持可变参数的语言,它让RPC API使用更简单。

  REST RPC变体原型:

string call(string service_name, Args… args);
  • 客户端调用:
call("handler2", " TiMax", , "zhuhai");
  • 对应的服务端处理程序
handler2(string name, int age, string city);

3.REST RPC的缺点

  REST RPC虽然解决了REST API和RPC的大部分缺点,但是它属于弱类型的API(字符串形式的),所以无法在编译期检查接口的正确性,只能在运行期检查API的正确性。 一个改进的做法是由客户端的使用者封装API,在API内部将结构体序列化为json,再调用通用的api,这样可以保证在编译期检查API的正确性。另外一个改进方式是使用REST API变体形式,但这种形式只支持C/C++等支持可变参数的语言。

REST RPC架构思想的更多相关文章

  1. 剥析surging的架构思想

    1.前言   前面第一篇阐述了采用基于.NET CORE微服务架构,应用surging服务端与客户端之间进行通信的简单示例以及对于surging服务化框架简单介绍.在这篇文章中,我们将剥析surgin ...

  2. ReactiveCocoa常见操作方法介绍/MVVM架构思想

      1.ReactiveCocoa常见操作方法介绍. 1.1 ReactiveCocoa操作须知 所有的信号(RACSignal)都可以进行操作处理,因为所有操作方法都定义在RACStream.h中, ...

  3. iOS swift的xcworkspace多项目管理(架构思想)

    iOS  swift的xcworkspace多项目管理(架构思想) 技术说明: 今天在这里分享 swift下的 xcworkspace多项目管理(架构思想),能为我们在开发中带来哪些便捷?能为我们对整 ...

  4. 前端笔记之NodeJS(四)MongoDB数据库&Mongoose&自制接口&MVC架构思想|实战

    一.MongoDB数据库 1.1 NoSQL简介 随着互联网web2.0网站的兴起,传统的SQL数据库(关系数据库)在应付web2.0网站,特别是超大规模和高并发的SNS(social network ...

  5. 『练手』005 Laura.SqlForever历史遗留 的 架构思想缺陷

    005 Laura.SqlForever历史遗留 的 架构思想缺陷 我们 比较一下 Laura.WinFramework 和 Laura.XtraFramework 的差异: Laura.WinFra ...

  6. Restful架构思想

    java作为一门后端语言,其厉害之处在于web,大家比较熟知的各种网络应用,java都能做,那么在这个移动优先的时代,如何继续发挥java的强大呢.通常是让java作为一个app的服务端,为app客户 ...

  7. 对SOA架构思想的一些说明(转)

    出处:http://kb.cnblogs.com/page/510698/ 从纵向到横向 传统业务系统的构建更多的是竖井式的纵向思想,这个主要是从单个业务系统孤立来看都是垂直应用.那么SOA架构的视角 ...

  8. RPC架构-美团,京东面试题目

    RPC(Remote Procedure Call) RPC服务 从三个角度来介绍RPC服务:分别是RPC架构,同步异步调用以及流行的RPC框架. RPC架构 先说说RPC服务的基本架构吧.允许我可耻 ...

  9. 架构思想之CAP原理

    由于自己负责后端的设计已经有一段时间,对设计的一些思想和理论有一些理解,但最近被问到什么是CAP时,却一脸懵逼,下来后专门针对CAP架构思想进行了一些专题学习,在这里也将这个概念引入给大家,大家可以有 ...

随机推荐

  1. java获取classpath文件路径空格转变成了转义字符%20的问题

    java获取classpath文件路径空格转变成了转义字符%20的问题 这个问题很纠结,服务器的文件路径带有空格,空格被转化是%20了,悲剧就出现了 下面展示一段代码String path = get ...

  2. UI创意求助:手机贪吃蛇游戏方向控制键设计

    继上一片博文<做梦想起来的C#简单实现贪吃蛇程序(LinQ + Entity)>之后,尝试做一个手机版本,大部分的功能都已经实现了.但在贪吃蛇的方向控制设计上一直不太满意.由于手机界面的大 ...

  3. We have detected that MySQL products under the Commercial license are installed. In order to proceed with this GPL installation these Commercial

    下载了MySQL 5.6.15,在安装时,出现了下面的提示信息: 按提示信息的要求单击“是”,结果安装就无法进行下去. 从提示信息上看,意思是指电脑中原来安装有商业版的许可,现在要转换成为GPL许可. ...

  4. ASP.NET Core重写个人博客站点小结

    今天用ASP.NET Core重写了个人博客站点,原来是基于ASP.NET 4.5开发的.重写工作总体很顺利,最后成功发布到Ubunt+Nginx平台上.效果如下: 右边的Header信息里可以看到已 ...

  5. MongoDB 基础命令使用学习记录

    1. 启动 mongod 几个常用命令说明:--dbpath : 指定数据库相关文件的存储目录 --logpath: 指定日志文件的存储目录 --port: 指定数据库的端口,默认是 27017 -- ...

  6. [MSSQL]SQL疑难杂症实战记录-巧妙利用PARTITION分组排名递增特性解决合并连续相同数据行

    问题提出 先造一些测试数据以说明题目: DECLARE @TestData TABLE(ID INT,Col1 VARCHAR(20),Col2 VARCHAR(20)) INSERT INTO @T ...

  7. [JS5] 利用onload执行脚本

    <html> <head> <title>利用onload执行脚本</title> <SCRIPT TYPE="text/JavaScr ...

  8. Windows 10 技术预览

    windows10的技术预览版已经发布了很久了,正式版大约在今年的夏天就会发布,作为微软寄予厚望的下一代全平台操作系统,相比于windows8.1,windows10做了哪些改进,又添加了哪些新功能. ...

  9. Node.js 爬虫,自动化抓取文章标题和正文

    持续进行中... 目标: 动态User-Agent模拟浏览器 √ 支持Proxy设置,避免被服务器端拒绝 √ 支持多核模式,发挥多核CPU性能 √ 支持核内并发模式 √ 自动解码非英文站点,避免乱码出 ...

  10. Mac直播服务器Nginx配置对HLS的支持

    在上一篇中Mac上搭建直播服务器Nginx+rtmp,我们已经搭建了nginx+rtmp直播服务器.下面需要对Nginx服务器增加对HLS的支持.在Nginx增加对HLS种支持比较简单,只是简单的修改 ...