Microsoft Graph, the one endpoint to rule them all, the one API in front of all the other API's in the Microsoft Cloud. I didn't really know how it worked (does it aggregate data, pass through to other API's, or a combination of both), until it didn't work and I had to troubleshoot.
At SharePoint Conference 2018 in Las Vegas I had the honor to have a sit down with Yina Arenas, the Principal Program Manager & allround Microsoft Graph mastermind. I wanted to provide some feedback on how I perceived the (lack of) support for developers having issues working with the Graph. She listened and noted, AND she took a look at my StackOverflow issues. That's when she pulled a trick that I never saw before, nor found documented anywhere...
You can see whatever happens with each request by appending $whatif
to the end of the URL as a query string parameter! It shows how the Graph would handle your request, without actually executing it!
You can use the Microsoft Graph Explorer to test this out. A simple request to get "My profile" (GET https://graph.microsoft.com/v1.0/me
) returns:
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
"businessPhones": [
"+1 412 555 0109"
],
"displayName": "Megan Bowen",
"givenName": "Megan",
"jobTitle": "Auditor",
"mail": "MeganB@M365x214355.onmicrosoft.com",
"mobilePhone": null,
"officeLocation": "12/1110",
"preferredLanguage": "en-US",
"surname": "Bowen",
"userPrincipalName": "MeganB@M365x214355.onmicrosoft.com",
"id": "48d31887-5fad-4d73-a9f5-3c356e68a038"
}
Now, appending $whatif
to the request (GET https://graph.microsoft.com/v1.0/me?$whatif
) the result changes to:
{
"Description":"Execute HTTP request",
"Uri":"https://graph.windows.net/v2/dcd219dd-bc68-4b9b-bf0b-4a33a796be35/users('48d31887-5fad-4d73-a9f5-3c356e68a038')?$select=businessPhones,displayName,givenName,jobTitle,mail,mobilePhone,officeLocation,preferredLanguage,surname,userPrincipalName,id",
"HttpMethod":"GET"
}
This shows that a request for "My profile" gets passed on to the Azure AD Graph to return the results. You can add $whatif
to any request, finally showing you where all the information in the Graph is coming from!