应用程序接口API(Application Programming Interface),是提供特定业务输出能力、链接不一样系统的一种约定。这里包括外部系统与提供服务的系统(中后台系统)或后台不一样系统之间的交互点。包括外部接口、内部接口,内部接口又包括:上层服务与下层服务接口、同级接口。前端
本文站在产品经理角度由浅入深讲述接口相关知识。若是不想被视为技术大佬眼中什么都不懂的需求搬运工,清楚接口的相关知识是颇有必要的。web
常见web接口是http/https协议的接口,多用于外部系统或前端系统的调用,由于此类接口地址要暴露在外部,因此必须对接口的安全性作较高程度的校验。还要一种基于开源rpc构建的跨系统接口调用接口方案,此类主要用于大公司内网各系统间的互相调用,此类接口服务治理能力更强,接口相应速度更块。如下内容以http接口为例展开的讨论。算法
1、接口请求方式类型
常见的http请求方式包括:get(查)、post(增),除此以外还有put(改)、delete(删)等。接口所属类型是由业务决定的。好比你打开淘宝,展现的首页内容就须要用到get接口,获取页面信息,你看中了宝贝要下单,添加你的收获地址时,用的则是post接口。而这两种也是其中最多见的两种接口类型数据库
1)get类型接口
格式:请求数参数写在网址后面,用”?”链接,多个参数之间用”&”链接。缓存
场景:get型接口用于获取信息,多用于查询数据,如菜单列表展现,搜索展现,订单查询,优惠券查询等须要其余系统返回数据时使用。通常状况下请求的数据量较小,返回速度快,不过接口是暴露在外面的,因此会有必定的风险。安全
2)post型接口
说明:向指定资源位置提交数据(如提交表单、上传文件)来进行请求,post请求可能会致使新资源的创建。服务器
场景:如注册、上传、发帖等功能,这种请求数据量大,安全性要求高。微信
其余接口类型如put(改)、delete(删)、patch等使用评率稍低一些,此处再也不赘述。网络
2、接口响应机制类型
从返回上区分,分为 同步接口、异步接口并发
1)同步交互
指发送一个请求,须要等待返回,而后才可以发送下一个请求,有个等待过程;
好比登陆接口,执行登陆操做时,将用户名、密码、token等字段加密后经过接口校验,须要返回验证结果后,才能登陆成功。
2)异步交互
指发送一个请求,不须要等待返回,随时能够再发送下一个请求,即不须要等待。
如用户领导优惠券,只须要将用户的领券行为请求成功,资产系统收到请求后异步操做用户发券,经过异步的方法执行发券,调用方无须等待每一个请求的调用结果。
区别:一个须要等待,一个不须要等待,在不影响用户体验的状况下,咱们的项目开发中通常会优先选择不须要等待的异步交互方式。
哪些状况建议使用同步交互呢?好比用户登陆、银行的转帐系统,对数据库的保存操做等等,都会使用同步交互操做,其他状况都优先使用异步交互。
3、接口的触发形式类型
1)分发接口
一个系统产生新数据的时候就分发给其它系统(也能够是多个)。
中台系统的核心思想是高内聚、低耦合,因此分发接口的使用场景仍是比较多的。好比有一个主渠道系统来管理全部的渠道数据,而渠道数据是其余系统如商品系统、促销系统常常要使用到的信息。因此一旦出现新的渠道或者发生渠道变动,须要分发给其余全部对接了各个系统,实现对最新渠道的功能支撑。
2)订阅接口
一个系统在须要的时候调用其余系统的接口进行数据订阅。
好比订单系统生成订单时,由于不少外部系统可能须要及时获取订单状态信息。而订单系统也不知道要分发给哪些系统,这时候通常会将订单推送至特定的消息队列,好比KFK,其余由须要跟进订单状态的的系统订阅KFK消息后,能够即便获取订单完成信息,进行触发下一个动做。
4、其余API接口基本组成
再既定的业务下,接口请求类型、响应机制等肯定后,再以微信支付API为例,了解下接口的其余组成内容。
1)应用场景
顾名思义,此接口适用于的场景,明确接口的业务用途。
2)入参及出参
入参是接口请求所须要的变量参数,其中包括必填参数和非必填参数,非必填并不是是能够忽略的,好比上面的入参中,签名类型为非必填,若是未传此参数,则默认此签名类型为MD5,若是使用的并不是此类签名类型,则此项为必填项。若是是普通订单查询,入参时间非必填,则返回结果是用户所有订单,或者用户特定时间订单的区别。
3)错误码
接口请求并不是每次都能成功,因此在接口开发时会对可能失败的状况进行错误码区分,在接口联调时能够根据返回的错误码快递定位问题。若是错误码不够全面,那在接口调用失败的时候,须要反复定位,下降开发效率。
5、接口安全性校验
接口完成业务逻辑开发后,接下来要考虑的就是安全性问题了,接口的安全性问题主要来源于几方面考虑:
1)请求来源是否合法?
即接口的假装***,由于接口是对外的,在公网环境中,接口地址是暴露的,收到的请求有多是恶意非法请求;若是真的是合法请求,也须要知道这个请求的来源,同时这个请求来源不可否认。这里引入“签名”的概念,以及签名的防假装及抗否定性特性。
近些年各大企业强制使用https替换掉原有的http接口,正是由于https所使用的的证书安全性更高。
2)请求是否会被篡改,返回数据可能会被截取
由于接口是对外的,因此接收请求和返回数据的时候,是不可能使用明文方式传输的,不然一旦被恶意截取,会形成极大风险。因此请求数据及返回数据都是须要加密的,这样即便数据被截取,也不用泄露数据的内容。这里介绍几种如今常见的加密方法。
DES(Data Encryption Standard):数据加密标准,速度较快,适用于加密大量数据的场合;
3DES(Triple DES):是基于DES,对一块数据用三个不一样的密钥进行三次加密,强度更高;
RSA:非对称加密,由 RSA公司发明,是一个支持变长密钥的公共密钥算法,须要加密的文件块的长度也是可变的;既能够实现加密,又能够实现签名。
若是是用户帐号相关,如今会使用token加密用户信息,用户请求身份信息时,服务端会分配token存在缓存中,后续请求会将token与时间戳一块儿打包加密,这样即便请求数据被截获,由于不知道token的值,数据也不会被解析出来。
3)如何防范接口的重放,防重放是什么呢?
就是把你的请求原封不动地屡次发放,请求都会经过验证进入到正常逻辑中,会形成服务端接口拥堵而且会形成实际损失。
防重放通常需在请求参数加上 时间戳 + 随机数,经过时间戳确保接口是最新的请求,而随机数相同则能够认定为是重放***。
6、接口性能相关
若是是访问量比较大的接口,再上线前确定须要进行压力测试。由于普通的开发自测和生产模拟是不能推算出高并发时候接口是否可正常运行。
1)TPS
Transaction Per Second 每秒系统处理的交易或事物的数量,衡量系统处理能力的重要指标。
2)RT
响应时间,从客户端发送一个请求开始,到客户端接收到从服务器返回的响应结果结束所经历的时间,包括请求发送时间,网络传输时间和服务器处理时间三部分。
3)吞吐量
指的是在一次性能测试过程当中网络上传输的数据量的总和。
用户的响应时间自没必要说,时间过久伤用户体验,及时处于高并发期,用户的响应时间依然须要控制到最低,通常不超过5s;
tps则是高并发的指标,通常提供服务的接口,须要考虑到最极端状况下的并发数,这些数量通常来自于运营的活动策划和往期的数据趋势预估,以此为依据,保证本身的接口能够支持最高的并发数,而验证这些使用的通常是压力测试。如正常状况下压测时tps能够达到2000时接口正常,就能够保证2000的实际并发。
7、接口须要作哪些测试
接口测试实际上是白盒测试,首页要明确系统的能力输出,明确服务覆盖是否知足需求。以业务逻辑推接口参数。
1)入参不符合要求须要有明确错误码,报错信息和日志,方便问题复现与定位。
2)若是另有参数处理逻辑的链路,也须要一并验证,如购买网易云音乐会员,订单生成后会去权益系统加权,加权成功后会有短信通知用户,但加权接口和订单信息中都没有用户手机号,因此虽然入参中没有用户手机号,但须要根据用户的username去查询手机号,并执行短信发放的操做。
其余验证目标如:代码覆盖率是否达到要求、性能指标是否知足要求、安全指标是否知足要求则是更为专业性的测试指标了。