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

  • 如果不小于,则进行下一次调用 。
  • 如果小于,则说明已经是最后一页了,可以停止后续调用了 。
  • 验证之后发现这样果然可以获取那个分类的数据,只能说明第三方的分页查询接口返回的总页数比实际情况小了 。
    10、偷偷改参数了我之前调用过某平台的API接口获取指标的状态,之前根据双方约定的状态有:正常和禁用 两种 。
    然后将状态更新到我们的指标表中 。
    后来,双方系统上线运行了好几个月 。
    突然有一天,用户反馈说某一条数据明明删除了,为什么在页面上还是可以查到 。
    此时,我查我们这边的指标表,发现状态是正常的 。
    然后查看调用该平台的API接口日志,发现返回的该指标的状态是:下架 。
    what?
    这是什么状态?
    跟该平台的开发人员沟通后,发现他们改了状态的枚举,增加了:上架、下架等多个值,而且没有通知我们 。
    这就坑了 。
    我们这边的代码中判断,如果状态非禁用状态,都认为是正常状态 。
    而下架状态,自动被判断为正常状态 。
    经过跟对方沟通后,他们确认下架状态,是非正常状态,不应该显示指标 。他们改了数据,临时解决了该指标的问题 。
    后来,他们按接口文档又改回了之前的状态枚举值 。
    11、接口时好时坏不知道你在调用第三方接口时,有没有遇到过接口时好时坏的情况 。
    5分钟前,该接口还能正常返回数据 。
    5分钟后,该接口返回503不可用 。
    又过了几分钟,该接口又能正常返回数据了 。
    这种情况大概率是第三方平台在重启服务,在重启的过程中,可能会出现服务暂时不可用的情况 。
    还有另外一种情况:第三方接口部署了多个服务节点,有一部分服务节点挂了 。也会导致请求第三方接口时,返回值时好时坏的情况 。
    此外还有一种情况:网关的配置没有及时更新,没有把已经下线的服务剔除掉 。
    这样用户请求经过网关时,网关转发到了已经下线的服务,导致服务不可用 。网关转发请求到正常的服务,该服务能够正常返回 。
    如果遇到该问题,要尽快将问题反馈给第三方平台,然后增加接口失败重试机制 。
    12、文档和接口逻辑不一致之前还遇到一个第三方平台提供的API查询接口,接口文档中明确写明了有个??dr??字段表示??删除状态?? 。
    有了这个字段,我们在同步第三方平台的分类数据时,就能够知道有哪些数据是被删除的,后面可以及时调整我们这边的数据,将相关的数据也做删除处理 。
    后来发现有些分类,他们那边已经删除了,但是我们这边却没删除 。
    这是啥情况呢?
    代码逻辑很简单,我review了一下代码,也没有bug,为什么会出现这种情况呢?
    追查日志之后发现,调用第三方平台获取分类接口时,对方并没有把已删除的分类数据返回给我们 。
    也就是说接口文档中的那个dr字段没有什么用,接口文档和接口逻辑不一致 。
    这个问题估计好多小伙伴都遇到过 。
    如果要解决这个问题,主要的方案有两种:
    1. 第三方平台按文档修改接口逻辑,返回删除状态 。
    2. 我们系统在调用分类查询接口之后,根据分类code判断,如果数据库中有些分类的code不在接口返回值中,则删除这些分类 。
    13、欠费了我们调用过百度的票据识别接口,可以自动识别发票信息,获取发票编号和金额等信息 。
    之前是另外一个同事对接的接口,后来他离职了 。
    发票识别功能上线,使用了很长一段时间,一直都没有出问题 。
    后来,某一天,生产环境用户反馈发票识别不了了 。
    我查询了相关服务的日志,没有发现异常,这就奇怪了 。
    打开代码仔细看了一下,发现那位同事的代码中调用第三方的API接口,接收响应数据时,直接转换成了对象,没有打印当时返回的字符串 。
    莫非,接口返回值有问题?
    后来,我增加了日志,打印出了该接口真正的返回内容值 。
    原因一下查到了,原来是欠费了 。
    如果出现该了异常,百度的API接口返回的数据结构,用之前那位同事的实体有些参数没法获取到 。
    这是一个不小的坑 。
    我们在接收第三方API接口返回数据时,尽可能先用字符串接收返回值,然后将字符串转换成相应实体类,一定要将该返回值在日志中打印出来,方便后面定位问题 。


    推荐阅读