文件服务器上的 Podio 速率限制
Podio RateLimit on Fileserver
我们的跑道有问题 Api 或者有什么,跑道没有记录。
我们正在向 Api 发出请求,以获取具有功能 ->getItemById()
的项目。此项目具有文件字段和附加文件。要在我们的服务器上编辑这些文件,我们需要这些文件的原始数据,所以我们调用 ->getFile()
和 ->getRawData()
.
一切正常。在约 10 分钟内发出约 15-20 个请求后(每次测试的时间和请求计数都不同)我们从 Podio Server 收到错误。即使我们在请求之间设置了很短的延迟(测试为 30 秒),我们也会收到错误,所以我认为这不是 "batching request limit"。错误编号为 420,被描述为 RateLimit Error。等待几分钟后,错误消失,服务器正在响应正确的答案。但是我们绝对没有任何计划何时会发生。
我们创建了一个函数来检查我们是否达到了 RateLimit,但对于正常请求和速率限制请求,仍然存在剩余。正如您在上面的屏幕截图中所见。
请不要用 link 回复跑道速率限制文档。我多次阅读此部分并且知道如何设置此限制。我们只有在调用文件服务器 (files.podio.com) 时才会遇到问题,而在发出其他 api 请求时不会遇到问题。
有没有人对我们的案例有过类似的经历?
要从 PHP Api:
调用的函数
/**
* get Item by Public ID (in url, starts with 1)
*/
public function getItemById($item_id) {
try {
return \PodioItem::get_by_app_item_id($this->app_id, $item_id );
} catch (Exception $e) {
throw new Exception($e->body['error_description']);
}
}
public function getFile($file_id) {
try {
return \PodioFile::get( $file_id );
} catch (Exception $e) {
throw new Exception($e->body['error_description']);
}
}
public function getRawData($file) {
try {
return $file->get_raw();
} catch (Exception $e) {
throw new Exception("Status: " . $e->status . " Message: " . (empty($e->body['error_description']) ? '-' : $e->body['error_description']));
}
}
使用 RateLimit 调用跑道服务器:
$podio = new \Podio\Api\Api('APP_ID', 'APP_TOKEN');
for($i = 0; $i < 10; $i++) {
echo "Rate Limit: " . $podio->getRateLimitRemaining() . '<br>';
$item = $podio->getItemById(500);
echo "Rate Limit: " . $podio->getRateLimitRemaining() . '<br>';
$file = $podio->getFile(668548372);
$raw_file = $podio->getRawData($file);
}
浏览器输出。如您所见,没有达到 RateLimit,但我们在调用 getRawData()
后直接得到 420
Podio 支持人员告诉我,尽管我们是一家每天都使用跑道的公司,但他们不向私人提供支持,在我看来这是他们服务器上的一个错误(或者没有记录在案)任何地方)。
更新:
我做了第二个函数来触发它:
// This function is used to test Podio Fileserver for Rate Limits
public function podioAction() {
$podio = new \Podio\Api\Api('APP_ID', 'APP_TOKEN');
for($i = 0; $i < 100; $i++) {
try {
$item = $podio->getItemById(500);
echo date("H:i:s") . " Rate Limit Remaining: " . $podio->getRateLimitRemaining() . ', EndPoint URL: /app/{$app_id}/item/{$app_item_id} <br>';
$podio->updateItem($item->item_id, array('titel-intern' => 'API Test'), array(), array('silent' => true));
echo date("H:i:s") . " Rate Limit Remaining: " . $podio->getRateLimitRemaining() . ', EndPoint URL: /item/{$item_id} <br>';
$file = $podio->getFile(668548372);
echo date("H:i:s") . " Rate Limit Remaining: " . $podio->getRateLimitRemaining() . ', EndPoint URL: /file/{$file_id} <br>';
$raw_file = $podio->getRawData($file);
echo date("H:i:s") . " File received, EndPoint URL: https://files.podio.com/668548372 " . '<br>';
} catch(Exception $e) {
echo date("H:i:s") . " Error: " . $e->getMessage() . " <br>";
exit;
}
}
exit;
}
这让我得到以下浏览器输出(不包括前几行):
15:46:38 Rate Limit Remaining: 4753, EndPoint URL: /app/{$app_id}/item/{$app_item_id}
15:46:38 Rate Limit Remaining: 8, EndPoint URL: /item/{$item_id}
15:46:38 Rate Limit Remaining: 4752, EndPoint URL: /file/{$file_id}
15:46:38 File received, EndPoint URL: https://files.podio.com/668548372
15:46:39 Rate Limit Remaining: 4751, EndPoint URL: /app/{$app_id}/item/{$app_item_id}
15:46:39 Rate Limit Remaining: 6, EndPoint URL: /item/{$item_id}
15:46:39 Rate Limit Remaining: 4750, EndPoint URL: /file/{$file_id}
15:46:39 File received, EndPoint URL: https://files.podio.com/668548372
15:46:39 Rate Limit Remaining: 4749, EndPoint URL: /app/{$app_id}/item/{$app_item_id}
15:46:40 Rate Limit Remaining: 4, EndPoint URL: /item/{$item_id}
15:46:40 Rate Limit Remaining: 4748, EndPoint URL: /file/{$file_id}
15:46:40 File received, EndPoint URL: https://files.podio.com/668548372
15:46:40 Rate Limit Remaining: 4747, EndPoint URL: /app/{$app_id}/item/{$app_item_id}
15:46:40 Rate Limit Remaining: 2, EndPoint URL: /item/{$item_id}
15:46:40 Rate Limit Remaining: 4746, EndPoint URL: /file/{$file_id}
15:46:41 File received, EndPoint URL: https://files.podio.com/668548372
15:46:41 Rate Limit Remaining: 4745, EndPoint URL: /app/{$app_id}/item/{$app_item_id}
15:46:41 Rate Limit Remaining: 0, EndPoint URL: /item/{$item_id}
15:46:41 Rate Limit Remaining: 4744, EndPoint URL: /file/{$file_id}
15:46:41 Error: Status: 420 Message: -
今天在这个测试中一切似乎都很正常。这些文件似乎也是 RateLimited 请求,并且在这些限制关闭时抛出错误。但在上面的截图中,我得到了不同的结果。如果一直像今天一样,就没有问题,我可以跟踪这个。但最近几天情况并非如此。
如果发生这种情况,我会再次发帖,就像问这个问题时一样,但现在一切似乎都正常。
->getRawData()
方法被标记为内部方法,并且未在 https://developers.podio.com/doc/files 上列为可用方法。你不应该使用它:)
请使用 ->getFile()
方法中 file
object 的 link
属性。并将常规授权 header 发送到该端点以对下载进行身份验证。下载也有较低的速率限制(->getRawData()
方法也是如此)
我们的跑道有问题 Api 或者有什么,跑道没有记录。
我们正在向 Api 发出请求,以获取具有功能 ->getItemById()
的项目。此项目具有文件字段和附加文件。要在我们的服务器上编辑这些文件,我们需要这些文件的原始数据,所以我们调用 ->getFile()
和 ->getRawData()
.
一切正常。在约 10 分钟内发出约 15-20 个请求后(每次测试的时间和请求计数都不同)我们从 Podio Server 收到错误。即使我们在请求之间设置了很短的延迟(测试为 30 秒),我们也会收到错误,所以我认为这不是 "batching request limit"。错误编号为 420,被描述为 RateLimit Error。等待几分钟后,错误消失,服务器正在响应正确的答案。但是我们绝对没有任何计划何时会发生。
我们创建了一个函数来检查我们是否达到了 RateLimit,但对于正常请求和速率限制请求,仍然存在剩余。正如您在上面的屏幕截图中所见。
请不要用 link 回复跑道速率限制文档。我多次阅读此部分并且知道如何设置此限制。我们只有在调用文件服务器 (files.podio.com) 时才会遇到问题,而在发出其他 api 请求时不会遇到问题。
有没有人对我们的案例有过类似的经历?
要从 PHP Api:
调用的函数/**
* get Item by Public ID (in url, starts with 1)
*/
public function getItemById($item_id) {
try {
return \PodioItem::get_by_app_item_id($this->app_id, $item_id );
} catch (Exception $e) {
throw new Exception($e->body['error_description']);
}
}
public function getFile($file_id) {
try {
return \PodioFile::get( $file_id );
} catch (Exception $e) {
throw new Exception($e->body['error_description']);
}
}
public function getRawData($file) {
try {
return $file->get_raw();
} catch (Exception $e) {
throw new Exception("Status: " . $e->status . " Message: " . (empty($e->body['error_description']) ? '-' : $e->body['error_description']));
}
}
使用 RateLimit 调用跑道服务器:
$podio = new \Podio\Api\Api('APP_ID', 'APP_TOKEN');
for($i = 0; $i < 10; $i++) {
echo "Rate Limit: " . $podio->getRateLimitRemaining() . '<br>';
$item = $podio->getItemById(500);
echo "Rate Limit: " . $podio->getRateLimitRemaining() . '<br>';
$file = $podio->getFile(668548372);
$raw_file = $podio->getRawData($file);
}
浏览器输出。如您所见,没有达到 RateLimit,但我们在调用 getRawData()
后直接得到 420Podio 支持人员告诉我,尽管我们是一家每天都使用跑道的公司,但他们不向私人提供支持,在我看来这是他们服务器上的一个错误(或者没有记录在案)任何地方)。
更新:
我做了第二个函数来触发它:
// This function is used to test Podio Fileserver for Rate Limits
public function podioAction() {
$podio = new \Podio\Api\Api('APP_ID', 'APP_TOKEN');
for($i = 0; $i < 100; $i++) {
try {
$item = $podio->getItemById(500);
echo date("H:i:s") . " Rate Limit Remaining: " . $podio->getRateLimitRemaining() . ', EndPoint URL: /app/{$app_id}/item/{$app_item_id} <br>';
$podio->updateItem($item->item_id, array('titel-intern' => 'API Test'), array(), array('silent' => true));
echo date("H:i:s") . " Rate Limit Remaining: " . $podio->getRateLimitRemaining() . ', EndPoint URL: /item/{$item_id} <br>';
$file = $podio->getFile(668548372);
echo date("H:i:s") . " Rate Limit Remaining: " . $podio->getRateLimitRemaining() . ', EndPoint URL: /file/{$file_id} <br>';
$raw_file = $podio->getRawData($file);
echo date("H:i:s") . " File received, EndPoint URL: https://files.podio.com/668548372 " . '<br>';
} catch(Exception $e) {
echo date("H:i:s") . " Error: " . $e->getMessage() . " <br>";
exit;
}
}
exit;
}
这让我得到以下浏览器输出(不包括前几行):
15:46:38 Rate Limit Remaining: 4753, EndPoint URL: /app/{$app_id}/item/{$app_item_id}
15:46:38 Rate Limit Remaining: 8, EndPoint URL: /item/{$item_id}
15:46:38 Rate Limit Remaining: 4752, EndPoint URL: /file/{$file_id}
15:46:38 File received, EndPoint URL: https://files.podio.com/668548372
15:46:39 Rate Limit Remaining: 4751, EndPoint URL: /app/{$app_id}/item/{$app_item_id}
15:46:39 Rate Limit Remaining: 6, EndPoint URL: /item/{$item_id}
15:46:39 Rate Limit Remaining: 4750, EndPoint URL: /file/{$file_id}
15:46:39 File received, EndPoint URL: https://files.podio.com/668548372
15:46:39 Rate Limit Remaining: 4749, EndPoint URL: /app/{$app_id}/item/{$app_item_id}
15:46:40 Rate Limit Remaining: 4, EndPoint URL: /item/{$item_id}
15:46:40 Rate Limit Remaining: 4748, EndPoint URL: /file/{$file_id}
15:46:40 File received, EndPoint URL: https://files.podio.com/668548372
15:46:40 Rate Limit Remaining: 4747, EndPoint URL: /app/{$app_id}/item/{$app_item_id}
15:46:40 Rate Limit Remaining: 2, EndPoint URL: /item/{$item_id}
15:46:40 Rate Limit Remaining: 4746, EndPoint URL: /file/{$file_id}
15:46:41 File received, EndPoint URL: https://files.podio.com/668548372
15:46:41 Rate Limit Remaining: 4745, EndPoint URL: /app/{$app_id}/item/{$app_item_id}
15:46:41 Rate Limit Remaining: 0, EndPoint URL: /item/{$item_id}
15:46:41 Rate Limit Remaining: 4744, EndPoint URL: /file/{$file_id}
15:46:41 Error: Status: 420 Message: -
今天在这个测试中一切似乎都很正常。这些文件似乎也是 RateLimited 请求,并且在这些限制关闭时抛出错误。但在上面的截图中,我得到了不同的结果。如果一直像今天一样,就没有问题,我可以跟踪这个。但最近几天情况并非如此。
如果发生这种情况,我会再次发帖,就像问这个问题时一样,但现在一切似乎都正常。
->getRawData()
方法被标记为内部方法,并且未在 https://developers.podio.com/doc/files 上列为可用方法。你不应该使用它:)
请使用 ->getFile()
方法中 file
object 的 link
属性。并将常规授权 header 发送到该端点以对下载进行身份验证。下载也有较低的速率限制(->getRawData()
方法也是如此)