0

我们在使用 Podio Api 时遇到问题,或者有什么东西,Podio 没有记录。

我们正在向 Api 发出请求以获取具有 function 的 Item ->getItemById()。此项目具有文件字段和附加文件。要在我们的服务器上编辑这些文件,我们需要这些文件的 rawData,所以我们调用->getFile()and ->getRawData()

一切正常。在约 10 分钟内约 15-20 个请求后(时间和请求计数因每次测试而异)我们收到来自 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']));
    }
}

使用 RateLimit 调用调用 Podio 服务器:

$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 Support 告诉我,尽管我们是一家每天都使用 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 Requests 并且在这些限制关闭时抛出错误。但在上面的截图中,我得到了不同的结果。如果它总是像今天一样,那就没有问题,我可以跟踪它。但最近几天情况并非如此。

如果发生这种情况,我会再次发帖,就像当时问这个问题一样,但现在一切似乎都很好。

4

1 回答 1

1

->getRawData()方法被标记为内部,它没有在https://developers.podio.com/doc/files上列为可用方法。你不应该使用它:)

请使用方法中对象的link属性。并将常规 Authorization 标头发送到该端点以对下载进行身份验证。下载也受较低的速率限制(方法一样)file->getFile()->getRawData()

于 2018-11-08T16:13:00.247 回答