# Microsoft Graph Get

@microsoft/microsoft-graph-client SDK는 Microsoft Graph API를 사용하는 데 도움이 되는 JavaScript 클라이언트 라이브러리입니다. SDK를 사용하면 select, skip, top, orderby 및 filter와 같은 쿼리 매개변수를 간단하게 지정하여 Microsoft Graph API를 호출할 수 있습니다.

SDK에서 GET 메소드를 호출할 때는 다음과 같은 방법으로 각각의 매개변수를 지정할 수 있습니다.

## paramters

다음은 MS Graph Get 메쏘드에서 표준적으로 제공하는 파라미터입니다.
일부 path에서는 지원되지 않는 파라미터들이 있을 수 있습니다. 이 경우에는 해당 파라미터를 공백으로 두시기 바랍니다.

- path

path는 api() 함수의 매개변수로 리소스의 경로를 의미합니다.

api() 함수는 @microsoft/microsoft-graph-client SDK에서 가장 기본이 되는 함수로, Microsoft Graph API를 호출하고자 하는 리소스의 경로를 인자로 받습니다. 예를 들어, /me/messages는 현재 인증된 사용자의 수신함에서 메시지를 가져오는 데 사용되는 리소스 경로입니다.

api() 함수를 호출하면 Microsoft Graph API를 호출하기 위한 HTTP 요청 객체를 반환합니다. 이 요청 객체에는 쿼리 매개변수를 추가할 수 있는 select(), skip(), top(), orderby(), filter()와 같은 메소드들이 포함되어 있습니다.

예를 들어, 다음과 같이 api() 함수와 select() 메소드를 함께 사용하여 현재 사용자의 이름과 메일박스 크기를 가져올 수 있습니다.

```
const client = Client.init({
  authProvider: (done) => {
    done(null, token);
  }
});

client
  .api('/me')
  .select('displayName,mailboxSettings')
  .get((err, res) => {
    console.log(res);
  });
```

위의 예에서 api() 함수는 /me 경로를 가리키는 HTTP 요청 객체를 반환하고, select() 메소드는 displayName과 mailboxSettings 속성만 반환하도록 설정합니다. 그리고 get() 메소드를 호출하여 요청을 보내고 결과를 받습니다.

- select

select 매개변수는 select 메소드를 사용하여 지정할 수 있습니다. 예를 들어, 다음과 같이 사용할 수 있습니다.

```
const client = Client.init({
  authProvider: (done) => {
    done(null, token);
  }
});

client
  .api('/me/messages')
  .select('subject,body,sender')
  .get((err, res) => {
    console.log(res);
  });
```

위의 예에서는 select 메소드를 사용하여 반환할 속성을 지정합니다.

- skip

skip 매개변수는 skip 메소드를 사용하여 지정할 수 있습니다. 예를 들어, 다음과 같이 사용할 수 있습니다.

```
const client = Client.init({
  authProvider: (done) => {
    done(null, token);
  }
});

client
  .api('/me/messages')
  .skip(10)
  .get((err, res) => {
    console.log(res);
  });
```

위의 예에서는 skip 메소드를 사용하여 처음 10개의 항목을 건너뛰고 그 다음 항목부터 반환합니다.

- top

top 매개변수는 top 메소드를 사용하여 지정할 수 있습니다. 예를 들어, 다음과 같이 사용할 수 있습니다.

```
const client = Client.init({
  authProvider: (done) => {
    done(null, token);
  }
});

client
  .api('/me/messages')
  .top(5)
  .get((err, res) => {
    console.log(res);
  });
```

위의 예에서는 top 메소드를 사용하여 최대 5개의 항목만 반환합니다.

- orderby

orderby 매개변수는 orderby 메소드를 사용하여 지정할 수 있습니다. 예를 들어, 다음과 같이 사용할 수 있습니다.

```
const client = Client.init({
  authProvider: (done) => {
    done(null, token);
  }
});

client
  .api('/me/messages')
  .orderby('createdDateTime desc')
  .get((err, res) => {
    console.log(res);
  });
```

위의 예에서는 orderby 메소드를 사용하여 createdDateTime 속성을 내림차순으로 정렬하여 반환합니다.

