我构建了一个使用Bigcommerce PHP SDK访问其API的应用程序。在我的应用程序的各个部分中,我使用SDK中的方法来执行各种任务。例如,如果我需要从客户的商店购买产品,我会在我的脚本中写下以下内容:
Bigcommerce::getProduct(123);
其他时候,我可能需要获得订单,少量订单或产品,或编辑产品。阅读Bigcommerce API的文档说明他们会对限制通话率进行评级,如果达到限制,他们会回复一个错误代码,提醒您在进行下一次API调用之前必须等待一定的秒数。你可以在这里阅读(https://developer.bigcommerce.com/api/rate-limits/basic)。
遵循这些速率限制的一种方法是在我调用Bigcommerce API的应用程序中的每个位置后添加类似以下代码的内容:
$product = Bigcommerce::getProduct(123);
if(!$product){
if(Bigcommerce::getLastError()->code == 429){
sleep(Bigcommerce::connection()->getHeader("X-Retry-After"));
//get the product again
$product = Bigcommerce::getProduct(123);
}
}
然而,每当我调用API时,这很快就会成为管理的巨大痛苦。我的问题是,我应该编写自己的函数来处理调用API,它具有内置的速率限制检查。类似的东西:
function callBigcommerceApi($method, $args)
{
$response = Bigcommerce::$method($args);
if(!$response){
if(Bigcommerce::getLastError()->code == 429){
sleep(Bigcommerce::connection()->getHeader("X-Retry-After"));
callBigcommerceApi($method, $args);
}
else{
return $response;
}
}
}
或者,我应该以某种方式将这样的函数集成到SDK本身中,以便随时调用SDK中的任何方法,它将受速率限制并知道如何处理它?</ p>