程序员的自我救赎---11.1:RPC接口使用规范
《RPC接口使用规范》
不知道啥时候开始好像一下子都流行叫“RPC”了。之前我们都叫“API”的,为此我特地百度了一下才知道原来:
API(Application Programming Interface,应用程序编程接口)
RPC(Remote Procedure Call),远程过程调用)
这样一看确实叫RPC更合适一下,细致讲一下我们Winner2.0中接口请求规范,我们从简到繁的说一下演变过程(以下就简称RPC)。
首先在1.0时代,我们当时也没有很多思路,只做了简单签名验证也没有考虑权限、版本等问题,主要是用WebService。
我们看一下常规情况我们是这么用的:

我们的目的是为了防止WebService 接口被恶意调用,尤其是篡改数据后调用所以用了两种手段做安全验证:
1,使用RSA对参数加密(RSA是非对称加密,公钥加密私钥解密,一般使用两对RSA)。
2,使用MD5做签名验证(客户端与服务端约定一个字符串做加密种子,将所有参数+加密种子 算出来唯一的md5值)
这样做基本对于安全性而言已经够了,但是在使用过程中五六年下来总是觉得用着不顺手。大致几点如下:
A,接口没有权限管制。比如我们一个接口同时有A、B两个项目调用,这个时候我想停止给B项目使用,接口就没有控制权。
这种情况经常出现在给第三方调用时候,我们不想给第三方使用了,这个时候又关不掉,关掉了我们自己的项目也用不了了。
B,我们这样写接口没有版本的概念。同样以第三方调用我们的接口来举例,如果我们升级项目更改了参数,所有的第三方就开始
骂娘了,每个第三方客户端都要去升级系统,而且我们一刀切调用不见得有时间来配合我们升级。有版本号的话,我们可以让老用户
依然可以继续使用,新接入的就使用最新的接口。
C,对于移动客户端没有管理概念。 这个属于特殊的业务,我们公司的硬件终端如果我想限制某一台终端调用,之前的做法是不行的。
D:参数过多时代码繁琐。 如果9个参数,客户端就要给8个参数依次加密,当然可以写工具类处理,但还是繁琐了。
F:没有统一的Json返回参数规范。每个项目都是自己定义返回结果,没有规范。客户端开发时没有规律可循。
另外还有一些小问题,但最主要的就这几点,所以我们在Winner2.0中我们商量出了一套标准,所有的接口基于这套标准开发。
首先,得益于MVC的到来,我们基本放弃了使用Webservice这种方式提供接口,转而使用WebAPI的形式。
其次,我们接口只接收三个固定参数:商户号,Json数据,签名字符串。
最后,我们统一了返回Json的数据标准,以及错误编码。
这里我贴一张Jason 写的接口文档中的接口API协议:

