信联公共平台接口设计规范(讨论稿)

一.协议


1.【推荐】API与用户的通信协议,总是使用HTTPS协议。

二.域名


1.【强制】正式环境下API的请求地址应该使用域名,不应使用IP地址;

2.【推荐】应尽量将API部署在专用域名下,如:

https://api.example.com/

    如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下。

https://example.com/api/

三.HTTP方法


1.【强制】参数名与参数值拼装起来的URL长度小于1024个字符时,可以用GET发起请求;参数类型含byte[]类型或拼装好的请求URL过长时,必须用POST发起请求。所有API都可以用POST发起请求。

四.API命名(URI路径)


1.【强制】API 命名应该采用约定俗成的方式,保持简洁明了,uri路径包括uri参数不能出现大写字母,单词之间使用下划线(_)分割。

2.【推荐】避免层级过深的URI,尽量使用查询参数代替路径中的实体导航,如:

正例:- GET /comments/get?user_id=1234&comment_id=1  (获取用户ID为1234的评论ID为1的单个评论)

反例:- GET /users/1234/comments/1 (获取用户ID为1234的评论ID为1的单个评论)

3.【推荐】可以通过在URL路径增加(HTTP)动词来对服务器资源进行CRUD,而不是直接通过HTTP方法(GET\PUT\POST\DELETE)。如:

/gettoken  获取token

/user/get 获取用户信息

/user/create 创建用户

/user/update 更新用户

/user/delete 删除用户

/user/list 获取用户列表

五.过滤信息


1.【推荐】优雅的设计条件过滤,排序等传入参数形式;

以下是一些常见的参数:

?limit=10:指定返回记录的数量

?offset=10:指定返回记录的开始位置。

?sortby=name&order=desc:指定返回结果按照哪个属性排序,以及排序顺序。

?user_type=1:指定筛选条件

2.【推荐】对于一些常用的、复杂的查询,可以映射到一个新的API。(类似快捷方式)

如:-GET  /orders/get?status=closed&sortby=created_at&order=desc

快捷方式:-GET  /orders/get_recently_closed

3.【推荐】API支持选择查询字段的能力

说明:一些情况下,我们只需要在列表中查询几个有标识意义的字段,我们不需要从服务端把所有字段的值都请求出来,所以需要支持API选择查询字段的能力,这也可以提到网络传输性能和速度:

GET /cars?fields=manufacturer,model,id,color

六.请求参数


1.【推荐】API参数应包含公共参数和业务参数,公共参数保存通用基本的参数,每次接口调用都要传入。公共参数可参考如下:

七.返回结果


1.【强制】接口返回的数据体最少包含errcode(错误代码),errmsg(错误信息),错误代码用于错误追查,错误文本信息用于展示给用户;

八.错误处理


1.【强制】不要发生了错误但给2xx响应,客户端可能会缓存成功的http请求

2.【强制】如果状态码是4xx,就应该向用户返回错误信息,错误信息应该准确、简明、扼要,可引导用户进行下步操作。

九.签名算法


为了防止API调用过程中被黑客恶意篡改,调用任何一个API都需要携带签名,服务端根据请求参数,对签名进行验证,签名不合法的请求将会被拒绝。(具体签名算法待讨论,下面引用支付宝的签名算法作为参考)

1.筛选并排序

获取所有请求参数,不包括字节类型参数,如文件、字节流,剔除sign字段,剔除值为空的参数,并按照第一个字符的键值ASCII码递增排序(字母升序排序),如果遇到相同字符则按照第二个字符的键值ASCII码递增排序,以此类推。

2.拼接

将排序后的参数与其对应值,组合成“参数=参数值”的格式,并且把这些参数用&字符连接起来,此时生成的字符串为待签名字符串。

例如下面的请求示例,参数值都是示例,开发者参考格式即可:

REQUEST URL: https://openapi.alipay.com/gateway.do

REQUEST METHOD: POST

CONTENT:

app_id=2014072300007148

method=alipay.mobile.public.menu.add

charset=GBK

sign_type=RSA2

timestamp=2014-07-24 03:07:50

biz_content={"button":[{"actionParam":"ZFB_HFCZ","actionType":"out","name":"话费充值"},{"name":"查询","subButton":[{"actionParam":"ZFB_YECX","actionType":"out","name":"余额查询"},{"actionParam":"ZFB_LLCX","actionType":"out","name":"流量查询"},{"actionParam":"ZFB_HFCX","actionType":"out","name":"话费查询"}]},{"actionParam":"http://m.alipay.com","actionType":"link","name":"最新优惠"}]}

sign=e9zEAe4TTQ4LPLQvETPoLGXTiURcxiAKfMVQ6Hrrsx2hmyIEGvSfAQzbLxHrhyZ48wOJXTsD4FPnt+YGdK57+fP1BCbf9rIVycfjhYCqlFhbTu9pFnZgT55W+xbAFb9y7vL0MyAxwXUXvZtQVqEwW7pURtKilbcBTEW7TAxzgro=

version=1.0

则待签名字符串为:

app_id=2014072300007148&biz_content={"button":[{"actionParam":"ZFB_HFCZ","actionType":"out","name":"话费充值"},{"name":"查询","subButton":[{"actionParam":"ZFB_YECX","actionType":"out","name":"余额查询"},{"actionParam":"ZFB_LLCX","actionType":"out","name":"流量查询"},{"actionParam":"ZFB_HFCX","actionType":"out","name":"话费查询"}]},{"actionParam":"http://m.alipay.com","actionType":"link","name":"最新优惠"}]}&charset=GBK&method=alipay.mobile.public.menu.add&sign_type=RSA2&timestamp=2014-07-24 03:07:50&version=1.0

3.调用签名函数

使用各自语言对应的SHA256WithRSA(对应sign_type为RSA2)或SHA1WithRSA(对应sign_type为RSA)签名函数利用私钥对待签名字符串进行签名,并进行Base64编码。

4.把生成的签名赋值给sign参数,拼接到请求参数中。

十.其他


1.API的身份认证应该使用OAuth2.0框架。

2.服务器返回的数据格式,应该尽量使用JSON,避免使用XML。

3.所有的请求和响应数据编码皆为utf-8格式。

4.所有的请求和响应数据参数命名应为小写字母,单词拼接使用下划线(_)。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,652评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,623评论 18 399
  • 支付宝简介文档 (适用于ydm-java接口与后台,如有误入,但愿也能给您带来帮助) 此文档写于2017年3月,只...
    隔壁付叔叔阅读 17,068评论 3 19
  • Business Typical Marriott Courtyard hotel with reception ...
    annzhou阅读 121评论 0 0
  • 《节韵》 一朝佳节千里外 纵有思念却不还 云高峰远志四方 吾辈归来奏旋歌 《无题》 云沉雾浓前路渺 唯...
    彼陌澜馨阅读 197评论 0 0