SDK를 사용하여 Microsoft Graph 쿼리

완료됨

Microsoft Graph SDK는 Microsoft Graph에 액세스하는 고품질의 효율적이고 복원력 있는 애플리케이션 구축을 간소화하도록 설계되었습니다. SDK에는 서비스 라이브러리와 핵심 라이브러리의 두 구성 요소가 포함되어 있습니다.

서비스 라이브러리에는 풍부하고 검색 가능한 환경을 제공하기 위해 Microsoft Graph 메타데이터에서 생성된 모델 및 요청 작성기가 포함되어 있습니다.

핵심 라이브러리는 모든 Microsoft Graph 서비스의 작업을 향상시키는 기능 집합을 제공합니다. 재시도 처리, 보안 리디렉션, 투명한 인증 및 페이로드 압축에 대한 지원을 포함하면 복잡성이 추가되지 않고 Microsoft Graph와 애플리케이션의 상호 작용 품질을 향상시킬 수 있지만 완전히 제어할 수 있습니다. 또한 핵심 라이브러리는 컬렉션을 통해 페이징 및 일괄 처리 요청 만들기와 같은 일반적인 작업을 지원합니다.

이 단원에서는 사용 가능한 SDK에 대해 알아보고 가장 일반적인 작업의 일부 코드 예제를 확인합니다.

참고 항목

이 단원의 코드 샘플은 Microsoft Graph .NET SDK 버전 5.65를 기반으로 합니다.

Microsoft Graph .NET SDK 설치

Microsoft Graph .NET SDK는 다음 NuGet 패키지에 포함되어 있습니다.

  • Microsoft.Graph - 흐름 API를 통해 v1.0 엔드포인트에 액세스하기 위한 모델 및 요청 빌더를 포함합니다. Microsoft.GraphMicrosoft.Graph.Core에 종속되어 있습니다.
  • Microsoft.Graph.Beta - 흐름 API를 통해 beta 엔드포인트에 액세스하기 위한 모델 및 요청 빌더를 포함합니다. Microsoft.Graph.BetaMicrosoft.Graph.Core에 종속되어 있습니다.
  • Microsoft.Graph.Core - Microsoft Graph에 호출하기 위한 핵심 라이브러리입니다.

Microsoft Graph 클라이언트 만들기

Microsoft Graph 클라이언트는 Microsoft Graph에 간단하게 호출할 수 있도록 설계되었습니다. 애플리케이션의 수명 동안 단일 클라이언트 인스턴스를 사용할 수 있습니다. 다음 코드 예제에서는 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'";
    });

엔터티 삭제

삭제 요청은 엔터티를 검색하는 요청과 동일한 방식으로 생성되지만 DELETE 대신 GET 요청을 사용합니다.

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

새 엔터티 만들기

흐름 스타일 및 템플릿 기반 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);

다른 리소스