IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Écrivez un code de haute qualité avec Microsoft Graph PHP SDK v2 et concentrez-vous sur la conception de votre application
En laissant le SDK gérer l'authentification, la relance ou la mise en lots

Le , par Anthony

27PARTAGES

6  0 
En juillet 2022, Microsoft a annoncé l'aperçu public du premier SDK généré par Kiota pour PHP. Aujourd'hui, l'équipe a le plaisir de mettre ce SDK à la disposition de tous. Microsoft Graph PHP SDK 2.0.0 offre les meilleures fonctionnalités de sa catégorie pour améliorer l'efficacité des développeurs et la qualité du code. En résolvant des problèmes transversaux tels que l'authentification, la relance et la mise en lots, le SDK vous permet de vous concentrer sur la conception et la valeur de votre application. Explorons quelques-unes de ses fonctionnalités les plus importantes.

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 :


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

Une erreur dans cette actualité ? Signalez-nous-la !