# HTTP API

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

您可以使用原始 HTTP API 来管理 Cloud Code 模块。

## 使用 API##using-the-api

* [Admin API](https://services.docs.unity.com/cloud-code-admin/v1#tag/cloud-code-modules) 文档包含管理操作（例如创建、读取、更新和删除模块）的详细描述。
* [Client API](https://services.docs.unity.com/cloud-code/v1#tag/cloud-code/operation/runmodule) 文档包含面向客户端的操作（例如运行模块）的详细描述。

这两个 API 文档都包含有关身份验证、终端以及请求和响应格式的信息，并提供相关示例。您可以采用 OpenAPI 格式下载它们，并参考它们来设置您自己的自动化过程。

要使用 Admin API，请使用[服务帐户](https://services.docs.unity.com/docs/service-account-auth/)进行身份验证。

### Authorization 标头##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"
}
```

响应包含以下字段：

| 字段                  | 描述                                             |
| ------------------- | ---------------------------------------------- |
| `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>"
}
```

点击下一个链接将可以获得接下来的两个模块。

### 删除模块##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>'
```

如需查看示例，请参阅 [Admin 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)。
