程序员的自我救赎---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支付中心 (七)权限系统 (八) ...
随机推荐
- 五、Hadoop学习笔记————调优之硬件选择
ResourceManageer服务器需要选择性能较好的 若有1TB数据,每天增量为10GB,则需要预留17.8TB,*3是因为有三分备份,*1.3是因为还需要预留出空间给操作系统等等 若集群在三十台 ...
- c语言贪吃蛇详解3.让蛇动起来
c语言贪吃蛇详解3.让蛇动起来 前几天的实验室培训课后作业我布置了贪吃蛇,今天有时间就来写一下题解.我将分几步来教大家写一个贪吃蛇小游戏.由于大家c语言未学完,这个教程只涉及数组和函数等知识点. 上次 ...
- TCP/IP协议栈 --- IP路由
IP路由:当一个IP包在主机发送出去或者在网络当中时,是怎么选择路径到达目的主机的呢? 一般情况下, 如果说源主机和目的主机在同一个网络中的话,那个数据报可以直接到达目的主机而不经过路由器,下面可以试 ...
- linux grep 从入门到精通
linux grep 从入门到精通 一.初级 搜索日志 grep "186" catalina.out 在新输出日志中监听固定字符串 tail -f catalina.out | ...
- NIO相关基础篇一
转载请注明原创出处,谢谢! 说在前面 NIO相关知识是很多后续的一些基础知识,所以今天这篇文章仅仅是简单介绍,后续会继续有一到二篇相关NIO内容. 什么是NIO Java NIO( New IO) 是 ...
- OGNL简介
OGNL 一:OGNL简介 OGNL的全称是Object Graph Navigation Language即对象导航语音.它是一个开源项目,工作在视图层,用来取代页面中的java脚本.简化数据 ...
- 禁止mui事件tab切换内容左右滑动
mui('.mui-slider').slider().setStopped(true);
- C++反汇编第六讲,认识C++中的Try catch语法,以及在反汇编中还原
C++反汇编第六讲,认识C++中的Try catch语法,以及在反汇编中还原 我们以前讲SEH异常处理的时候已经说过了,C++中的Try catch语法只不过是对SEH做了一个封装. 如果不懂SEH异 ...
- IE CSS Bugs 列表和解决方法
我们在开发中我们常会在IE中遇到很多莫名的bug,尤其是老态龙钟的IE6浏览器.为了提高我们的开发效率,需要经常总结,整理工作中遇到的问题.我们在网络上找到的IE Bugs 资料是零散的.不过,在老外 ...
- UVA 1426 - Discrete Square Roots(数论)
UVA 1426 - Discrete Square Roots 题目链接 题意:给定X, N. R.要求r2≡x (mod n) (1 <= r < n)的全部解.R为一个已知解 思路: ...