Share via


Kiota を使用して Microsoft Graph クライアント ライブラリを生成する

Microsoft では、多くの一般的なプログラミング言語で Microsoft Graph API にアクセスするためのすぐに使用できる SDK を公開しています。 これらの SDK は、Microsoft Graph にアクセスし、適切なパッケージ マネージャーを使用して SDK をインストールし、コーディングを開始する便利な方法です。 ただし、Microsoft Graph REST API のサイズとスコープにより、これらのライブラリはかなり大きくなります。 全体的なインストール サイズが懸念されるアプリケーションの場合、特にアプリケーションが Microsoft Graph のサブセットのみを使用している場合は、このサイズが大きくなると問題が発生します。 この場合、アプリケーションで使用される Microsoft Graph の部分のみを対象とするカスタム API クライアントを Kiota で生成すると、アプリの全体的なインストール サイズが小さくなります。

生成されたクライアントと Microsoft SDK の使用に関する考慮事項

Kiota で生成されたクライアントを使用すると、Microsoft が発行した SDK を使用する場合よりも、いくつかの長所と短所があります。

メリット

  • Kiota で生成されたクライアントは、Microsoft が発行した SDK と同じ規則とパターンを使用します。 Microsoft SDK の使用に既に慣れている場合は、生成されたライブラリを使用すると同様のエクスペリエンスが得られます。
  • 生成されたクライアントは、Microsoft 発行 SDK の Microsoft Graph コア ライブラリ部分と互換性があるため、 ページ反復子バッチ要求大きなファイルアップロードなどの機能を使用する必要がある場合は、コア ライブラリに依存関係を追加できます。

デメリット

  • Kiota でのクライアント生成の最終的な結果はソース ファイルであり、プロジェクトに追加する必要があります。 これにより、コード ベースの全体的なサイズが大きくなります。
  • 今後、アプリケーションで他の Microsoft Graph API を呼び出す必要がある場合は、クライアントを再生成して、必要なモデルと要求ビルダーを追加する必要があります。

クライアントの生成

Kiota で Microsoft Graph クライアントを生成するには、Microsoft Graph の OpenAPI の説明を指定する必要があります。 Microsoft Graph の OpenAPI の説明は、次のとおりです。

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

生成されたクライアントの全体的なサイズを小さくするには、アプリで使用される Microsoft Graph API を特定し、 または --exclude-path パラメーターを使用して Kiota generate コマンドを使用--include-pathして、それらの API のモデルと要求ビルダーのみを生成する必要があります。

たとえば、 To Do API を 使用してユーザーの To Do タスクとタスク リストを管理するアプリケーションを考えてみましょう。 リスト タスク リストタスクの作成など、必要なすべての API には、要求 URL の下 /me/todo の URL を介してアクセスされます。

  • タスク リストの一覧表示: GET /me/todo/lists
  • タスクの作成: POST /me/todo/lists/{listId}/tasks

この場合、 パラメーターを使用して、パスの --include-path/me/todo にある API のモデルと要求ビルダーのみを生成できます。

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

To Do API を呼び出す C# 用のクライアントを生成する例を見てみましょう。 Microsoft Graph .NET クライアント ライブラリを使用して、アプリはサインインしているユーザーのタスク リストを次のコードで取得できます。

using Azure.Identity;
using Microsoft.Graph;

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

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

または、アプリで Kiota によって生成されたライブラリを使用して、同じ API を呼び出す場合もあります。 次のコマンドを使用して生成されたクライアントの場合:

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

同等のコードは次のようになります。

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();

コア ライブラリの機能の使用

ユーザーのタスク リストを取得すると、 ページングされた応答が返される可能性があります。 Microsoft Graph コア ライブラリは、開発者がタスク リストのコレクションをページングするために使用できる ページ反復子 クラスを提供します。

たとえば、C# で 依存関係を Microsoft.Graph.Core (dotnet add package Microsoft.Graph.Core) に追加し、 クラスを PageIterator 使用してコレクションをページングします。

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();