Leverage Microsoft Graph & third-party APIs in SPFx solution
This post is targeted to show a demonstration on how to leverage Microsoft Graph and third-party APIs in our SPFx solution. The intent of this post is to keep the hands-on guidance which can be followed on the same topic as part of Session in M365 Ahmedabad Bootcamp 2020.
Pre-requisite
Create new SPFx solution
Open a command prompt. Create a new directory and navigate.
md react-spfx-api-demo cd react-spfx-api-demo
Run below command to start creating new SPFx solution
yo @microsoft/sharepoint
Choose the below options when promoted.
Once it is generated, we should see below
Install react-json-view npm package.
For this demo, we will use a simple react-json-view package to view the API response in beautified JSON format.
https://www.npmjs.com/package/react-json-view
npm install --save react-json-view
Open this project in your favorite code editor, mine is Visual Studio Code.
Step – Passing WebPart context to React component
Open “\src\webparts\apiDemo\components\IApiDemoProps.ts”
Modify the code to what’s shown below:
import { WebPartContext } from "@microsoft/sp-webpart-base"; export interface IApiDemoProps { description: string; context:WebPartContext; }
Open “src\webparts\apiDemo\components\ApiDemo.tsx”
public render(): void { const element: React.ReactElement<IApiDemoProps> = React.createElement( ApiDemo, { description: this.properties.description, context:this.context } ); ReactDom.render(element, this.domElement); }
Please note we have just added the line ‘context:this.context’
Now, Lets Import json-view package.
import ReactJson from 'react-json-view';
Step – Calling External(anonymous) API
In this demo, we will call a public API which will return us all the countries and some particular fields.
https://restcountries.eu/rest/v2/all?fields=name;capital;currencies
As we are using React, let us create required State objects to hold the data for our component.
export interface IApiDemoState { countryresponse:any; }
Now let us make our react component aware of this state.
export default class ApiDemo extends React.Component<IApiDemoProps, IApiDemoState> { public constructor(props:IApiDemoProps,state:IApiDemoState){ super(props); this.state = { countryresponse:{} }; }
Add the below link in the render method of the component.
<ReactJson src={this.state.countryresponse} />
Next, let us start to write code to get data from REST API, Add below method
private async getCountryData(){ var apiresponse = await this.props.context.httpClient.get( `https://restcountries.eu/rest/v2/all?fields=name;capital;currencies`, HttpClient.configurations.v1 ) .then((response: HttpClientResponse) => { return response.json(); }) .then(jsonResponse => { return jsonResponse; }) as Promise<any>; this.setState({countryresponse:apiresponse}); console.log(apiresponse); } }
Now its time to call this method to get data, we will use componentDidMount method to call this method
public componentDidMount(){ this.getCountryData(); }
Step – Test your web part, go to Node JS command prompt, and browse till your project structure.
D:\SP\Samples\react-spfx-api-demo>gulp serve
You should see the below output after running this command…
Step – Calling Graph API
In this demo, we will call Graph Teams API to get a list of teams of the current users.
End Point – https://docs.microsoft.com/en-us/graph/api/user-list-joinedteams?view=graph-rest-1.0&tabs=http
Open src\webparts\apiDemo\components\ApiDemo.tsx
Import required Library.
import { MSGraphClient } from "@microsoft/sp-http";
Add below method
private async getMyTeams(){ var _graphClient:MSGraphClient = await this.props.context.msGraphClientFactory.getClient(); //TODO try { const teamsResponse = await _graphClient.api('me/joinedTeams').version('v1.0').get(); myTeams = teamsResponse.value as []; this.setState({teamresponse:teamsResponse}); } catch (error) { console.log('Unable to get teams', error); } }
Add the object to hold graph API Response in stage
export interface IApiDemoState { countryresponse:any; teamresponse:any; }
Modify constructor to initialize teamresponse with empty object
public constructor(props:IApiDemoProps,state:IApiDemoState){ super(props); this.state = { countryresponse:{}, teamresponse:{} }; }
Modify componentdidMount to call geTeams method
public componentDidMount(){ this.getCountryData(); this.getMyTeams(); }
Modify render method to display response of Graph API to json-viewer
<div>My Teams</div> <br/> <br/> <ReactJson src={this.state.teamresponse} />
Step – Test your web part, go to Node JS command prompt, and browse till your project structure.
D:\SP\Samples\react-spfx-api-demo>gulp serve
You should see the below output after running this command…
Summary – In this post, we have seen how to leverage Graph API and third-party APIs in the SPFx solution.