Freigeben über


Generieren von Microsoft Graph-Clientbibliotheken mit Kiota

Microsoft veröffentlicht sofort einsatzbereite SDKs für den Zugriff auf Microsoft Graph-APIs in vielen gängigen Programmiersprachen. Diese SDKs sind eine bequeme Möglichkeit, auf Microsoft Graph zuzugreifen. Installieren Sie einfach das SDK mit dem entsprechenden Paket-Manager, und beginnen Sie mit der Codierung. Aufgrund der Größe und des Umfangs der Microsoft Graph-REST-API sind diese Bibliotheken jedoch relativ groß. Für Anwendungen, bei denen die Gesamtinstallationsgröße ein Problem darstellt, gibt diese große Größe Bedenken auf, insbesondere wenn die Anwendung nur eine Teilmenge von Microsoft Graph verwendet. In diesem Fall kann das Generieren eines benutzerdefinierten API-Clients mit Kiota, der nur auf die von Ihrer Anwendung verwendeten Teile von Microsoft Graph abzielt, die Gesamtinstallationsgröße Ihrer App verringern.

Überlegungen zur Verwendung generierter Clients im Vergleich zu Microsoft SDKs

Die Verwendung eines von Kiota generierten Clients hat einige Vor- und Nachteile gegenüber der Verwendung der von Microsoft veröffentlichten SDKs.

Vorteile

  • Von Kiota generierte Clients verwenden die gleichen Konventionen und Muster wie das von Microsoft veröffentlichte SDK. Wenn Sie bereits mit der Verwendung des Microsoft SDK vertraut sind, bietet die Verwendung einer generierten Bibliothek eine ähnliche Erfahrung.
  • Generierte Clients sind mit dem Microsoft Graph-Kernbibliotheksteil des von Microsoft veröffentlichten SDK kompatibel, sodass Sie der Kernbibliothek eine Abhängigkeit hinzufügen können, wenn Sie Features wie den Seiteniterator, Batchanforderungen oder große Dateiuploads verwenden müssen.

Nachteile

  • Das Endergebnis der Clientgenerierung mit Kiota sind Quelldateien, die Ihrem Projekt hinzugefügt werden müssen. Dadurch wird die Gesamtgröße Ihrer Codebasis erhöht.
  • Wenn Ihre Anwendung in Zukunft andere Microsoft Graph-APIs aufrufen muss, muss der Client neu generiert werden, um die erforderlichen Modelle und Anforderungsgeneratoren hinzuzufügen.

Generieren eines Clients

Um einen Microsoft Graph-Client mit Kiota zu generieren, müssen Sie eine OpenAPI-Beschreibung für Microsoft Graph angeben. OpenAPI-Beschreibungen für Microsoft Graph finden Sie hier:

  • v1.0-API: https://aka.ms/graph/v1.0/openapi.yaml
  • Beta-API: https://aka.ms/graph/beta/openapi.yaml

Um die Gesamtgröße des generierten Clients zu reduzieren, müssen Sie die von Ihrer App verwendeten Microsoft Graph-APIs identifizieren und die --include-path Parameter oder --exclude-path für den Befehl Kiota generate verwenden, um nur die Modelle und Anforderungsgeneratoren für diese APIs zu generieren.

Betrachten Sie beispielsweise eine Anwendung, die die Aufgaben-APIs zum Verwalten der Aufgaben und Aufgabenlisten eines Benutzers verwendet. Auf alle erforderlichen APIs, z. B. Aufgabenlisten auflisten und Aufgabe erstellen, wird über URLs unter der Anforderungs-URL /me/todo zugegriffen.

  • Aufgabenlisten auflisten: GET /me/todo/lists
  • Aufgabe erstellen: POST /me/todo/lists/{listId}/tasks

In diesem Fall können Sie den --include-path -Parameter nur verwenden, um Modelle und Anforderungs-Generatoren für APIs unter dem /me/todo Pfad zu generieren:

kiota generate --openapi https://aka.ms/graph/v1.0/openapi.yaml --include-path /me/todo/** ...

Beispiel

Sehen wir uns ein Beispiel für das Generieren eines Clients für C# an, um die To Do-APIs aufzurufen. Mithilfe der Microsoft Graph .NET-Clientbibliothek kann die App die Aufgabenlisten des angemeldeten Benutzers mit dem folgenden Code abrufen.

using Azure.Identity;
using Microsoft.Graph;

var credential = new DeviceCodeCredential();
var graphClient = new GraphServiceClient(credential);

var taskLists = await graphClient.Me.Todo.Lists.GetAsync();

Alternativ kann die App eine von Kiota generierte Bibliothek verwenden, um dieselbe API aufzurufen. Für einen Client, der mit dem folgenden Befehl generiert wird:

kiota generate --openapi https://aka.ms/graph/v1.0/openapi.yaml --include-path /me/todo/** --language CSharp --class-name TaskClient --namespace-name MyTaskApp.Client --output ./src/MyTaskApp/Client

Der entsprechende Code sieht wie folgt aus:

using Azure.Identity;
using Microsoft.Kiota.Authentication.Azure;
using Microsoft.Kiota.Http.HttpClientLibrary;
using MyTaskApp.Client;

// The auth provider will only authorize requests to
// the allowed hosts, in this case Microsoft Graph
var allowedHosts = new [] { "graph.microsoft.com" };
var graphScopes = new [] { "User.Read" };

var credential = new DeviceCodeCredential();
var authProvider = new AzureIdentityAuthenticationProvider(credential, allowedHosts, scopes: graphScopes);
var adapter = new HttpClientRequestAdapter(authProvider);
var taskClient = new TaskClient(adapter);

var taskLists = await tasksClient.Me.Todo.Lists.GetAsync();

Verwenden von Features aus der Kernbibliothek

Das Abrufen der Aufgabenlisten des Benutzers kann eine ausgelagerte Antwort zurückgeben. Die Microsoft Graph-Kernbibliotheken stellen eine Seiteniteratorklasse bereit, die Entwickler verwenden können, um die Sammlung von Aufgabenlisten zu durchlaufen.

Fügen Sie beispielsweise in C# eine Abhängigkeit zu Microsoft.Graph.Core (dotnet add package Microsoft.Graph.Core) hinzu, und verwenden Sie dann die PageIterator -Klasse, um die Auflistung zu durchlaufen.

using MyTaskApp.Client;
using MyTaskApp.Client.Models;
using Microsoft.Graph;

// Using adapter and taskLists from previous example
var pageIterator = PageIterator<TodoTaskList, TodoTaskListCollectionResponse>
    .CreatePageIterator(
        adapter,
        taskLists,
        (taskList) =>
        {
            Console.WriteLine(taskList.DisplayName);
            return true;
        });

await pageIterator.IterateAsync();