如果第三方的 api 不稳定,比如偶尔的一次服务中断,导致请求都没有请求到数据,而且接口又比较多,请问这种情况,该怎么处理接口失效的办法?
我猜只能遇到失败进行回滚,还要对前面的 API 的效果进行补偿。
这个要看实际情况了,比如该 API 有没有写入数据的操作,API 失效是不是由超额访问引起。根据实际情况可以考虑建立一个本地的 API proxy。
这样做有几个好处
gem "retries"
用 Ruby 异常捕捉,捕捉到超时或其他的异常,用 retry 重试。
retry
retry_count = 0 begin retry_count += 1 res = Faraday.get("http://www.google.com") rescue Faraday::TimeoutError retry if retry_count <= 2 end
我的建议是 1、建立缓存机制,如果有些 api 是可以缓存的,就存起来,不用重复取,失效再获取 2、尽量用异步,因为你提到了很多个接口,不是 1、2 个接口,失败了重新再试。你 10 个接口,9 个成功了,1 个失败了,不能再把前面 9 个重新来一次吧。接口多了,就需要等待。。。异步处理多接口,用户可以不需要必须等响应。只需要对整体进度达到 100%,告诉用户成功了即可。 3、做一些接口的连接状态的判断。这个不一定存在,但我碰到过,多个服务器地址提供接口,但是我需要获得较快的接口,供系统使用。。。
大致应该还有一些方式。
再问下,你是不是跑大疆去面试啦。。。这问题他们老问,我的答案估计他们也不认。。。嘿嘿
之前对接微信某些 API 时,也是不稳定,也是使用了 retry 的方法,不过在 rescue中添加了 sleep 1,请求 API 失败,又马上再请求,或许再成功的机会也不高,sleep,命中率很高。
rescue
sleep 1