In this article, I will explain how to execute the calls to Microsoft Graph API using some optional OData query parameters.
The objectives of this article are:
- What are the optional OData query parameters?
- List of supported OData query parameters, when to use which one
- Execute some Graph API calls using query parameters
While Microsoft already has the documentation to cover all its technology, in this article, I will try to explain these OData query parameters with some different angles and usage scenarios. I’m sure you will enjoy reading this article and learn something new.
Background
This article shows how you can fire some calls to MS Graph API using optional query parameters with the MS Graph Explorer available here:
In my previous articles, I explained the different components of Microsoft Graph Explorer and showed how to execute MS Graph API calls using the sample account. I suggest you read those articles too for better understanding MS Graph API Explorer.
You can read my previous articles on MS Graph API Explorer here:
What are the Optional Query Parameters?
The current version of Microsoft Graph API supports the OData version 4.0 standard. This OData standard defines how the data is exchanged between the originator and the consumer of the REST APIs.
Look at the format of an API endpoint in Microsoft Graph API:
Here “query-parameters” is an optional set of parameters to modify the response/output of API calls. It always starts with $ sign. (Please note here that in the beta version of MS Graph API, using $ is now optional. We will see that later in the article). Query parameters start after “?” sign.
The Microsoft Graph API documentation here describes the optional query parameters as:
“You can use optional query parameters to customize the response in your Microsoft Graph app. Use query parameters to include more or fewer properties than the default response, filter the response for items that match a custom query, or provide additional parameters for a method.”
The OData standards specification on www.odata.org defines the optional query parameters as “System Query Options” which are explained in great detail here.
The ODATA standards specification explains these query parameters as:
“System Query Options are query string parameters a client may specify to control the amount and order of the data that an OData service returns for the resource identified by the URI. The names of all System Query Options are prefixed with a "$" character.
An OData service may support some or all of the System Query Options defined. If a data service does not support a System Query Option, it must reject any requests which contain the unsupported option…”
In short, using these optional query parameters in the API endpoint query string you can define the criteria applicable on the result. And these parameters are optional meaning if you don’t mention any of them in the query string, then also the API call works fine.
If you are not aware of OData standard, then I suggest you to spend some time on reading about the OData specification on the odata.org website here for better understanding of OData concepts.
List of supported query parameters in Microsoft Graph API
The following query parameters are supported in the current version of Microsoft Graph API:
- $count
- $expand
- $filter
- $orderby
- $search
- $select
- $skip
- $skipToken
- $top
A complete list with details can be found on Microsoft Graph API documentation website here.
Let’s now see each of the above query parameters one by one in detail and fire queries in Microsoft Graph API Explorer.
I will explain them in increasing order of complexity of understanding.
(1) $top
Explanation
This parameter will fetch only certain number of data items as specified along with $top.
At times, you will not need to fetch all the items from the result set, but only first few of them. In this case, $top query parameter is used to specify how many items should be returned in the result.
Usually, $top query parameter is used with $orderby query parameter (Read more about $orderby in section 3 below).
Example
Open MS Graph Explorer here and fire following calls
- https://graph.microsoft.com/v1.0/me/messages or click here, then press “Run Query”
- https://graph.microsoft.com/v1.0/me/drive/root/children or click here, then press “Run Query”
Notice the amount of data being returned in results in the above calls. In real life API call execution, it will return the current user’s emails and all files on his/her OneDrive. This may not be required always, and returning these many items may not be best suited option performance-wise too.
When you want to see only some limited number of records, at that time you can use $top.
Go to MS Graph Explorer here and fire the following call:
https://graph.microsoft.com/v1.0/me/messages?$top=2 or click here, then press “Run Query”.
You will see only two result items, not the list of all messages,
Note: I have collapsed the JSON result in above screenshot to show items fit in one screen.
Usage
In your programming, you can use $top query parameter to:
- Show recent/latest/top items from a list of items
- Implement paging (often used with $skip and $orderby)
(2) $count
Explanation
This parameter will fetch the total number/count of data items in the specified API endpoint along with the result.
Note that the API call will return the result “as it is” without this query parameter, but if this parameter is specified, then in addition to the result, a number indicating the result count is also returned.
You will see the result count in @odata.count property in response JSON.
Example
Open MS Graph Explorer here and fire following call to get list of emails
- https://graph.microsoft.com/v1.0/me/messages?$count=true or click here, then press “Run Query”
It will show the following result,
Notice here as highlighted in above screenshot, MS Graph API will return to you the count of emails as the value of property @odata.count.
Fire more calls in MS Graph Explorer to understand the $count parameter as shown below
- https://graph.microsoft.com/v1.0/me/events?$count=true or click here then press “Run Query”
- https://graph.microsoft.com/v1.0/me?$count=true or click here then press “Run Query”
You will see MS Graph Explorer does not return any count or does not return any error, it simply returns a valid result. If the $count parameter is not applicable on the API endpoint it will ignore it.
I leave it to you now to try and explore the $count parameter with different Graph API calls.
Usage
In your programming, you can use $count query parameter to:
- Get the no. of result items in the result, along with result item(s)
(3) $orderby
Explanation
This parameter will make the Graph API return the result in a specific sorting order. Sometimes, you will want your result from MS Graph API to be sorted in a certain order depending on the date or name or some other property of the resource being returned. Use $orderby parameter in those cases to get your result sorted in certain order.
Example
Open MS Graph Explorer here and fire following call to get all users.
- https://graph.microsoft.com/v1.0/users or click here, then press “Run Query”.
You will see all the organization’s users are returned here. They are in the order of email address. You may want to have the result ordered by another property, let’s say display name.
Execute the following call
- https://graph.microsoft.com/v1.0/users?$orderby=displayName or click here, then press “Run Query”
You will see the list of users is ordered by the display name of user,
Note: In above screenshot only one result fits in the screen. Try scrolling the response view by yourself to see all the items.
The default order by is done in ascending order. If you want to order by descending order, then specify “desc” in the URL separated by a space.
Execute the following call,
- https://graph.microsoft.com/v1.0/users?$orderby=displayName desc or click here, then press “Run Query”
You will see the list is now ordered descending by the display name:
Usage
In your programming, you can use $orderby query parameter to:
- Get an ordered list of result items, based on certain property
- Get emails, events, other items in ascending or descending sort order
(4) $skip
Explanation
This query parameter tells the MS Graph API to omit the number of records as specified along with $skip from the result set. MS Graph API will follow the same sorting order it follows (if $orderby is not specified) and will omit that many number of records from the result as specified in the query string.
Example
Open MS Graph Explorer here and fire following call to get the list of contacts:
- https://graph.microsoft.com/v1.0/me/contacts or click here, then press “Run Query”
It will show the result with all contacts of sample account. Note the result’s “displayName” values for first 4 records (they start with “A”).
Now run the following query to skip first 4 records from result
- https://graph.microsoft.com/v1.0/me/contacts?$skip=4 or click here, then press “Run Query”
You will see the result without those first 4 contacts,
MS Graph API has omitted first 4 records from the result set.
What happens when we specify a skip count greater than no. of records in the result? Let’s find out.
Run the following query to skip 10000 records from result
- https://graph.microsoft.com/v1.0/me/contacts?$skip=10000 or click here, then press “Run Query”
We know there are no more than 10000 contacts in the sample account. This is the result you will get, it simply returns an empty set
Usage
In your programming, you can use $skip query parameter to:
- Omit the first few items from a list of items
- Implement paging (often used with $top and $orderby)
We will see the rest of the parameters in next article. Until then you can go to MS Graph Explorer and try the above examples by yourself.