通用接口标准规范v1
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
通⽤接⼝标准规范v1…
接⼝标准规范
⽬录
接⼝标准规范 (1)
第1章概述 (3)
第2章基本要求 (4)
信息通讯安全 (4)
;
安全评估 (4)
访问控制 (4)
防恶意代码 (4)
加密 (5)
⽀持⾼并发 (6)
可监控 (6)
⽇志全覆盖 (6)
系统资源的动态扩展 (6)
,
异常处理机制 (7)
业务扩展 (7)
第3章接⼝通讯⽅式 (7)
同步请求/应答⽅式 (7)
异步请求/应答⽅式 (7)
会话⽅式 (7)
⼴播通知⽅式 (7)
事件订阅⽅式 (7)
·
⽂件传输 (8)
可靠消息传输 (8)
第4章传输控制要求 (8)
负载均衡 (8)
伸缩性与动态配置管理 (8)
⽹络调度 (9)
充分理由 (9)
单⼀职责 (9)
)
⾼内聚低耦合 (9)
状态及消息 (10)
控制数据量 (10)
禁⽌随意拓展参数 (10)第5章接⼝技术 (10)
第6章接⼝规范 (11)
域名规范 (11)
http接⼝ (11)
…
webservice接⼝ (11) API路径规范 (11)
http接⼝ (11) webservice接⼝ (11)
版本控制规范 (12)
http接⼝ (12) webservice接⼝ (12) API命名规范 (12)
~
新增⽅法 (13)
删除⽅法 (13)
修改⽅法 (13)
获取⽅法 (13)
获取列表⽅法 (13)
请求参数规范 (14)
参数需要命名规则 (14)请求参数加密⽅法 (14) `
列表请求特殊规范 (15)返回数据规范 (15)
第7章接⼝⽂档规范 (16)第8章接⼝管理 (16)
对接⼝分类、编码排序。
(16)
在线⽂档。
(16)
…
$
第1章概述
本⽂主要为了明确标准和规范,为服务使⽤⽅和服务提供⽅提供开发参考。
/
第2章基本要求
为了保证系统的完整性和健壮性,系统接⼝应满⾜下列基本要求:
2.1信息通讯安全
2.1.1安全评估
保证接⼝的⾃⾝安全,通过接⼝实现技术上的安全控制,做到对安全事件的“可知、可
控、可预测”,是实现系统安全的⼀个重要基础。
2.1.2访问控制
,
如果客户端很频繁的请求服务器,会给给服务器造成很⼤的压⼒,需要对客户端对API的请求做⼀些限制。
⽐如单位时间内同⼀IP只能请求多少次。
2.1.3防恶意代码
2.1.
3.1⽤户名sql注⼊
例如:⽤户名sql注⼊登录名输⼊:lilei'#
select *from student where user='lilei' and psd='123456'
sql语句就变成了select *from student where user='lilei'#'and psd='123456'(#/--后⾯的内容都会被注释掉)
2.1.
3.2跨站脚本
例如脚本攻击测试:
@
命令注⼊:PHP提供部分函数⽤来执⾏外部应⽤程序
异常字符测试:结束符、换⾏符,针对字符串,在中间插⼊特殊字符,⽐如结束符等,服务端没有进⾏验证
1、调⽤可执⾏的系统命令函数。
2、函数活着函数的参数控制。
3、拼接注⼊命令。
命令注⼊:PHP提供部分函数⽤来执⾏外部应⽤程序
异常字符测试:结束符、换⾏符,针对字符串,在中间插⼊特殊字符,⽐如结束符等,服务端没有进⾏验证
[
1、调⽤可执⾏的系统命令函数。
2、函数活着函数的参数控制。
3、拼接注⼊命令。
2.1.4加密
2.1.4.1接⼝调⽤⽅和接⼝提供⽅约定好统⼀的参数加密算法。
(加密⽅法参照接⼝规范的请求参数规范)
2.1.4.2接⼝调⽤⽅在调⽤时把加密后的_sign放在参数中去请求接⼝。
2.1.4.3接⼝提供⽅接到响应后,判断时间戳是不是在有效时间内(这个时间间隔根据
你的安全范围可以是10分钟,5分钟,20秒等,过期失效,前提是需要保证
接⼝提供⽅和调⽤⽅的服务器时间为准确的⽹络同步时间)。
2.1.4.4】
2.1.4.5把参数中除了_sign以外的参数进⾏加密,然后把加密结果和传过来的_sign⽐较,
相同则执⾏调⽤请求。
2.1.4.6如果服务器和客户端的时间没有同步,可以返回错误的同时候在返回⼀个服务
器的当前时间,客户端接收到该错误后再请求上⼀个接⼝,时间则传服务器刚
刚返回的时间。
2.1.4.7涉及到⽐较重要的信息,可以⽤AES对value进⾏加密,防⽌抓包拉取到上传
的数据。
2.2⽀持⾼并发
根据实际情况选择合适的⽅式⽅法来实现,可动态通过集群节点进⾏扩展。
例如:Java的并发包提供了三个常⽤的并发队列实现,分别是:ArrayBlockingQueue、ConcurrentLinkedQueue 和LinkedBlockingQueue
2.3可监控
2.3.1.
2.3.2⽇志全覆盖
2.3.2.1正常运⾏信息
2.3.2.2异常捕获信息
2.3.2.3⽇志打印规范
满⾜运维需求、⽇志格式统⼀规范。
2.4系统资源的动态扩展
保证在充分利⽤系统资源的前提下,实现系统平滑的移植和扩展,同时在系统并发增加时提供系统资源的动态扩展,以保证系统的稳定性。
2.5异常处理机制
\
表单验证、唯⼀性检查、或其他可预期的错误。
我们需要编写特定代码来捕获这类错误,并抛出⼀个包含提⽰信息的全局异常,捕获并返回给客户端。
2.6业务扩展
在进⾏新业务扩展时,应能提供快速、⽅便和准确的实现⽅式。
第3章接⼝通讯⽅式
3.1同步请求/应答⽅式
客户端向服务器端发送服务请求,客户端阻塞等待服务器端返回处理结果。
3.2异步请求/应答⽅式
客户端向服务器端发送服务请求,与同步⽅式不同的是,在此⽅式下,服务器端处理请求时,客户端继续运⾏;当服务器端处理结束时返回处理结果。
3.3?
3.4会话⽅式
客户端与服务器端建⽴连接后,可以多次发送或接收数据,同时存储信息的上下⽂关系3.5⼴播通知⽅式
由服务器端主动向客户端以单个或批量⽅式发出未经客户端请求的⼴播或通知消息,客户端可在适当的时候检查是否收到消息并定义收到消息后所采取的动作
3.6事件订阅⽅式
客户端可事先向服务器端订阅⾃定义的事件,当这些事件发⽣时,服务器端通知客户端事件发⽣,客户端可采取相应处理。
事件订阅⽅式使客户端拥有了个性化的事件触发功能,极⼤⽅便了客户端及时响应所订阅的事件
3.7⽂件传输
客户端和服务器端通过⽂件的⽅式来传输消息,并采取相应处理
3.8】
3.9可靠消息传输
在接⼝通讯中,基于消息的传输处理⽅式,除了可采⽤以上⼏种通讯⽅式外,还可采⽤可靠消息传输⽅式,即通过存储队列⽅式,客户端和服务器端来传输消息,采取相应处理
第4章传输控制要求
传输控制利⽤⾼速数据通道技术实现把前端的⼤数据量并发请求分发到后端,从⽽保证应⽤系统在⼤量客户端同时请求服务时,能够保持快速、稳定的⼯作状态。
系统应采⽤传输控制⼿段降低接⼝⽹络负担,提⾼接⼝吞吐能⼒,保证系统的整体处理能⼒。
具体⼿段包括负载均衡、伸缩性与动态配置管理、⽹络调度等功能:
4.1%
4.2负载均衡
有必要时为了确保接⼝服务吞吐量最⼤,接⼝应⾃动地在系统中完成动态负载均衡调度。
4.3伸缩性与动态配置管理
由系统⾃动伸缩管理⽅式或动态配置管理⽅式实现队列管理、存取资源管理,以及接⼝应⽤的恢复处理等。
4.4⽹络调度
当对接⼝有较⾼通讯保障要求时可能会在在双⽅接⼝之间设置多个⽹络通道,需要实现接⼝的多数据通道和容错性,保证当有⼀⽹络通道通讯失败时,进⾏⾃动的切换,实现接⼝连接的⾃动恢复。
4.4.1.1接⼝设计原则
4.5充分理由
、
不是随便⼀个功能、需求就要加个接⼝。
每新建⼀个接⼝,就要有充分的理由和考虑,即这个接⼝的存在是⼗分有意义额价值的,⽆意义的接⼝不仅增加了维护的难度,更重要是对于程序的可控性的⼤⼤降低,接⼝也会⼗分臃肿。
4.6单⼀职责
⼀个接⼝只负责⼀个业务功能。
4.7⾼内聚低耦合
⼀个接⼝要包含完整的业务功能,⽽不同接⼝之间的业务关联要尽可能的⼩。
还是查询会员的例⼦,有时查询会员的同时,可能该会员的相关信息要随之发⽣变化(如状态),如果这时⼀条完整的业务流⽔线,那么就应该在⼀个接⼝⾥完成,⽽不应再单独设⽴接⼝去操作完成。
就是说⼀个接⼝不应该随着另⼀个变化⽽变化或以某⼏个接⼝为前提⽽存在。
4.8&
4.9状态及消息
提供必要的接⼝调⽤状态信息。
调⽤是否成功如果失败,那么失败的原因是什么。
这些必要的信息必须要告诉给客户端。
提供必要的接⼝调⽤状态信息。
调⽤是否成功如果失败,那么失败的原因是什么。
这些必要的信息必须要告诉给客户端。
4.10控制数据量
⼀个接⼝返回不应该包含过多的数据量,过多的数据量不仅处理复杂,对数据传输的压⼒也⾮常⼤,会导致客户端反应缓慢。
过多的数据量很多时候都是接⼝划分不明确。
4.11禁⽌随意拓展参数
拓展接⼝可能是难以避免的,但是不要随意就加参数,加参数⼀定是必要且有意义的,需求改变前⾸先应考虑现有接⼝内部维护是否能满⾜需求,⽽不要通过加个参数来⽅便⾃⼰实现需求的难度,因为参数的更变会直接导致客户端调⽤的变化,容易产⽣版本兼容性问题。
第5章接⼝技术
主要使⽤的接⼝技术的有webService和http。
第6章^
第7章接⼝规范
7.1域名规范
每个项⽬要有且仅有⼀个⾃⼰唯⼀的域名(或ip地址)+端⼝。
如果⼀个域名(或ip地址)满⾜不了要求,那么就需要再添加⼀个。
7.1.1http接⼝
格式规范如下:
“;
“;
7.1.2webservice接⼝
'
格式规范如下:
,必须在路径中添加api⽬录
格式规范如下:
“;
必须以字母开头,并以“/”结尾。
7.1.3webservice接⼝
因为webservice本⾝就是专门做接⼝⽤的技术所以接⼝路径可以不⽤添加【api/】⽤来区分接⼝路径。
例如:,正式版本要确定接⼝版本、并备份接⼝代码。
)
为⽅便管理,需要在接⼝路径中加⼊版本号信息。
7.1.4http接⼝
格式规范如下:
”;
必须以字母开头,并以“/”结尾。
更新版本后可以使⽤v2 v3等、依次递加。
7.1.5webservice接⼝
Webservice的接⼝对应函数命名格式采⽤⼩驼峰式⽅式命名,在函数名的最后加上版本V1。
更新版本后可以⽤V2、V3等、依次递加。
\
7.2API命名规范
根据域名规范、API路径规范和版本控制规范。
Api地址值等于三个相加。
格式规范如下:
“接⼝⽅法必须要有⾃⼰的规范,命名必须统⼀使⽤⼩驼峰命名法。
⽐如:(upperCamelCase)。
所有接⼝命名⽅式,必须遵循如下规范。
7.2.1新增⽅法
如新增⼀个地址、新增⼀个联系⼈。
命名规范:
;
必须以“add”为前缀。
例如addAddress
7.2.2事例地址:
如获取⼀个地址。
命名规范:
必须以“get”为前缀。
例如getAddress
7.2.3请求参数加密⽅法
!
1)对除签名外的所有请求参数按key做的升序排列,value⽆需编码。
(假设当前时间的时间戳是)
例如:有c=3,b=2,a=1 三个参,另加上时间戳后,按key排序后为:a=1,b=2,c=3,_timestamp=。
2)把参数名和参数值连接成字符串,得到拼装字符:a1b2c3_timestamp
3 )⽤申请到的appkey连接到接拼装字符串尾部,然后进⾏32位MD5加密,最后将到得MD5加密摘要转化成⼤写。
(如果没有appkey则不需要拼接,需要加密盐时另⾏约定告知)⽰例:假设appkey=test,md5(a1b2c3_timestamptest),取得MD5摘要值C5F3EB5D7DC2748AED89E90AF00081E6 。
最后访问连接参照 C5F3EB5D7DC2748AED89E90AF00081E6
7.3列表请求特殊规范
列表请求,请求参数规范,必须传参:页数和每页个数的字段。
并可包含查询等信息。
{
1. 列表接⼝必传字段(分页、使⽤⼩写字母)。
page :页数,从1开始。
例如:{ “page”: 1 }
subnumber : 每页数量。
2. 列表接⼝选传字段。
只要是列表接⼝、⼀般情况下都会存在检索条件,例如淘宝商品检索。
检索条件为选填。
后台需进⾏⾮空⾮null判断,选传字段为空为null默认查询全部。
有值则需要接收,并进⾏sql查询。
规范事例:
普通列表接⼝:,不传就不检索,只进⾏分页查询)
(如果有时间、价格等检索条件,不传就不检索,传了就进⾏条件查询,并返回相应数据)7.4返回数据规范
注:列表数据返回,没有特殊情况的条件下,必须最新数据在上⾯,依次排序。
返回事例:
{
"list":[],
"object":{}, .
"page":1,
"subnumber":10,
}
必选-命名规范:⼩驼峰命名法。
必选-新增键值规则:名字对应固定的格式(list就是数组[])。
⽐如:⽐如⼀个"list":[]满⾜不了需求,那么可以新增⼀个"map":[]。
⽐如如⼀个"object":{"name":"⼩明"}满⾜不了需求,那么可以新增⼀个"details":{"name":"⼩红"}。
名字对应固定的格式,数组就是数组、实体类就是实体类、字段就是字段。
不能data在这个接⼝返回的是实体类、另⼀个接⼝⼜返回数组了。
第8章接⼝⽂档规范
接⼝⽂档需要包含以下部分:
⽂档名称。
版本号。
编写⼈。
编写、修改⽇期。
baseUrl地址(例如例如:例如:POST、GET等
3.请求参数
4.返回参数例如:{ json... } 参考上⾯的接⼝规范
第9章接⼝管理9.1对接⼝分类、编码排序。
9.2在线⽂档。
⽐如⽐较常⽤的有Swagger、Blueprint、eolinker。