论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
程序人生
›
我调用第三方接口遇到的13大坑
我调用第三方接口遇到的13大坑
十念
金牌会员
|
2023-4-20 22:22:55
|
显示全部楼层
|
阅读模式
楼主
主题
829
|
帖子
829
|
积分
2487
前言
在实际工作中,我们经常需要在项目中调用第三方API接口,获取数据,或者上报数据,进行数据交换和通信。
那么,调用第三方API接口会遇到哪些问题?如何解决这些问题呢?
这篇文章就跟大家一起聊聊第三方API接口的话题,希望对你会有所帮助。
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了?
想法是不错,但是有问题。
你咋保证,你们系统的服务器时间,跟第三方平台的服务器时间一模一样?
我之前遇到过某大厂,提供了获取token接口,在30天内发起请求,每次都返回相同的token值。如果超过了30天,则返回一个新的。
有可能出现这种情况,你们系统的服务器时间要快一些,第三方平台的时间要慢一些。结果到了30天,你们系统调用第三方平台的获取token接口获取到了token还是老的token,更新到redis中了。
过一段时间,token失效了,你们系统还是用老的token访问第三方平台的其他API接口,一直都返回失败。但获取新的token却要等30天,这个时间太漫长了。
为了解决这个问题,需要捕获token失效的异常。如果在调用其他的API接口是发现token失效了,马上请求一次获取token接口,将新的token立刻更新到redis中。
这样基本可以解决token失效问题,也能尽可能保证访问其他接口的稳定性和性能。
6 接口超时
系统上线之后,调用第三方API接口,最容易出现的问题,应该是接口超时问题了。
系统到外部系统之间,有一条很复杂的链路,中间有很多环节出现问题,都可能影响API接口的相应时间。
作为API接口的调用方,面对第三方API接口超时问题,除了给他们反馈问题,优化接口性能之外,我们更有效的方式,可能是增加接口调用的失败重试机制。
例如:
[code]int retryCount=0;do { try { doPost(); break; } catch(Exception e) { log.warn("接口调用失败") retryCount++; }} where (retryCount
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
十念
金牌会员
这个人很懒什么都没写!
楼主热帖
Velero系列文章(四):使用Velero进行 ...
微光互联 TX800-U 扫码器无法输出中文 ...
三天吃透Kafka面试八股文
Kali Linux利用MSF入侵安卓手机(小白版 ...
【图书管理系统】Servlet+JSP+MySql 实 ...
C/C++函数的调用约定详解
SonarQube安全扫描
Java多线程(一篇从0讲透)
xmrig挖矿样本分析 miner
Android Studio 实现登录注册-源代码 ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表