Microsoft Graph SDK を使用して API 呼び出しを作成する

Microsoft Graph SDK サービス ライブラリには、すべての API 要求を作成するための開始点として使用するクライアント クラスが用意されています。 クライアント クラスには 2 つのスタイルがあります。1 つは Fluent インターフェイスを使用してリクエスト (client.Users["user-id"].Manager など) を作成し、もう 1 つはパス文字列 (api("/users/user-id/manager")など) を受け入れます。 要求オブジェクトがある場合は、フィルター処理や並べ替えなど、さまざまなオプションを指定できます。最後に、実行する操作の種類を選択します。

クライアント クラスを持たない Microsoft Graph PowerShell SDK もあります。 その代わりに、すべての要求は PowerShell コマンドとして表されます。 たとえば、ユーザーのマネージャーを取得するためのコマンドは Get-MgUserManager です。 API 呼び出しのコマンドを見つける方法の詳細については、「Microsoft Graph PowerShell SDK のナビゲーション」を参照してください。

Microsoft Graph から情報を読みとる

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

// GET https://graph.microsoft.com/v1.0/me
var user = await graphClient.Me
    .GetAsync();

$selectを使用して、返されるプロパティを制御する

エンティティを取得するときに、すべてのプロパティが自動的に取得されるわけではありません。場合によっては、明示的に選択する必要があります。 また、一部のシナリオでは、プロパティの既定のセットを返す必要はありません。 必要なプロパティのみを選択すると、リクエストのパフォーマンスを向上させることができます。 リクエストをカスタマイズして、プロパティのリストに $select クエリ パラメータを含めることができます。

// GET https://graph.microsoft.com/v1.0/me?$select=displayName,jobTitle
var user = await graphClient.Me
    .GetAsync(requestConfiguration =>
    {
        requestConfiguration.QueryParameters.Select =
            ["displayName", "jobTitle"];
    });

エンティティのリストを取得する

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

注:

Microsoft Entra リソースに対する一部の要求では、高度なクエリ機能を使用する必要があります。 不適切な要求、サポートされていないクエリ、またはクエリ パラメーターやConsistencyLevelヘッダーなど、予期しない結果を含む$count応答を示す応答を取得すると、要求が成功する可能性があります。 詳細と例については、「 ディレクトリ オブジェクトの高度なクエリ機能」を参照してください。

// 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'";
    });

エンティティの一覧を取得するときに返されるオブジェクトは、ページ コレクションである可能性があります。 エンティティの完全なリストを取得する方法の詳細については、ページングによるコレクション を参照してください。

コレクションのアイテムにアクセスする

Fluent スタイルをサポートする SDK の場合、エンティティのコレクションには配列インデックスを使用してアクセスできます。 テンプレート ベースの SDK の場合は、コレクションの後のパス セグメントに項目識別子を埋め込むので十分です。 PowerShell の場合、識別子はパラメーターとして渡されます。

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

フィルターを$expand使用すると、関連エンティティまたはエンティティのコレクションを、メイン エンティティを要求すると同時に要求できます。

// GET https://graph.microsoft.com/v1.0/me/messages/{message-id}?$expand=attachments
// messageId is a string containing the id property of the message
var message = await graphClient.Me.Messages[messageId]
    .GetAsync(requestConfig =>
        requestConfig.QueryParameters.Expand =
            ["attachments"]);

エントリを削除する

削除リクエストは、エンティティを取得するリクエストと同じ方法で作成されますが、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();

POST リクエストを作成して新しいエンティティを作成する

Fluent スタイルをサポートする SDK の場合、Add メソッドを使用して新しいアイテムをコレクションに追加できます。 テンプレート ベースの SDK の場合、リクエスト オブジェクトは post メソッドを公開します。 PowerShell の場合、コマンドは New-* 追加するエンティティにマップされるパラメーターを受け入れます。 作成されたエンティティは、呼び出しから返されます。

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

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

PATCH を使用して既存のエンティティを更新する

Microsoft Graph のほとんどの更新はメソッドを PATCH 使用して実行されるため、渡すオブジェクトに変更するプロパティを含める必要があります。

// PATCH https://graph.microsoft.com/v1.0/teams/{team-id}
var team = new Team
{
    FunSettings = new TeamFunSettings
    {
        AllowGiphy = true,
        GiphyContentRating = GiphyRatingType.Strict,
    },
};

// teamId is a string containing the id property of the team
await graphClient.Teams[teamId]
    .PatchAsync(team);

HTTP ヘッダーを使用してリクエストの動作を制御する

関数を使用して、カスタム ヘッダーを要求に Header() アタッチできます。 PowerShellの場合、ヘッダーの追加は Invoke-GraphRequest メソッドでのみ可能です。 一部の Microsoft Graph シナリオでは、カスタム ヘッダーを使用して要求の動作を調整します。

// GET https://graph.microsoft.com/v1.0/me/events
var events = await graphClient.Me.Events
    .GetAsync(requestConfig =>
    {
        requestConfig.Headers.Add(
            "Prefer", @"outlook.timezone=""Pacific Standard Time""");
    });

カスタム クエリ パラメータを提供する

Fluent スタイルをサポートする SDK の場合は、オブジェクトの QueryOptions 一覧を使用してカスタム クエリ パラメーター値を指定できます。 テンプレート ベースの SDK の場合、パラメーターは URL エ ンコードされ、リクエスト URL に追加されます。 PowerShell と Go の場合、特定の API に対して定義されたクエリ パラメーターは、対応するコマンドにパラメーターとして公開されます。

// GET https://graph.microsoft.com/v1.0/me/calendarView?
// startDateTime=2023-06-14T00:00:00Z&endDateTime=2023-06-15T00:00:00Z
var events = await graphClient.Me.CalendarView
    .GetAsync(requestConfiguration =>
    {
        requestConfiguration.QueryParameters.StartDateTime =
            "2023-06-14T00:00:00Z";
        requestConfiguration.QueryParameters.EndDateTime =
            "2023-06-15T00:00:00Z";
    });