请求外部接口的一些注意事项

/

在实际的程序开发过程中,难免会接入一些三方服务,比如用户注册的时候,调用三方的短信服务,又或者是使用微信的账户体系简化注册流程。针对不同的服务,可能注意点会不一样,但是大致都差不多

按照接口的提供者,是否收费我们通常会需要不同的策略去接入这些三方服务

云服务商

通常基础类接口服务,一般各大云服务器都会作为自己的产品去维护,因为这个量大,且有很大的利润空间,比如

  • 短消息服务
  • 一键登录
  • 存储服务
  • 消息队列
  • 推送服务
  • OAuth 服务
  • 多媒体服务
  • 支付/分账服务
  • 直播服务

三方服务商

一般第三方服务通常是一些特定业务情况下的,业务需求没有稳定使用情况,但公司不愿意去对接原始数据,或者原始接入投入太大,所以就会这种负责数据的公司,针对各种业务需求,去接对应的原始数据源,或者是自己研发工具类接口,比如

  • 实名信息验证(两 / 三要素)
  • 短连接服务
  • 银行信息
  • 地图服务
  • 敏感词过滤
  • 二维码识别
  • 手机号码归属地信息
  • 人脸识别

通常接入的三方服务,大部分都是按量付费使用的,基本没有免费的,因为提供额外的服务通常都是成本,所以及时免费也是要自己折腾,或者是自己去搭建相应的服务,耗时耗力,且不能保证稳定,比如:转码服务,自己是可以搭建,但是如果使用量低,可能覆盖不了服务器本身的成本,且自建很难保证可用性

关于选择云服务的服务还是三方服务的问题,主要考虑三点,稳定性,价格,执行效率

如果是基础服务,比如短信验证码这种属于核心服务,我们应该优先考虑,稳定和执行效率,其次考虑成本问题。
对于要求实时性要求不高,可以考虑价格低的,但是稳定的,就可以不追求执行效率,只用保障在使用的时候能保障出结果的,比如转码服务
对于第三方服务提供的,应该根据实际情况,选择合适服务商,也可以考虑接入多个服务商的同类型的服务,来提高服务的可用性

账单问题

通常基本都是按量收费,不过也 分预付费和后付费额,针对这两张类型的账单,都应该留意购买的额度和账户余额,避免因为欠费或者额度不足导致的服务不可用

巡查账单

  • 有些购买的服务有可能存在有效期,比如从购买日起1年内有效
  • 业务量激增,导致额度使用过快

留意云服务商的通知 短信 / 电话 / 邮件

  • 一般都会提前发送短信,通常收到相关的通知后,就及时处理账单问题

自己加入备忘录,主动处理

  • 通过手机系统的待办事项
  • 办公软件的备忘录,比如 钉钉/企业微信 的提醒
  • 自建 server bot,比如 Server酱 这种

服务质量

执行效率,服务可用性,服务的准确性,基本这三个维度就能衡量这个服务的质量,一般这个问题发生在三方服务商的服务里面,通常云服务商都会针对自己的服务提供 SLA 的方案,或者监控系统,且通常使用量大,一般不存在太差的质量问题,不过针对三方服务,在接入后,应该观察这个服务上面提到3个维度。

执行效率

较为简单,只用按照接入的方式来监控就行了,如果是 Http 接入的,这种较为简单,记录服务调用用的时间就可以了,如果是 SDK 接入的也差不多,都可以直接记录执行时间,只是要注意一点,如果能按照标准 Http 接入的,可以优先使用 Http 接入,因为 Http 协议相对完善,且可以全局记录,监控。

可用性(准确性)

这个就比较难评估了,通常是需要人为去观察数据结果是否准确,比如一个地图服务,这个在上线前和上线后都应该留意,否则可能因为第三方服务的质量不行,导致应用服务的可用性不行

缓存的时机

在接入了三方服务后,我们加入适当的缓存可以有效的提高我们自身服务的服务质量,但是考虑到缓存存在结果的不准确性,我们应该考虑到缓存的有效期和是否缓存异常结果

有效期

针对不同的场景,需要使用不同的有效期,比如已经是一个确定的结果,我们可以考虑使用一个较长的有效期,比如 姓名和身份信息,提取的二维码的结果

是否缓存异常结果

有些情况下,比如三方服务已经提供一个结果后,及时是一个错误的结果,我们也应该将起缓存下来,避免重复执行导致的不必要的花费,或者导致额度被快速使用完后,导致其他用户也无法正常使用了

审计

一般云服务商的提供服务,都提供了完善的调用记录得,主要用于对账和异常处理,所以我们更多关心的是第三方服务的,如果有完善的审计我们可以大致知道一段时间内的使用量,又或者是这个三方服务是否稳定

自建数据聚合平台

这个针对服务较多,且使用大情况下,搭建一套自己的数据平台的确更好,不过应该考虑实际的维护成本和程序的稳定性,因为多了一个中间件了

异常处理

通常第三方接口对外提供服务都会使用 HTTP 的,我们按照对应的接口的规则接入就可以了,但是要注意一点,我们需要考虑接口异常是使用 http 状态码,还是都返回 200,在消息体里面使用 error 的方式,无论使用哪种方式,我们都应该异常的情况捕捉清楚,避免一旦走上了异常后,出现一些未预期的情况,比如没有给客户一个相对准确的提示

是否考虑备用服务,我们可以针对一些高频接口,我们可以考虑接入多个服务商的服务,出现异常的情况,可以考虑使用另外一个服务商提供的服务来顶替。或者在实际工作情况下,就是多个同类型的服务(不同服务商的)可以随机选择,且一个服务异常了就自动切换到另外一个的,来尽可能的提高基础服务的稳定性

总结

本文简单梳理了下,接入三方服务的常见问题,和一些注意点,希望能帮助大家,在接入三方服务的时候,能选择最合适的当前环境下的业务需求

转载请注明作者和出处,并添加本页链接。
原文链接: //xiaochun.zrlog.com/request-external-api-notes.html