2.1.1 开发前准备
1.确定需要哪些接口
重点是要确定每个接口的具体功能。确保这些接口是必须的,功能相互间没有交叉。
2.接口设计及细节分析
针对每一个接口确定如下事项:
(1)发送参数名、参数含义、参数数据类型、长度、精度。
(2)接收参数名、参数含义、参数数据类型、长度、精度。
接口的使用的类型变量尽量通用,特别是对使用此接口的用户一无所知情况下,对方的代码可能是Java,也可能是PHP,也可能是C#,不要使用某种编程语言的特定类型,比较好的一种方式是,参数和返回值都使用string类型,这样基本上大部分的编程语言都能支持。
(3)发送信息时的数据格式:xml格式还是json格式。
(4)网络传输时的编码格式。
虽然网络传输均是以字节的形式进行传输,但不同的编码格式生成的字节是不同的,因而需要对此进行统一。如果双方系统的编码格式不同则在进行数据处理时必须进行转码。
在确定发送数据时,还需考虑:
➢对方需要的数据自己系统是否存在,如果存在,这些数据的格式是否和对方要求的一致,不一致如何进行处理。
➢如果不存在,是在自己系统中新增这些数据还是采取什么样的变通措施。
注意:当接口根据实际需要进行调整时,要同时更新详细设计文档,保持接口详细设计的可追溯性。
3.确定数据交互的安全性
交互传输的数据中是否有敏感数据,如果有,如何处理?如果要加密,采用何种加密方式?接口是公开的还是受限定访问的?如果是受限定访问的,如何确定信息的发送方或者获取方是合法的,而不是冒仿者?
例如电子商务网站一般都会调用支付宝的接口进行付款,在传送基本的金额、通知url、用户名等信息外,支付宝为验证调用的合法性还需要传送“安全码、加密方式”等字段进行校验,以防止用户将货款付到其他人或公司的支付宝账户中。
在调用招商银行的支付接口时招商银行会限定IP,并且会用自己的客户端将发送信息按照分配的U盾进行加密处理。
4.编码
不要在程序里直接使用其他的系统的接口,最好是写一个类来封装其他系统的接口,如果其他系统的接口很多,可以专门建一个项目或包来管理这些类,这样当接口发生变化时(如接口名,接口方式),可以集中修改一个类中的函数,程序的其他地方都可以不用改,将“变化”限定在最小的范围内,将封装的优点大大地发挥出来。切忌在程序的各个地方直接调用其他系统的接口。
对于调用会产生数据交易的其他系统接口,一定要写Log,这对将来数据出错时,查找问题的根源很必要,特别是对方系统的接口没有写log时,一旦出现数据问题,往往会不知从何查起,是我们给的数据有问题,还是对方系统处理我们给的数据有问题?在最近的一个项目中,因为我们产生数据的逻辑很复杂,而对方接口收到我们产生的数据后,也会做一个很复杂数据交易动作,在系统上线初期,出现了很多莫名其妙的数据,而我们正是通过在调用对方接口时的写log数据,很快查出一些是我们生成的数据有问题,一些是对方处理数据有问题。
对接口接收过来的数据,最好进行数据校验,因为你不能保证其他系统会传给你完全符合标准的数据。对数据校验不通过的和执行失败的,最好能有清晰明了的提示返回给调用方。
5.测试
包括接口内部测试、修改和第三方的联调。
6.上线
接口正式上线,测试通过则上线成功,失败则回退,并从第4步开始新一轮的测试,直到系统上线成功。