Php 向api调用添加重试功能的好方法?

Php 向api调用添加重试功能的好方法?,php,Php,我有一个api类来联系REST api进行邮件列表管理。它包括subscribe(),unsubscribe(),update()等方法 在我的客户机代码中,我有如下行 Api::subscribe($email, array(..)); 由于偶尔出现故障,我们希望为每个调用添加重试功能。如果第一次呼叫失败,我们希望在最终放弃之前再重试一次或两次 要做到这一点,最直接的方法是 public static function subscribe($email, array $lists ) {

我有一个api类来联系REST api进行邮件列表管理。它包括
subscribe()
unsubscribe()
update()
等方法

在我的客户机代码中,我有如下行

Api::subscribe($email, array(..));
由于偶尔出现故障,我们希望为每个调用添加重试功能。如果第一次呼叫失败,我们希望在最终放弃之前再重试一次或两次

要做到这一点,最直接的方法是

public static function subscribe($email, array $lists ) {
  $success = FALSE;
  $retries = 3;
  while ( ! success && retries > 0 ) {
    // API call goes here
    $retries--;
  }
}
冲洗并重复每种方法

为了(不要重复你自己),我想知道是否有一种很好的设计模式的方法,可以在重试时包装调用,而不必为每个方法重复while循环

如果不是,简单的方法是最合适的,那就好了。我只是想看看有没有更好的办法,我不知道

public function retry($apiCall, $retries) {
    $success = false;
    while (!$success && $retries > 0 ) {
        $success |= $apiCall();
        $retries--;
    }
}

public static function subscribe($email, array $lists) {
  retry(function() {
    // your API call here
  }, 3);
}
您只需构造一个匿名函数,并将匿名函数传递给处理重试的代码。显然,这应该更详细一点,以允许返回值(可以非常简单地添加)或可观察到

使其可见的一种方法是通过传递回调:

public function retry($apiCall, $retries, $callback) {
    $success = false;
    while (!$success && $retries > 0 ) {
        $success |= $apiCall();
        $retries--;
    }
    $callback($success);
}

您只需传递执行通知的正确回调。根据您的具体需要,您可以通过传递有关事件类型、故障类型、重试次数等更详细的参数来对此进行扩展。

非常感谢您的帮助?您可以链接到任何关于使此可观察的提示吗?您可以使其可观察,就像使任何其他操作可观察一样:通过允许注册和通知回调或侦听器。感谢添加回调代码。这有点超出我的理解。有不同的方法来实现这一点,但在我们的例子中,我们是在HTTP客户端级别实现的。这非常简单,因为它是最了解协议的层。