程序员的自我救赎---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支付中心 (七)权限系统 (八) ...
随机推荐
- MVC模式tp框架四中路由形式
①基本get形式 http://网址/index.php?m=分组&c=控制器&a=操作方法 该方法是最底层的get形式,传统的传递参数方式,不安全. ②pathinfo路径形式[默认 ...
- 一个简单的 js 时间对象创建
JS中获取时间很常见,凑凑热闹,也获取一个时间对象试试 首先,先了解js的获取时间函数如下: var myDate = new Date(); //创建一个时间对象 myDate.g ...
- 深入理解Java虚拟机---学习感悟以及笔记
一.为什么要学习Java虚拟机? 这里我们使用举例来说明为什么要学习Java虚拟机,其实这个问题就和为什么要学习数据结构和算法是一个道理,工欲善其事,必先利其器.曾经的我经常害怕处理内存溢 ...
- linux nginx搭配https
微信小程序upload接口必须是https请求,所以就搭建https 1.申请ssl证书 这里用的是腾讯云提供的免费ssl. https://console.qcloud.com/ssl?_ga=1. ...
- 用phpmailer发送邮件提示SMTP Error: Could not connect to SMTP host解决办法
之前做项目的时候做了一个用phpmailer发送邮件的功能<CI框架结合PHPmailer发送邮件>,昨天步署上线(刚开始用新浪云,嫌贵,换成阿里了),测试的时候,发送邮件却意外报错了.. ...
- snprintf 返回值陷阱 重新封装
snprintf()函数用于将格式化的数据写入字符串,其原型为: int snprintf(char *str, int n, char * format [, argument, ...]); st ...
- C# 修改DataTable列 类型 并从新赋值
DataTable dt = ds.Tables[]; DataTable dtResult = new DataTable(); //克隆表结构 dtResult = dt.Clone(); for ...
- GDAL编译
使用cmd命令行编译 1.首先在“开始菜单\所有程序\Microsoft Visual Studio 2008\Visual Studio Tools\ Visual Studio 2008命令提示” ...
- Python Django CMDB项目实战之-1如何开启一个Django-并设置base页、index页、文章页面
1.环境 win10 python 2.7.14 django 1.8.2 需要用到的依赖包:MySQLdb(数据库的接口包).PIL/pillow(处理图片的包) 安装命令: pip install ...
- toolbar ,textfield,图片拉伸,Bundle
1 工具栏 UIToolbar 2 textField 协议方法 一旦TextField成为第一响应,此方法就会调用 - (void)textFieldDidBeginEditing:(U ...