【问题标题】:Fetch all Restful Api data from Atera into my database从 Atera 获取所有 Restful Api 数据到我的数据库中
【发布时间】:2022-01-07 15:02:30
【问题描述】:

我是这个 Restful Api 的新手,我目前正在使用来自 Atera 的 Restful Api 到我的 MongoDB 数据库中。

这是来自 Atera Api 的示例

{
  "items": [
    {
      "AlertID": xxxx,
      "Code": xxxx,
      "Source": "string",
      "Title": "string",
      "Severity": "Information",
      "Created": "2021-12-01T01:09:52.888Z",
      "SnoozedEndDate": "2021-12-01T01:09:52.888Z",
      "DeviceGuid": "string",
      "AdditionalInfo": "string",
      "Archived": true,
      "AlertCategoryID": "Hardware",
      "ArchivedDate": "2021-12-01T01:09:52.888Z",
      "TicketID": xxxx,
      "AlertMessage": "string",
      "DeviceName": "string",
      "CustomerID": xxxx,
      "CustomerName": "string",
      "FolderID": xxxx,
      "PollingCyclesCount": 0
    }
  ],
  "totalItemCount": 6783,
  "page": 1,
  "itemsInPage": 20,
  "totalPages": 290,
  "prevLink": "",
  "nextLink": "http://app.atera.com/api/v3/alerts?page=2&itemsInPage=20"
}

这将是我使用 Guzzle 获取 Api 的代码

$client = new Client();
$uri = 'https://app.atera.com/api/v3/alerts';
$header = ['headers' => ['X-Api-Key' => 'xxxxxxx']];
$res = $client->get($uri, $header);
$data = json_decode($res->getBody()->getContents(), true);

如您所见,我正在使用 Guzzle 来获取此内容,但不知何故,我最多只能获取 20 个项目,但我可以看到它限制了每页的项目数,即每页 20 个项目,但我想获取所有信息,我有 6000 多个警报项。

我尝试过的 Fetch...
获取警报?items=6000
获取警报?itemsInPage=6000
获取警报?itemsInPage[大小]=6000
获取警报?limit=6000
获取警报?top=6000
获取警报?count=6000
获取警报?size=6000
获取警报?offset=6000
获取警报?limit=6000&offset=0
获取警报?limit=6000&offset=6000
获取警报?sysparm_limit=10000&sysparm_offset=10000
还有更多...

不过,我最多只能获得 20 个,有没有办法一次获取所有内容?

【问题讨论】:

    标签: php mongodb curl guzzle


    【解决方案1】:

    从上面作为示例显示的 api 数据可以看出,您使用的 atera api 有一个分页系统来发送数据。

    你可以在上面看到

    "totalItemCount": 6783,
    "page": 1,
    "itemsInPage": 20,
    "totalPages": 290,
    "prevLink": "",
    "nextLink": "http://app.atera.com/api/v3/alerts?page=2&itemsInPage=20"
    

    记下总页数,然后我想您只需要通过分页 nextLink 调用数据。您可以向用户展示您的数据,或者在 nextLink 出现在您的响应中时以同步重复调用的形式将其存储。

    当且仅当 nextLink 完成时,您可以设置一个带有成功退出条件的 while 循环(可能为空,您需要检查),如果其中一些响应可能失败,您可以抛出异常并退出,将所有响应数据存储在一个数组中。


    像这样调用您的请求以获取下一页"nextLink": "http://app.atera.com/api/v3/alerts?page=2&itemsInPage=20"

    $client = new GuzzleHttp\Client();
    $uri = 'http://app.atera.com/api/v3/alerts';
    $headers = ['X-Api-Key' => 'xxxxxxx'];
    $res = $client->get($uri, [
        'query' => ['page' => $page_number, 'itemsInPage' => 20],
        'headers' => $headers
    ]);
    

    这里可以根据循环设置页码。

    【讨论】:

      猜你喜欢
      • 2015-09-10
      • 2018-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-04
      • 2023-02-22
      • 1970-01-01
      相关资源
      最近更新 更多