- filter

filter() 메소드를 사용하여 Microsoft Graph API의 GET 요청에서 필터링을 수행할 수 있습니다.
filter() 메소드는 문자열을 인자로 받으며, 이 문자열은 OData v4 스타일의 필터 식을 지정합니다.

예를 들어, 현재 사용자의 이메일 메시지 중 "Hello"라는 단어가 포함된 메시지만 가져오고 싶다면 다음과 같이 filter() 메소드를 사용할 수 있습니다.

```
const client = Client.init({
  authProvider: (done) => {
    done(null, token);
  }
});

client
  .api('/me/messages')
  .filter("contains(body/content, 'Hello')")
  .get((err, res) => {
    console.log(res);
  });
```

## 결과 형식

Microsoft Graph API에서 GET 메서드를 사용하여 데이터를 가져올 때 반환되는 JSON 포맷의 속성 구조는 각각의 API마다 다르기 때문에, 여러 종류의 JSON 속성 구조가 존재합니다. 하지만, 일반적으로 Microsoft Graph API에서 반환되는 JSON 데이터는 다음과 같은 속성 구조를 가집니다.

- @odata.context

JSON 데이터의 메타데이터를 포함하는 속성입니다. 이 속성은 Graph API에서 반환되는 모든 JSON 데이터에 포함되며, JSON 데이터의 컨텍스트와 관련된 정보를 포함합니다.

- value

API 호출 결과로 반환된 데이터가 배열(Array) 형태로 반환되는 경우, value 속성은 각각의 JSON 객체가 저장된 배열을 나타냅니다. 예를 들어, 사용자 목록을 가져올 때 반환되는 JSON 데이터에서 value 속성은 사용자 목록(JSON 객체)이 저장된 배열을 포함합니다.

- id

객체의 고유 식별자를 나타내는 속성입니다. 이 속성은 대부분의 API에서 반환되는 JSON 데이터에 포함됩니다.

- displayName

사용자, 그룹 등의 이름을 나타내는 속성입니다. 이 속성은 대부분의 API에서 반환되는 JSON 데이터에 포함됩니다.

- mail, userPrincipalName 등의 속성

사용자의 이메일 주소, 사용자 이름 등과 같은 사용자와 관련된 속성입니다. 이 속성은 대부분의 사용자 관련 API에서 반환되는 JSON 데이터에 포함됩니다.

- start, end, location 등의 속성

일정, 회의 등과 같은 일정과 관련된 속성입니다. 이 속성은 일정 관련 API에서 반환되는 JSON 데이터에 포함됩니다.

- contentType, size, webUrl 등의 속성

파일과 관련된 속성입니다. 이 속성은 파일 관련 API에서 반환되는 JSON 데이터에 포함됩니다.

이 외에도, API에 따라 다양한 속성이 존재하며, 각각의 API에서 반환되는 JSON 데이터의 속성 구조는 해당 API의 문서를 참조하여 확인할 수 있습니다.

다음은 '/users'의 결과 샘플입니다.

```
{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users",
  "value": [
    {
      "businessPhones": [],
      "displayName": "John Doe",
      "givenName": "John",
      "jobTitle": "Software Engineer",
      "mail": "johndoe@contoso.com",
      "mobilePhone": "+1 123 456 7890",
      "officeLocation": "Building 1",
      "preferredLanguage": "en-US",
      "surname": "Doe",
      "userPrincipalName": "johndoe@contoso.com",
      "id": "7e98e318-05ec-4dcf-977d-8d6d0a2c23f1"
    },
    {
      "businessPhones": [],
      "displayName": "Jane Doe",
      "givenName": "Jane",
      "jobTitle": "Sales Manager",
      "mail": "janedoe@contoso.com",
      "mobilePhone": "+1 123 456 7890",
      "officeLocation": "Building 2",
      "preferredLanguage": "en-US",
      "surname": "Doe",
      "userPrincipalName": "janedoe@contoso.com",
      "id": "6a2ca8c6-85d6-4ee6-a112-6a4f6b4d0414"
    },
    ...
  ]
}
```
