Microsoft Graph API - пейджинг больших коллекций - PullRequest
0 голосов
/ 19 июня 2019

Я просто смотрю на Microsoft Graph API PHP SDK, чтобы получить кучу ресурсов, особенно пользователей.

При просмотре документов SDK есть два способа получить пользователей: один с использованием метода createRequest(), а другой с использованием метода createCollectionRequest().

В документах предлагается использовать createCollectionRequest(), а затем просто выполнить цикл while, array_merge и getPage() для создания массива.

while (!$docGrabber->isEnd()) {
  $docs = array_merge($docs,$docGrabber->getPage());
}  

Проблема в том, что у меня есть коллекция из ~ 50 000 пользователей, поэтому этот метод не особенно эффективен.

Полагаю, самая большая проблема в том, что в приведенном выше примере (с использованием цикла while) следует избегать использования @odata.nextLink, возвращаемого API.

Но что, если мы действительно хотим использовать это вместо того, чтобы возвращать каждую запись в одном массиве?

Спасибо

1 Ответ

1 голос
/ 20 июня 2019

Вместо использования getPage () и этого примера вы можете получить доступ к следующей ссылке с помощью чего-то вроде этого:

$url = "/users";

// Get the first page
$response = $graph->createCollectionRequest("GET", $url)
                   ->setPageSize(50)
                   ->execute();

if ($response->getNextLink())
{
    $url = $response->getNextLink();
    // TODO: remove https://graph.microsoft.com/v1.0 part of nextlink
} else {
// There are no more pages.
    return null;
}

// get the next page, page size is already set in the next link
$response = $graph->createCollectionRequest("GET", $url)
                  ->execute();
...