SDK を使って Microsoft Graph に対してクエリを実行する

完了

Microsoft Graph SDK は、Microsoft Graph にアクセスする高品質かつ効率的で、回復性を備えたアプリケーションの構築を簡素化するように設計されています。 SDK には、サービス ライブラリとコア ライブラリの 2 つのコンポーネントが含まれています。

サービス ライブラリには、Microsoft Graph メタデータから生成されたモデルと要求ビルダーが含まれており、豊富で発見可能なエクスペリエンスを提供します。

コア ライブラリには、すべての Microsoft Graph サービスの操作を強化する一連の機能が用意されています。 再試行の処理、セキュリティで保護されたリダイレクト、透過的な認証、ペイロードの圧縮に対する埋め込みサポートにより、複雑さが増すことなくアプリケーションと Microsoft Graph との対話の品質が向上し、すべてを完全に制御できます。 コア ライブラリでは、コレクションのページングやバッチ要求の作成などの一般的なタスクもサポートされています。

このユニットでは、使用可能な SDK について学習し、最も一般的な操作のコード例をいくつか確認します。

Note

このユニットのコード サンプルは、バージョン 5.65 の Microsoft Graph .NET SDK に基づいています。

Microsoft Graph .NET SDK をインストールする

Microsoft Graph .NET SDK は、次の NuGet パッケージに含まれています。

  • Microsoft.Graph - fluent API を使って v1.0 エンドポイントにアクセスするためのモデルと要求ビルダーが含まれています。 Microsoft.Graph には Microsoft.Graph.Core への依存関係があります。
  • Microsoft.Graph.Beta - fluent API を使って beta エンドポイントにアクセスするためのモデルと要求ビルダーが含まれています。 Microsoft.Graph.Beta には Microsoft.Graph.Core への依存関係があります。
  • Microsoft.Graph.Core - Microsoft Graph を呼び出すためのコア ライブラリです。

Microsoft Graph クライアントを作成する

Microsoft Graph クライアントは、Microsoft Graph への呼び出しが簡単になるように設計されています。 アプリケーションの有効期間中は、1 つのクライアント インスタンスを使えます。 次のコード例は、Microsoft Graph クライアントのインスタンスを作成する方法を示しています。 認証プロバイダーによって、アプリケーションのアクセス トークンの取得が処理されます。 サポートされるクライアントのシナリオは、アプリケーション プロバイダーによって異なります。 ご自身のシナリオに適したプロバイダーとオプションの詳細については、認証プロバイダーの選択に関する記事を参照してください。

var scopes = new[] { "User.Read" };

// Multi-tenant apps can use "common",
// single-tenant apps must use the tenant ID from the Azure portal
var tenantId = "common";

// Value from app registration
var clientId = "YOUR_CLIENT_ID";

// using Azure.Identity;
var options = new TokenCredentialOptions
{
    AuthorityHost = AzureAuthorityHosts.AzurePublicCloud
};

// Callback function that receives the user prompt
// Prompt contains the generated device code that you must
// enter during the auth process in the browser
Func<DeviceCodeInfo, CancellationToken, Task> callback = (code, cancellation) => {
    Console.WriteLine(code.Message);
    return Task.FromResult(0);
};

// /dotnet/api/azure.identity.devicecodecredential
var deviceCodeCredential = new DeviceCodeCredential(
    callback, tenantId, clientId, options);

var graphClient = new GraphServiceClient(deviceCodeCredential, scopes);

Microsoft Graph から情報を読み取る

Microsoft Graph から情報を読み取るには、最初に要求オブジェクトを作成してから、その要求に対して GET メソッドを実行する必要があります。

// GET https://graph.microsoft.com/v1.0/me

var user = await graphClient.Me
    .GetAsync();

エンティティの一覧を取得する

エンティティの一覧を取得するのは、要求を構成するための他のオプションがある点を除き、単一のエンティティを取得するのと似ています。 $filter クエリ パラメーターを使うと、結果セットを、指定した条件に一致する行のみに減らせます。 $orderBy クエリ パラメーターを使用すると、指定したプロパティで並べ替えたエンティティの一覧を提供するようにサーバーに要求できます。

// GET https://graph.microsoft.com/v1.0/me/messages?
// $select=subject,sender&$filter=subject eq 'Hello world'
var messages = await graphClient.Me.Messages
    .GetAsync(requestConfig =>
    {
        requestConfig.QueryParameters.Select =
            ["subject", "sender"];
        requestConfig.QueryParameters.Filter =
            "subject eq 'Hello world'";
    });

エンティティを削除する

削除要求は、エンティティを取得する要求と同じ方法で構築しますが、GET ではなく DELETE 要求を使います。

// DELETE https://graph.microsoft.com/v1.0/me/messages/{message-id}
// messageId is a string containing the id property of the message
await graphClient.Me.Messages[messageId]
    .DeleteAsync();

新しいエンティティを作成する

fluent スタイルおよびテンプレート ベースの SDK の場合は、POST メソッドを使用して新しい項目をコレクションに追加できます。

// POST https://graph.microsoft.com/v1.0/me/calendars
var calendar = new Calendar
{
    Name = "Volunteer",
};

var newCalendar = await graphClient.Me.Calendars
    .PostAsync(calendar);

その他のリソース