Podio RateLimit на файловом сервере - PullRequest
0 голосов
/ 27 августа 2018

У нас проблема с 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

Служба поддержки 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 и выдают ошибки, когда эти ограничения отключены.Но на скриншоте выше у меня был другой результат.Если это всегда так, как сегодня, нет проблем, и я могу отследить это.Но это было не так в последние несколько дней.

Я пишу снова, если это произойдет, как это было в то время, когда задавал этот вопрос, но сейчас все вроде нормально работает.

1 Ответ

0 голосов
/ 08 ноября 2018

->getRawData() метод помечен как внутренний и не указан в https://developers.podio.com/doc/files как доступный метод.Вы не должны его использовать:)

Пожалуйста, используйте атрибут link объекта file из метода ->getFile().И отправьте обычный заголовок авторизации на эту конечную точку для аутентификации для загрузки.Загрузка также зависит от нижнего предела скорости (как метод ->getRawData())

...