I’m creating a couple of web parts using SharePoint Framework in my current project so I figured I’d share a small helper class I created for performing GET requests against the Microsoft Graph. The code is written in TypeScript and handles single item results as well as paging on array results.
MSGraph.ts
import { GraphHttpClient, GraphHttpClientResponse } from '@microsoft/sp-http'; export class MSGraph { public static async Get(graphClient: GraphHttpClient, url: string) { let values: any[] = []; while (true) { let response: GraphHttpClientResponse = await graphClient.get(url, GraphHttpClient.configurations.v1); // Check that the request was successful if (response.ok) { let result = await response.json(); let nextLink = result["@odata.nextLink"]; // Check if result is single entity or an array of results if (result.value && result.value.length > 0) { values.push.apply(values, result.value); } result.value = values; if (nextLink) { url = result["@odata.nextLink"].replace("https://graph.microsoft.com/", ""); } else { return result; } } else { // Reject with the error message throw new Error(response.statusText); } } } }
You can use the code as follows where I have extended the properties to include the web part context object in order to pass in graphHttpClient object.
import { MSGraph } from './MSGraph'; ... try { let groups = await MSGraph.Get(this.props.context.graphHttpClient, "v1.0/groups?$top=5"); } catch (error) { console.error(error); }