Graph API Paging
When first using Graph API a feature I missed was that data was paged. For example, if I want to retrieve all the groups in a tenant, I would use the following endpoint:
HTTP GET:
https://graph.microsoft.com/v1.0/groups
This worked fine for me in the demo tenants I was using – I would get all the groups back.
However, I found out there is a limit to results returned (for groups it is 100)! This is down to paging (see explanation here).
If you look closely at a response JSON payload back from Graph API there is sometimes an attribute @odata.nextLink.
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#groups",
"@odata.nextLink": "https://graph.microsoft.com/v1.0/groups?$skiptoken=X%27445370740200010000002A47726F75705F31336265363937312D373964622D346633332D396434312D6232353538396361323561662A47726F75705F31336265363937312D373964622D346633332D396434312D6232353538396361323561660000000000000000000000%27",
"value": [
{
"id": "02bd9fd6-8f93-4758-87c3-1fb73740a315",
"deletedDateTime": null,
"classification": null,
"createdDateTime": "2017-07-31T18:56:16Z",
"creationOptions": [
"ExchangeProvisioningFlags:481"
],
.......
This attribute means the data you have been returned is incomplete and there is more (pages of) data to get. It’s really easy to get the next ‘page’ of data – you just query the link in the value of @odata.NextLink.
HTTP GET:
https://graph.microsoft.com/v1.0/groups?$skiptoken=X%27445370740200010000002A47726F75705F31336265363937312D373964622D346633332D396434312D6232353538396361323561662A47726F75705F31336265363937312D373964622D346633332D396434312D6232353538396361323561660000000000000000000000%27
You may also find that data also has a @odata.nextLink in too, so repeat the process.
To better illustrate this, I have a code snippet of getting data on a loop using PowerShell:
I am sure this can be done in other languages using a ‘while’ loop to get all data.