如何通过重试来改进你的后端API call

无论你是从Node.js还是浏览器调用一个API Call,连接失败总是会发生。有些request的失败是有效的,也许endpoint有问题,或者客户端发送了一个错误的数据。另外一些则是连接的问题,比如连接到服务器的问题,或者是这之间的某一个节点出现了问题。虽然API和web服务检测可以看到这些问题,但是一个更好的方案也许可以处理这个问题。

解决这个问题,你可以在你的HTPP调用中假如一个重试的机制。这可以让你的API调用成功。有些库,比如got,就支持失败的重试,而另外一些库,比如axios,则需要一个独立的插件。但是假如你的库不支持这个,那么可以参考这篇文章。我们将基于返回的status来决定如何重试一个请求。

 

重试的基础

决定何时需要重试一个request,我们需要知道正在找寻什么。有很多HTTP status code可以用来检查。这样你的重试机制就根据不同的错误来进行,比如一个网络错误就是很好的重试情况,而别的,比如404错误,则不是一个很好的重试情况。我们的例子中,将会使用408,500,502,503,504,522和524.你也可以检查429,这个错误表示你可能调用了太多request。

下一个问题就是重试的频率。我们从一个小的延迟开始,然后每次都加上额外的延时。我们称之为“退避”。每次重试之间的时间都会不断增加。最终,我们还需要确定在多少次重试之后放弃。

 下面是有一个伪码的逻辑

	1. If total attempts > attempts, continue
	2. if status code type matches, continue
	3. if (now - delay) > last attempt, try request
else, return to the start

我们还会可以检测error code,并且限制在某些特定的方法中使用重试。比如,对POST不进行重试是一个很好地想法,这样可以保证不会重复创建entity。

 

递归请求的结构

要进行重试,我们就需要在请求fail的时候再次调用请求。这其实就是一个递归调用,所为递归调用就是在函数中调用自身。

比如,假如我们需要无限循环调用一个请求࿰

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值