# HTTP API

> Manage Cloud Code modules using raw HTTP APIs and the Admin API.

원시 HTTP API를 사용하여 Cloud Code 모듈을 관리할 수 있습니다.

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

* [관리자 API](https://services.docs.unity.com/cloud-code-admin/v1#tag/cloud-code-modules) 기술 자료에는 모듈 생성, 읽기, 업데이트, 삭제 등 관리자 작업이 자세히 설명되어 있습니다.
* [클라이언트 API](https://services.docs.unity.com/cloud-code/v1#tag/cloud-code/operation/runmodule) 기술 자료에는 모듈 실행 등 클라이언트 측 작업이 자세히 설명되어 있습니다.

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

관리자 API를 사용하려면 [서비스 계정](https://services.docs.unity.com/docs/service-account-auth/)을 사용하여 인증해야 합니다.

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

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

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

### 모듈 배포##deploy-modules

모듈을 배포하려면 먼저 모듈을 생성해야 합니다. API를 사용해 모듈을 배포하는 경우 [수동 워크플로](../manual-workflow)를 따르는 것이 좋을 수 있습니다. 다음 요청을 전송하여 모듈 ZIP 파일을 원격 환경에 배포할 수 있습니다.

```bash
curl 'https://services.api.unity.com/cloud-code/v1/projects/<PROJECT_ID>/environments/<ENVIRONMENT_ID>/modules' \
--header 'Authorization: Basic <SERVICE_ACCOUNT_CREDENTIALS_ENCODED>' \
--form 'name="Module"' \
--form 'tags="{}"' \
--form 'language="CS"' \
--form 'file=@"Module.zip"'
```

> **Note:**
>
> **참고**: 스토리지 제한 사항이 적용됩니다. [Cloud Code 제한 사항](../../reference/limits#cloud-code-c-modules)을 확인하십시오.

모듈을 배포하고 나면 모듈 엔드포인트 호출을 시작할 수 있습니다.

### 모듈 업데이트##update-modules

다음 요청을 전송하여 모듈 파일, 해당 태그 또는 둘 다를 업데이트할 수 있습니다.

```bash
curl--request PATCH 'https://services.api.unity.com/cloud-code/v1/projects/<PROJECT_ID>/environments/<ENVIRONMENT_ID>/modules/<MODULE_NAME>' \
--header 'Authorization: Basic <SERVICE_ACCOUNT_CREDENTIALS_ENCODED>' \
--form 'tags="{}"' \
--form 'file=@"Module.zip"'
```

모듈 엔드포인트에 대한 호출은 업데이트된 모듈 파일을 사용합니다.

### 모듈 가져오기##retrieve-modules

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

```bash
curl --location 'https://services.api.unity.com/cloud-code/v1/projects/<PROJECT_ID>/environments/<ENVIRONMENT_ID>/modules/<MODULE_NAME>' \
--header 'Authorization: Basic <SERVICE_ACCOUNT_CREDENTIALS_ENCODED>'
```

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

```json
{
  "name": "string",
  "language": "CS",
  "tags": {
    "property1": "string",
    "property2": "string"
  },
  "signedDownloadURL": "string",
  "dateCreated": "2022-04-05T09:12:13Z",
  "dateModified": "2022-04-05T09:12:13Z",
  "endpoints": {
    "ModuleEndpoint": {
      "parameters": {
        "parameter1": "System.String",
        "parameter2": "System.String"
      },
      "returnType": "System.Void"
    }
  },
  "hasError": true,
  "errorMessage": "error message"
}
```

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

| Field               | 설명                                                                                |
| ------------------- | --------------------------------------------------------------------------------- |
| `name`              | 모듈 이름입니다.                                                                         |
| `language`          | 모듈 언어입니다. Cloud Code 모듈은 C#만 지원합니다.                                               |
| `tags`              | 키 값 페어로 정의된 커스텀 사용자 태그입니다.                                                        |
| `signedDownloadURL` | 모듈 ZIP 파일을 다운로드하기 위한 URL입니다.                                                      |
| `dateCreated`       | 모듈이 생성된 날짜입니다.                                                                    |
| `dateModified`      | 모듈이 마지막으로 수정된 날짜입니다.                                                              |
| `endpoints`         | 모듈에 정의된 엔드포인트 목록입니다(키 값 페어로 정의). 각 엔드포인트에는 키 값 페어로 된 파라미터 목록과 엔드포인트 반환 유형이 포함됩니다. |
| `hasError`          | 엔드포인트 생성 오류나 모듈에서의 오류 등 모듈에 오류가 있는지 여부가 표시됩니다.                                    |
| `errorMessage`      | 모듈에 오류가 있을 경우의 오류 메시지입니다. 모듈에 오류가 있는 경우에만 포함됩니다.                                  |

배포한 모든 모듈을 미리 보려면 다음 요청을 전송하면 됩니다.

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

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

```json
{
    "results": [
        {
            "name": "Module",
            "language": "CS",
            "signedDownloadURL": "example.com",
            "dateCreated": "2023-04-24T14:06:02Z",
            "dateModified": "2023-04-24T14:06:02Z"
        },
        {
            "name": "AnotherModule",
            "language": "CS",
            "signedDownloadURL": "example.com",
            "dateCreated": "2023-06-20T10:54:55Z",
            "dateModified": "2023-06-20T13:55:22Z"
        },
        {
            "name": "OtherModule",
            "language": "CS",
            "signedDownloadURL": "example.com",
            "dateCreated": "2023-03-28T10:18:21Z",
            "dateModified": "2023-03-28T10:18:21Z"
        }
    ],
    "links": {
        "next": null
    },
    "nextPageToken": ""
}
```

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

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

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

```json
{
    "results": [
        {
            "name": "PostmanTest",
            "language": "CS",
            "signedDownloadURL": "example.com",
            "dateCreated": "2023-04-24T14:06:02Z",
            "dateModified": "2023-04-24T14:06:02Z"
        },
        {
            "name": "TestModule",
            "language": "CS",
            "signedDownloadURL": "example.com",
            "dateCreated": "2023-06-20T10:54:55Z",
            "dateModified": "2023-06-20T13:55:22Z"
        }
    ],
    "links": {
        "next": "/v1/projects/<PROJECT_ID>/environments/<ENVIRONMENT_ID>/modules?after=<TOKEN>&limit=2"
    },
    "nextPageToken": "<TOKEN>"
}
```

next 링크를 따라가면 이어지는 두 모듈을 받을 수 있습니다.

### 모듈 삭제##delete-modules

다음 요청을 전송하여 모듈을 삭제할 수 있습니다.

```bash
curl --request DELETE 'https://services.api.unity.com/cloud-code/v1/projects/<PROJECT_ID>/environments/<ENVIRONMENT_ID>/modules/<MODULE_NAME>' \
--header 'Authorization: Basic <SERVICE_ACCOUNT_CREDENTIALS_ENCODED>'
```

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

### 모듈 API 사양##modules-api-spec

주어진 모듈에서 Open API 사양을 검색하려면 다음 요청을 전송하면 됩니다.

```bash
curl 'https://services.api.unity.com/cloud-code/v1/projects/<PROJECT_ID>/environments/<ENVIRONMENT_ID>/modules/<MODULE_NAME>/spec' \
--header 'Authorization: Basic <SERVICE_ACCOUNT_CREDENTIALS_ENCODED>'
```

예시를 보려면 [관리자 API](https://services.docs.unity.com/cloud-code-admin/v1/index.html#tag/cloud-code-modules/operation/getapispec) 사양을 참고하십시오.

응답 mime 유형은 텍스트나 HTML 포맷입니다. yaml 포맷으로 openAPI 사양을 다운로드하려면 Unity Dashboard의 Modules 페이지에서 사양을 다운로드하면 됩니다. 자세한 내용은 [Unity Dashboard 사용](./unity-dashboard.md)을 참고하십시오.
