У нас проблема с Apio Podio или что-то еще, Podio не задокументировал.
Мы обращаемся к Api с просьбой получить Предмет с функцией ->getItemById()
.Этот элемент имеет файловые поля и вложенные файлы.Чтобы отредактировать эти файлы на нашем сервере, нам нужны rawData этих файлов, поэтому мы вызываем ->getFile()
и ->getRawData()
.
Все работает нормально.После ~ 15-20 запросов в течение ~ 10 минут (время и количество запросов варьируются в каждом тесте) Мы получаем ошибки от Podio Server.Мы получаем ошибки, даже если мы помещаем короткие задержки между запросами (проверено до 30 секунд), поэтому я думаю, что это не «предел количества запросов».Ошибки с номером 420, который описывается как Ошибка RateLimit.После нескольких минут ожидания ошибка исчезла, и сервер ответил на правильный ответ.Но у нас абсолютно нет никакого плана, когда это произойдет.
Мы сделали функцию, чтобы проверить, не попали ли мы в RateLimit, но все еще есть, как для обычного запроса, так и для запроса с ограниченной скоростью.Как вы можете видеть на скриншотах выше.
Пожалуйста, не отвечайте со ссылкой на документацию по предельной скорости Podio.Я прочитал этот раздел несколько раз, и я знаю, как эти ограничения установлены.Наша проблема возникает только тогда, когда мы вызываем файловый сервер (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']));
}
}
Вызов на сервер Podio с помощью вызова 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 не срабатывает, но мы получаем 420 сразу после вызова getRawData ()
![enter image description here](https://i.stack.imgur.com/YAtjE.png)
Служба поддержки Podio сказала мне, что онине оказывать поддержку частным лицам, несмотря на то, что мы являемся компанией, которая ежедневно использует 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;
}
Это дает мне следующий Browseroutput (первые несколько строк не включены):
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 и выдают ошибки, когда эти ограничения отключены.Но на скриншоте выше у меня был другой результат.Если это всегда так, как сегодня, нет проблем, и я могу отследить это.Но это было не так в последние несколько дней.
Я пишу снова, если это произойдет, как это было в то время, когда задавал этот вопрос, но сейчас все вроде нормально работает.