公共参数就是所有接口都需要接收这些基本的参数,再一个子Json才是具体的传值参数。 这段Json用商户号对应的MD5种子
加密,主要也省去了每个参数客户端单独加密,服务端又单独解密的繁琐。
与此同时,我们还需要上送客户端的硬件id,会用的信息,商户信息等。主要就在服务端能做更细致的控制。
差不多就说道这里吧,有兴趣一起探讨Winner框架的可以加我们QQ群:261083244。或者扫描左侧二维码加群。
程序员的自我救赎---11.1:RPC接口使用规范的更多相关文章
- 程序员的自我救赎---11.3:WinService服务
<前言> (一) Winner2.0 框架基础分析 (二)PLSQL报表系统 (三)SSO单点登录 (四) 短信中心与消息中心 (五)钱包系统 (六)GPU支付中心 (七)权限系统 (八) ...
- 程序员的自我救赎---11.4:FileSystem文件服务
<前言> (一) Winner2.0 框架基础分析 (二)PLSQL报表系统 (三)SSO单点登录 (四) 短信中心与消息中心 (五)钱包系统 (六)GPU支付中心 (七)权限系统 (八) ...
- 程序员的自我救赎---1.4.2: 核心框架讲解(BLL&Tool)
<前言> <目录> (一) Winner2.0 框架基础分析 (二) 短信中心 (三)SSO单点登录 (四)PLSQL报表系统 (五)钱包系统 (六)GPU支付中心 (七)权限 ...
- 程序员的自我救赎---3.1:理解Oauth2.0
<前言> (一) Winner2.0 框架基础分析 (二)PLSQL报表系统 (三)SSO单点登录 (四) 短信中心与消息中心 (五)钱包系统 (六)GPU支付中心 (七)权限系统 (八) ...
- 程序员的自我救赎---1.4.1:核心框架讲解(DAL)
<前言> (一) Winner2.0 框架基础分析 (二)PLSQL报表系统 (三)SSO单点登录 (四) 短信中心与消息中心 (五)钱包系统 (六)GPU支付中心 (七)权限系统 (八) ...
- 程序员的自我救赎---12.2.3: 虚拟币交易平台(区块链) 下 【C#与以太坊通讯】
<前言> (一) Winner2.0 框架基础分析 (二)PLSQL报表系统 (三)SSO单点登录 (四) 短信中心与消息中心 (五)钱包系统 (六)GPU支付中心 (七)权限系统 (八) ...
- 程序员的自我救赎---3.2:SSO及应用案例
<前言> (一) Winner2.0 框架基础分析 (二)PLSQL报表系统 (三)SSO单点登录 (四) 短信中心与消息中心 (五)钱包系统 (六)GPU支付中心 (七)权限系统 (八) ...
- 程序员的自我救赎---1.4.3: 核心框架讲解(MVC)
<前言> (一) Winner2.0 框架基础分析 (二)PLSQL报表系统 (三)SSO单点登录 (四) 短信中心与消息中心 (五)钱包系统 (六)GPU支付中心 (七)权限系统 (八) ...
- 程序员的自我救赎---10.1:APP版本控制系统
<前言> (一) Winner2.0 框架基础分析 (二)PLSQL报表系统 (三)SSO单点登录 (四) 短信中心与消息中心 (五)钱包系统 (六)GPU支付中心 (七)权限系统 (八) ...
随机推荐
- lua luaconf解读
定义了一些跟平台相关的宏,明确指出一些不推荐使用的函数,如lua_cpcall.lua_strlen
- HTML5学习的价值是什么?
随着互联网的发展和移动端的发展,很多公司对HTML5前端开发的需求旺盛,市场人才短缺供不应求. 对于HTML5的迅速发展和市场的大量需求,究竟为何HTML5如此受欢迎,它的价值在哪里呢? 语义特性(C ...
- (ajax)——jquery用法
例子:/* ajax获得状态 */ 点击事件 $("#findBycname").click(function(){ var company = ...
- ubuntu debain下好用的编辑器
geany: 轻量级的IDE apt-get install geany 用来写shell脚本和python十分方便.特别写python脚本时,它有丰富的提示和自动补全功能.查看代码也很方便
- JavaScript:彻底理解同步、异步和事件循环(Event Loop)
一. 单线程 我们常说"JavaScript是单线程的". 所谓单线程,是指在JS引擎中负责解释和执行JavaScript代码的线程只有一个.不妨叫它主线程. 但是实际上还存在其他 ...
- git学习——Github关联(2)
一.参考学习链接 1.重点看Github与Git的关联. http://www.cnblogs.com/schaepher/p/5561193.html#github 2.git的全面详细介绍. ht ...
- ORACLE+PYTHON实战:复制A表数据到B表
最近在学习python ,看到了pythod的oracle,不仅可以一次fetch多条,也可以一次insert多条,想写一个复制A表数据到B表的程序来看看实际效率能不能提高.写完发现,非常惊艳!效率提 ...
- 51nod 1020 逆序排列 DP
在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序的总数就称为这个排列的逆序数. 如2 4 3 1中,2 1,4 3,4 1,3 1是逆序 ...
- (高级篇)php结合redis实现高并发下的抢购、秒杀功能
抢购.秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个:1 高并发对数据库产生的压力2 竞争状态下如何解决库存的正确减少("超卖"问题)对于第一个问题,已经很容易想到用缓存 ...
- PHP求解一个值是否为质数
/** * 求解一个值是否为质数 * * @param $a * @return int 0是 1不是 */ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 function ...