Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Na první pohled
Cílem: Migrace do sady Graph JS SDK
Čas: 30 minut
Pluginy: Žádný
Požadavky:Nastavení dev proxy serveru
Sada Microsoft Graph JavaScript SDK obsahuje funkce, které zjednoduší váš kód a umožňují soustředit se na vytváření aplikace.
Používání sady SDK usnadňuje:
- Zpracování chyb rozhraní API v případě, že věci nefungují podle očekávání, například když se služby omezují pod velkým zatížením
- Provádění složitých operací rozhraní API, jako jsou dávkové požadavky
- Zpracování binárních odpovědí, například získání fotky uživatele
Migrace z fetch do sady nástrojů Graph JavaScript SDK
Pokud k volání rozhraní API v javascriptové aplikaci použijete rozhraní API pro načítání, můžete mít kód podobný následujícímu:
const msalClient = new msal.PublicClientApplication({
auth: {
clientId: appId
}
});
function getAccessToken(msalClient) {
const accounts = msalClient.getAllAccounts();
if (accounts.length > 0) {
const accessTokenRequest = {
scopes: [
'https://graph.microsoft.com/User.Read'
],
account: accounts[0]
};
return msalClient.acquireTokenSilent(accessTokenRequest)
.then(response => response.accessToken)
.catch(error => {
console.log(error);
console.log("silent token acquisition fails. acquiring token using redirect");
if (error instanceof msal.InteractionRequiredAuthError) {
return msalClient.acquireTokenRedirect(accessTokenRequest);
}
});
}
else {
return Promise.reject('Sign in');
}
}
msalClient
.loginPopup()
.then(response => getAccessToken(msalClient))
.then(accessToken => fetch('https://graph.microsoft.com/v1.0/me', {
method: 'GET',
headers: {
authorization: `Bearer ${accessToken}`
}
}))
.then(response => response.json())
.then(json => {
// do something here
});
Pokud chcete použít sadu Graph JavaScript SDK, změnili byste kód na:
const msalClient = new msal.PublicClientApplication({
auth: {
clientId: appId
}
});
function getGraphClient(account) {
const authProvider = new MSGraphAuthCodeMSALBrowserAuthProvider.AuthCodeMSALBrowserAuthenticationProvider(msalClient, {
account,
scopes: [
'https://graph.microsoft.com/User.Read'
],
interactionType: msal.InteractionType.Popup,
});
return MicrosoftGraph.Client.initWithMiddleware({ authProvider });
}
msalClient
.loginPopup()
.then(response => {
const accounts = msalClient.getAllAccounts();
if (accounts.length > 0) {
const graphClient = getGraphClient(accounts[0]);
return graphClient.api('/me').get();
}
else {
return Promise.reject('Sign in');
}
})
.then(json => {
// do something here
});
Zpracování chyb rozhraní API
Jednou z nejběžnějších chyb rozhraní API, ke kterým dochází u aplikací využívajících Microsoft Graph ve velkém měřítku, je omezování. Dochází k němu, když je server zatížený velkým zatížením. Omezování snižuje zatížení serveru, aby služba zůstala v provozu.
Vzhledem k tomu, že k omezení výkonu dochází zřídka u tenantů pro vývojáře, vývojáři často volají rozhraní API bez správného zachycení chyb.
fetch('https://graph.microsoft.com/v1.0/me', {
method: 'GET',
headers: {
authorization: `Bearer ${accessToken}`
}
})
.then(response => response.json())
.then(json => {
// do something here
});
Správným způsobem, jak zpracovávat chyby omezování pomocí rozhraní API pro načtení, by bylo rozšířit volání, aby bylo možné sledovat chyby omezování 429, a počkat před opětovným voláním rozhraní API na počet sekund určených v hlavičce odpovědi retry-after. Aktualizovaný kód by vypadal takto:
function sleep(milliseconds) {
return new Promise((resolve) => setTimeout(resolve, milliseconds));
}
async function fetchAndRetryIfNecessary(callAPIFn) {
const response = await callAPIFn();
if (response.status === 429) {
const retryAfter = response.headers.get('retry-after');
await sleep(retryAfter * 1000);
return fetchAndRetryIfNecessary(callAPIFn);
}
return response;
}
const response = await fetchAndRetryIfNecessary(async () => (
await fetch('https://graph.microsoft.com/v1.0/me', {
method: 'GET',
headers: {
authorization: `Bearer ${accessToken}`
}
})
));
const json = await response.json();
// do something here
Jednodušší způsob, jak zvládnout omezování a další chyby, je použít sadu Graph JavaScript SDK, která za vás zpracovává chyby.
const json = await graphClient.api('/me').get();
// do something here