Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zestaw SDK języka JavaScript programu Microsoft Graph zawiera funkcje, które upraszczają kod i umożliwiają skoncentrowanie się na tworzeniu aplikacji.
Korzystanie z zestawu SDK ułatwia:
- Obsługa błędów interfejsu API w przypadku, gdy elementy nie działają zgodnie z oczekiwaniami, takie jak ograniczanie przepustowości usług pod dużym obciążeniem
- Wykonaj złożone operacje API, takie jak żądania wsadowe
- Obsługa odpowiedzi binarnych, takich jak uzyskanie zdjęcia użytkownika
Przejście z użycia fetch do korzystania z Graph JavaScript SDK
Jeśli używasz API fetch do wykonywania zapytań do interfejsów API w aplikacji JavaScript, możesz mieć kod podobny do następującego:
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
});
Aby użyć zestawu SDK języka JavaScript dla programu Graph, należy zmienić kod 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
});
Obsługa błędów interfejsu API
Jednym z najczęstszych błędów interfejsu API używanych w programie Microsoft Graph w przypadku używania na dużą skalę jest ograniczanie przepustowości. Występuje, gdy serwer jest obciążony dużym obciążeniem. Ograniczanie przepustowości zmniejsza obciążenie serwera, aby utrzymać usługę.
Ponieważ ograniczanie przepustowości rzadko występuje w dzierżawach programistycznych, często deweloperzy wywołują interfejs API bez prawidłowej obsługi błędów.
fetch('https://graph.microsoft.com/v1.0/me', {
method: 'GET',
headers: {
authorization: `Bearer ${accessToken}`
}
})
.then(response => response.json())
.then(json => {
// do something here
});
Właściwym sposobem obsługi błędów ograniczania przepustowości za pomocą interfejsu API pobierania byłoby rozszerzenie wywołania, aby wykrywać błędy ograniczania 429 i odczekać na liczbę sekund wyznaczoną w nagłówku odpowiedzi retry-after
, zanim ponownie wywoła się interfejs API. Zaktualizowany kod wygląda następująco:
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
Łatwiejszym sposobem obsługi ograniczania przepustowości i innych błędów jest użycie zestawu SDK języka JavaScript programu Graph, który obsługuje błędy.
const json = await graphClient.api('/me').get();
// do something here