Fournisseur d'authentification
Le fournisseur d'authentification s'enroule autour du client OAuth 2.0 de PHP League, d'où son nom - "GraphPhpLeagueAuthenticationProvider".
Le fournisseur d'authentification supporte les flux suivants :
- OAuth 2.0 code grant pour les permissions déléguées.
- OAuth 2.0 client credentials grant pour les autorisations d'application.
Il prend également en charge le flux OAuth 2.0 on-behalf-of pour demander des jetons au nom d'applications tierces.
Le fournisseur d'authentification garantit que le jeton est toujours valide en suivant l'expiration et en le rafraîchissant automatiquement en arrière-plan avant qu'il n'expire.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <?php use Microsoft\Graph\GraphRequestAdapter; use Microsoft\Graph\GraphServiceClient; use Microsoft\Kiota\Abstractions\ApiException; use Microsoft\Kiota\Authentication\PhpLeagueAuthenticationProvider; use Microsoft\Kiota\Authentication\Oauth\ClientCredentialContext; $tokenRequestContext = new ClientCredentialContext( 'tenantID', 'clientID', 'clientSecret' ); $scopes = ['https://graph.microsoft.com/.default']; $graphServiceClient = new GraphServiceClient($tokenRequestContext, $scopes); //Get a user try { $response = $graphServiceClient->users()->ByUserId('AlexW@M365x86781558.OnMicrosoft.com')->get()->wait(); echo "Hello, I am {$response->getGivenName()}"; } catch (ApiException $ex) { echo $ex->getMessage(); } |
Une expérience fluide pour construire des requêtes
Grâce à l'autocomplétion de l'IDE, le SDK vous aide à trouver la bonne commande dans chaque ligne de code, améliorant ainsi la découverte et réduisant le temps passé à lire la documentation. Le SDK ne suggère que les commandes qui fonctionnent avec la dernière instruction tapée, réduisant ainsi les erreurs dans votre code.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 | <?php // v1.x $response = $graphClient->createRequest('GET', '/users/userId/messages') ->setReturnType(Model\User::class) ->execute(); // v2.0.0 $response = $graphServiceClient->users()->byUserId('userId')->messages()->get()->wait(); |
Gestionnaire de tentatives intégré
Le SDK propose un gestionnaire de relance intégré configurable qui comprend les codes d'état de réponse 429 (Trop de requêtes), 503 (Service indisponible) et 504 (Délai d'attente de la passerelle), qui exigent généralement que l'application relance la requête au bout d'un certain temps. Le gestionnaire lit la recommandation dans l'en-tête "Retry-After" et réessaie automatiquement après le délai recommandé. Vous pouvez également personnaliser le gestionnaire et spécifier une valeur personnalisée pour le paramètre "RetriesTimeLimit" supérieure à 0, afin d'introduire des tentatives de réessais de requêtes évaluées en fonction du temps, en plus des tentatives de réessais de requêtes évaluées en fonction du nombre par défaut.
Itérateur de page
Pour des raisons de performance, les collections d'entités sont souvent divisées en pages et chaque page est renvoyée avec une URL vers la page suivante. La classe PageIterator simplifie la consommation de collections paginées. PageIterator gère l'énumération de la page actuelle et la requête des pages suivantes automatiquement.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php use Microsoft\Graph\Core\Tasks\PageIterator; use Microsoft\Graph\Generated\Models\Message; use DateTimeInterface; $messages = $graphServiceClient->users()->byUserId(USER_ID)->messages()->get()->wait(); $pageIterator = new PageIterator($messages, $graphServiceClient->getRequestAdapter()); $counter = 0; $callback = function (Message $message) use (&$counter) { echo "Subject: {$message->getSubject()}, Received at: {$message->getReceivedDateTime()->format(DateTimeInterface::RFC2822)}\n"; $counter ++; return ($counter % 5 != 0); }; while ($pageIterator->hasNext()) { // iteration pauses and resumes after every 5 messages $pageIterator->iterate($callback); echo "\nPaused iteration...Total messages: {$counter}\n\n"; } |
Mise en lots
Combinez facilement plusieurs requêtes en un seul appel. Il est possible de regrouper jusqu'à 20 requêtes individuelles afin de réduire le temps de latence du réseau lorsque chaque requête est effectuée séparément. Le BatchRequestBuilder vous permet d'effectuer des requêtes vers le point de terminaison /$batch de l'API Microsoft Graph.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?php use Microsoft\Graph\Core\Requests\BatchRequestContent; use Microsoft\Graph\Generated\Models\Message; use Microsoft\Graph\BatchRequestBuilder; use Microsoft\Graph\Core\Requests\BatchResponseItem; use Microsoft\Graph\Generated\Models\Message; // Create a batch request content object $message = new Message(); $message->setSubject("Test Subject"); $batchRequestContent = new BatchRequestContent([ $graphServiceClient->users()->byUserId(USER_ID)->messages()->byMessageId('id')->toDeleteRequestInformation(), $graphServiceClient->users()->byUserId(USER_ID)->messages()->toPostRequestInformation($message), $graphServiceClient->users()->byUserId(USER_ID)->toGetRequestInformation() ]); //Send the batch request using BatchRequestBuilder $requestBuilder = new BatchRequestBuilder($graphServiceClient->getRequestAdapter()); $batchResponse = $requestBuilder->postAsync($batchRequestContent)->wait(); // Get responses to the batch request items $batchRequests = $batchRequestContent->getRequests(); // Uses the auto-generated ID added to the batch request content $response1 = $batchResponse->getResponse($batchRequests[0]->getId()); echo "Response1 status code: {$response1->getStatusCode()}"; //Deserialize the body of the response $message = $batchResponse->getResponseBody($batchRequests[1]->getId(), Message::class); echo "Created message subject: {$message->getSubject()}\n"; |
Téléchargement de fichiers volumineux
Pour télécharger des fichiers de plus de 3 Mo, l'API Microsoft Graph prend en charge les téléchargements à l'aide de sessions de téléchargement résumables dans lesquelles plusieurs octets sont téléchargés à la fois. Le SDK fournit une tâche LargeFileUpload qui découpe votre fichier en octets et les télécharge progressivement jusqu'à la fin.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <?php use Psr\Http\Client\NetworkExceptionInterface; // create a file stream $file = Utils::streamFor(fopen('fileName', 'r')); // create an upload session $attachmentItem = new AttachmentItem(); $attachmentItem->setAttachmentType(new AttachmentType('file')); $attachmentItem->setName('fileName'); $attachmentItem->setSize($file->getSize()); $uploadSessionRequestBody = new CreateUploadSessionPostRequestBody(); $uploadSessionRequestBody->setAttachmentItem($attachmentItem); $uploadSession = $graphServiceClient->users()->byUserId(USER_ID)->messages()->byMessageId('[id]')->attachments()->createUploadSession()->post($uploadSessionRequestBody)->wait(); // upload $largeFileUpload = new LargeFileUploadTask($uploadSession, $graphServiceClient->getRequestAdapter(), $file); try { $uploadSession = $largeFileUpload->upload()->wait(); } catch (NetworkExceptionInterface $ex) { // resume upload in case of network errors $retries = 0; $maxRetries = 3; while ($retries < $maxRetries) { try { $uploadSession = $largeFileUpload->resume()->wait(); if ($uploadSession) { break; } } catch (NetworkExceptionInterface $ex) { $retries ++; } } throw $ex; } |
Plus d'infos et téléchargement
Source : Microsoft
Et vous ?
Que pensez-vous de Microsoft Graph PHP SDK 2.0 et de ses fonctionnalités ?
Voir aussi
Microsoft annonce Graph Python SDK, conçu pour simplifier la création d'applications de haute qualité, efficaces et résilientes qui accèdent à Microsoft Graph
Microsoft annonce Microsoft Graph Developer Proxy v0.4, avec une sortie de console améliorée, de nouvelles indications pour détecter l'appel des API bêta et prise en charge des plugins personnalisés