我调用第三方接口遇到的13大坑


我调用第三方接口遇到的13大坑

文章插图
前言在实际工作中,我们经常需要在项目中调用第三方API接口,获取数据,或者上报数据,进行数据交换和通信 。
那么,调用第三方API接口会遇到哪些问题?如何解决这些问题呢?
这篇文章就跟大家一起聊聊第三方API接口的话题,希望对你会有所帮助 。
我调用第三方接口遇到的13大坑

文章插图
1、域名访问不到一般我们在第一次对接第三方平台的API接口时,可能会先通过浏览器或者postman调用一下,该接口是否可以访问 。
有些人可能觉得多次一举 。
其实不然 。
有可能你调用第三方平台的API接口时,他们的接口真的挂了,他们还不知道 。
还有一种最重要的情况,就是你的工作网络,是否可以访问这个外网的接口 。
有些公司为了安全考虑,对内网的开发环境,是设置了防火墙的,或者有一些其他的限制,有些ip白名单,只能访问一些指定的外网接口 。
如果你发现你访问的域名,在开发环境访问不通,就要到运维同学给你添加ip白名单了 。
2、签名错误很多第三方API接口为了防止别人篡改数据,通常会增加数字签名(sign)的验证 。
sign = md5(多个参数拼接 + 密钥)
在刚开始对接第三方平台接口时,会遇到参数错误,签名错误等问题 。
其中参数错误比较好解决,重点是签名错误这个问题 。
签名是由一些算法生成的 。
比如:将参数名和参数值用冒号拼接,如果有多个参数,则按首字母排序,然后再将多个参数一起拼接 。然后加盐(即:密钥),再通过md5,生成一个签名 。
如果有多个参数,你是按首字母倒序的,则最后生成的签名会出问题 。
如果你开发环境的密钥,用的生产环境的,也可能会导致生产的签名出现问题 。
如果第三方平台要求最后3次md5生成签名,而你只用了1次,也可能会导致生产的签名出现问题 。
因此,接口签名在接口联调时是比较麻烦的事情 。
如果第三方平台有提供sdk生成签名是最好的,如果没有,就只能根据他们文档手写签名算法了 。
3、签名过期通过上面一步,我们将签名调通了,可以正常访问第三方平台获取数据了 。
但你可能会发现,同一个请求,15分钟之后,再获取数据,却返回失败了 。
第三方平台在设计接口时,在签名中增加了时间戳校验,同一个请求在15分钟之内,允许返回数据 。如果超过了15分钟,则直接返回失败 。
这种设计是为了安全考虑 。
防止有人利用工具进行暴力破解,不停伪造签名,不停调用接口校验,如果一直穷举下去的话,总有一天可以校验通过的 。
sign = md5(多个参数拼接 + 密钥 + 时间戳)
因此,有必要增加时间戳的校验 。
如果出现这种情况,不要慌,重新发起一次新的请求即可 。
4、接口突然没返回数据如果你调用第三方平台的某个API接口查询数据,刚开始一直都有数据返回 。
但突然某一天没返回数据了 。
但是该API接口能够正常响应 。
不要感到意外,有可能是第三方平台将数据删除了 。
我对接完第三方平台的API接口后,部署到了测试环境,发现他们接口竟然没有返回数据,原因是他们有一天将测试环境的数据删完了 。
因此,在部署测试环境之前,要先跟对方沟通,要用哪些数据测试,不能删除 。
5、token失效有些平台的API接口在请求之前,先要调用另外一个API接口获取token,然后再header中携带该token信息才能访问其他的业务API接口 。
在获取token的API接口中,我们需要传入账号、密码和密钥等信息 。每个接口对接方,这些信息都不一样 。
我们在请求其他的API接口之前,每次都实时调用一次获取token的接口获取token?还是请求一次token,将其缓存到redis中,后面直接从redis获取数据呢?
很显然我们更倾向于后者,因为如果每次请求其他的API接口之前,都实时调用一次获取token的接口获取token,这样每次都会请求两次接口,性能上会有一些影响 。
如果将请求的token,保存到redis,又会出现另外一个问题:token失效的问题 。
我们调用第三方平台获取token的接口获取到的token,一般都有个有效期,比如:1天,1个月等 。
在有效期内,该API接口能够正常访问 。如果超过了token的有效期,则该API接口不允许访问 。
好办,我们把redis的失效时间设置成跟token的有效期一样不就OK了?


推荐阅读