# HTTP API

> Create and manage schedule configurations that emit events at set or recurring moments using the REST API.

원시 HTTP API를 사용하여 일정 설정을 관리할 수 있습니다. 일정 구성을 배포하면 특정 시점에, 혹은 반복해서 발생하는 이벤트를 발생시키는 일정이 생성됩니다.

## API 사용##using-the-api

[Scheduler 관리자 API](https://services.docs.unity.com/scheduler-admin/v1/) 기술 자료에는 일정 생성, 읽기, 삭제 등의 관리자 작업이 자세히 설명되어 있습니다.

기술 자료는 인증, 엔드포인트, 요청 및 응답 형식에 대한 정보와 예시를 소개합니다. OpenAPI 포맷으로 기술 자료를 다운로드하여 직접 자동화를 설정하는 데 활용할 수 있습니다.

API를 사용하려면 [서비스 계정](../../authentication)을 사용하여 인증해야 합니다.

### 인증 헤더##authorization-header

요청을 인증하려면 [기본 인증](../../authentication#authenticating-trusted-clients-basic-authentication)을 사용합니다. 서비스 계정을 생성하고 `<KEY_ID>:<SECRET_KEY>`를 base64로 인코딩하여 해당 값을 `Authorization` 헤더 값으로 사용합니다.

```text
--header 'Authorization: Basic <SERVICE_ACCOUNT_CREDENTIALS_ENCODED>' \
```

### 일정 배포##deploy-schedules

다음 요청을 전송하여 반복 일정 구성을 원격 환경에 배포할 수 있습니다.

```bash
curl 'https://services.api.unity.com/scheduler/v1/projects/<PROJECT_ID>/environments/<ENVIRONMENT_ID>/configs' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <SERVICE_ACCOUNT_CREDENTIALS_ENCODED>' \
--data '{
  "name": "Example Recurring every hour",
  "eventName": "example-event",
  "type": "recurring",
  "schedule": "0 * * * *",
  "payloadVersion": 1,
  "payload": "{}"
}'
```

성공적인 응답에는 일정 ID가 포함됩니다. 예제는 아래와 같습니다.

```json
{
    "id": "f58a376c-2d4d-50a9-a231-61477fdaf5da"
}
```

이 ID를 사용하여 일정 구성을 검색하거나 삭제할 수 있습니다.

일정 구성을 배포하면, 지정된 시간에 자동으로 트리거되어 Triggers 서비스로 이벤트를 전송합니다.

### 일정 검색##retrieve-schedules

다음 요청을 전송하여 배포한 일정을 검사할 수 있습니다.

```bash
curl 'https://services.api.unity.com/scheduler/v1/projects/<PROJECT_ID>/environments/<ENVIRONMENT_ID>/configs/<CONFIG_ID>' \
--header 'Authorization: Basic <SERVICE_ACCOUNT_CREDENTIALS_ENCODED>'
```

응답의 예시는 다음과 같습니다.

```json
{
  "id": "string",
  "name": "Example Recurring every hour",
  "eventName": "example-event",
  "type": "recurring",
  "schedule": "0 * * * *",
  "payloadVersion": 1,
  "payload": "{}"
}
```

응답에는 다음 필드가 포함됩니다.

* `id`: 일정 구성 ID입니다.
* `name`: 일정 구성 이름입니다.
* `eventName`: 일정이 트리거될 때 발생시키는 이벤트의 이름입니다.
* `type`: 일정 구성의 유형입니다. `recurring` 또는 `one-time`
* `schedule`: `type` 필드에 따라 일정 구성은 크론 포맷이거나 RFC3339 타임스탬프입니다.
* `payloadVersion`: 페이로드 버전입니다.
* `payload`: Cloud Code 스크립트나 모듈로 파라미터를 전달하기 위한 이벤트 페이로드로 사용되는 `JSON` 오브젝트입니다.

다음 요청을 전송하면 배포한 모든 일정을 미리 볼 수 있습니다.

```bash
curl 'https://services.api.unity.com/scheduler/v1/projects/<PROJECT_ID>/environments/<ENVIRONMENT_ID>/configs' \
--header 'Authorization: Basic <SERVICE_ACCOUNT_CREDENTIALS_ENCODED>'
```

응답의 예시는 다음과 같습니다.

```json
{
  "configs": [
    {
      "id": "a0fa56fd-9763-5590-9452-769be3e6c5bb",
      "name": "Example One Time 2",
      "eventName": "example-event",
      "type": "one-time",
      "schedule": "2024-01-14T07:20:50Z",
      "payloadVersion": 1,
      "payload": "{}"
    },
    {
      "id": "f58a376c-2d4d-50a9-a231-61477fdaf5da",
      "name": "Example Recurring every hour",
      "eventName": "example-event",
      "type": "recurring",
      "schedule": "0 * * * *",
      "payloadVersion": 1,
      "payload": "{}"
    },
    {
      "id": "fb3e6636-1a99-5a82-97b4-74b5f6678bb2",
      "name": "Example One Time",
      "eventName": "example-event",
      "type": "one-time",
      "schedule": "2024-01-12T07:20:50Z",
      "payloadVersion": 1,
      "payload": "{}"
    }
  ],
  "after": ""
}
```

쿼리 파라미터를 설정하여 페이지를 지정할 수도 있습니다. 예를 들어, 처음 두 개의 구성을 가져오려면 다음 요청을 전송하면 됩니다.

```bash
curl 'https://services.api.unity.com/scheduler/v1/projects/<PROJECT_ID>/environments/<ENVIRONMENT_ID>/configs?limit=2' \
--header 'Authorization: Basic <SERVICE_ACCOUNT_CREDENTIALS_ENCODED>'
```

그러면 다음과 같은 응답을 받습니다.

```json
{
  "configs": [
    {
      "id": "f58a376c-2d4d-50a9-a231-61477fdaf5da",
      "name": "Example Recurring every hour",
      "eventName": "example-event",
      "type": "recurring",
      "schedule": "0 * * * *",
      "payloadVersion": 1,
      "payload": "{}"
    },
    {
      "id": "a0fa56fd-9763-5590-9452-769be3e6c5bb",
      "name": "Example One Time 2",
      "eventName": "example-event",
      "type": "one-time",
      "schedule": "2024-01-14T07:20:50Z",
      "payloadVersion": 1,
      "payload": "{}"
    }
  ],
  "after": "<TOKEN>"
}
```

`after` 토큰을 사용하면 결과의 다음 페이지를 볼 수 있습니다. 예제는 아래와 같습니다.

```bash
curl 'https://services.api.unity.com/scheduler/v1/projects/<PROJECT_ID>/environments/<ENVIRONMENT_ID>/configs?limit=2&after=<TOKEN>' \
--header 'Authorization: Basic <SERVICE_ACCOUNT_CREDENTIALS_ENCODED>'
```

마지막 일정은 다음과 같이 반환됩니다.

```json
{
    "configs": [
        {
            "id": "fb3e6636-1a99-5a82-97b4-74b5f6678bb2",
            "name": "Example One Time",
            "eventName": "example-event",
            "type": "one-time",
            "schedule": "2024-01-12T07:20:50Z",
            "payloadVersion": 1,
            "payload": "{}"
        }
    ],
    "after": ""
}
```

### 일정 삭제##delete-schedules

다음 요청을 전송하여 일정 구성을 삭제할 수 있습니다.

```bash
curl --request DELETE 'https://services.api.unity.com/scheduler/v1/projects/<PROJECT_ID>/environments/<ENVIRONMENT_ID>/configs/<CONFIG_ID>' \
--header 'Authorization: Basic <SERVICE_ACCOUNT_CREDENTIALS_ENCODED>'
```

빈 응답은 삭제에 성공했음을 나타냅니다.
