暂态API失败时的后备

时间:2012-01-23 作者:Noel Tock

我正试图找出如何最好地解决第三方API(OG、Foursquare、Yelp等)的问题。我使用瞬态API调用和存储各种数据,以便:

但是,不得超过任何API限制,the issue arises when a new API call errors out 无论出于何种原因;要么连接有问题,要么API本身坏了(hello foursquare)。这会导致一种情况,即您没有新数据,而旧数据超时(这本质上是触发新瞬态生成的原因)。你如何处理这种情况?

这个solution I have in mind 是在刷新函数中创建一个静态选项,用于存储成功的响应或在错误时显示最后一个成功的响应,例如:

<?php

function refresh_api_data() {

... perform API call ...

if ( $response->status == \'error\' ) {
     $response = get_option( \'fallback_data\' );
} else {
     update_option( \'fallback_data\', $response );
}

return $response;

}

?>
这有意义吗,还是有人想到了一个更优雅的解决方案?

非常感谢。

3 个回复
最合适的回答,由SO网友:Otto 整理而成

Mark Jaquith提出了一种“TLC瞬态”方法,您可能会发现它很有用。本质上,它实现了一个临时接口,可以进行软过期和后台更新。

https://github.com/markjaquith/WP-TLC-Transients

其思想是定义一个函数来执行获取数据的调用,然后定义瞬态并将该函数作为回调传递给它。当您进行此调用时,它将在必要时获取数据并返回数据,并在定义的时间段内将其存储在瞬态中。“软”更新意味着它总是立即返回缓存的数据,并使更新在事实发生之后在后台进行(使用wp cron作业)。

这还有一个优点,就是在成功更新之前,始终返回“旧”数据。他的代码处理这一问题的方式是,如果由于任何原因检索数据失败,则使回调函数引发异常。

SO网友:Rob Vermeer

您可以使用长超时设置另一个成功的瞬态。然后,如果第一次出现错误,您将有备份瞬态。如果成功,两个瞬态都会得到更新。

这和你的想法很相似,所以我认为你可以走任何一条路。

SO网友:tollmanz

我倾向于做以下事情:

1) 在后端事件或计划上生成数据。瞬态的持续时间比我预期的刷新时间长得多。我还使用add_option 将选项设置为“不自动加载”时。如果API调用出错,我就不再设置数据,也不会触及旧数据。

2) 在显示器上,检查瞬态。如果存在瞬态,则显示瞬态。如果没有,请从选项中提取它,显示它,然后将其放回缓存中,以便将来的请求从缓存中提取。我使用这种方法是因为有时在memcached环境中,瞬态会被逐出。我可以从选项中提取数据,而不是再次运行繁重的请求。

结束

相关推荐

如果自定义管理页面未挂钩到ADD_OPTIONS_PAGE(),则不会显示设置API已更新消息

一直在使用设置API,发现只有通过add\\u options\\u page()将设置页面连接到WordPress菜单时,才会显示消息(用于成功或错误)。其他任何操作都不起作用,例如add\\u dashboard\\u page()。想知道这是不是真的?我尝试使用的示例代码是包含“RegisteredSettingsTest”类的答案Where to hook register_settings for Settings API when also want to update options out