# HTTP API

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

Raw HTTP API を使用して、Cloud Code スクリプトを管理できます。

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

* [Admin API](https://services.docs.unity.com/cloud-code-admin/v1#tag/cloud-code-scripts) のドキュメントには、スクリプトの作成、読み取り、更新、削除などの管理操作の詳細な説明が記載されています。
* [Client API](https://services.docs.unity.com/cloud-code/v1#section/overview) のドキュメントには、スクリプトの実行などのクライアント側操作の詳細な説明が記載されています。

どちらの API ドキュメントにも、認証、エンドポイント、およびリクエストとレスポンスの形式に関する情報が、例とともに記載されています。これらを OpenAPI 形式でダウンロードし、独自の自動化を設定するために使用できます。

Admin API を使用するには、[サービスアカウント](https://services.docs.unity.com/docs/service-account-auth/) を使用して認証します。

### Authorization ヘッダー##authorization-header

リクエストを認証するには、[Basic 認証](../authentication#cloud-code-admin-api-basic-authentication)) を使用します。サービスアカウントと base64 エンコード `<KEY_ID>:<SECRET_KEY>` を作成し、それを `Authorization` ヘッダーの値として使用します。

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

### スクリプトのデプロイ##deploy-scripts

以下のリクエストを送信することで、スクリプトを作成できます。

```bash
curl 'https://services.api.unity.com/cloud-code/v1/projects/<PROJECT_ID>/environments/<ENVIRONMENT_ID>/scripts' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <SERVICE_ACCOUNT_CREDENTIALS_ENCODED>' \
--data '{
    "name": "test-script",
    "type": "API",
    "code": "module.exports = () => {return \"Result from standalone API script\";}",
    "language": "JS"
}'
```

スクリプトをゲームクライアントから使用可能にするには、それを公開する必要があります。

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

公開するたびに、スクリプトバージョンが増加します。正常なレスポンスは以下のようになります。

```json
{
    "version": 1,
    "datePublished": "2023-06-23T10:39:20Z"
}
```

最後の公開以降に変更されていないスクリプトは公開できません。

### スクリプトの更新##update-scripts

以下のリクエストを送信することで、スクリプトコード、パラメーター、またはその両方を更新できます。

```bash
curl --request PATCH 'https://services.api.unity.com/cloud-code/v1/projects/<PROJECT_ID>/environments/<ENVIRONMENT_ID>/scripts/<SCRIPT_NAME>' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <SERVICE_ACCOUNT_CREDENTIALS_ENCODED>' \
--data '{
    "params": [
        {
            "name": "parameter",
            "type": "STRING",
            "required": false
        }
    ],
     "code": "module.exports = () => {return \"Updated result from standalone API script\";}"
}'
```

スクリプトの更新されたバージョンをゲームクライアントから使用可能にするには、それを再度公開する必要があります。この結果として、バージョン 2 が作成されます。

```json
{
    "version": 2,
    "datePublished": "2023-06-23T10:40:00Z"
}
```

### スクリプトのロールバック##rollback-scripts

スクリプトを公開し、新しいバージョンが気に入らない場合は、バージョン番号を指定してリクエストを送信することで、前のバージョンにロールバックできます。

```bash
curl --request POST 'https://services.api.unity.com/cloud-code/v1/projects/<PROJECT_ID>/environments/<ENVIRONMENT_ID>/scripts/<SCRIPT_NAME>/publish' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic <SERVICE_ACCOUNT_CREDENTIALS_ENCODED>'
--data '{
    "version": 1
}'
```

これで、最初のスクリプトバージョンがバージョン 3 として再公開されます。

```json
{
    "version": 3,
    "datePublished": "2023-06-23T10:50:00Z"
}
```

### スクリプトの取得##retrieve-scripts

スクリプトのコンテンツを確認するには、以下のリクエストを送信します。

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

レスポンスは以下のようになります:

```json
{
  "name": "test",
  "type": "API",
  "language": "JS",
  "activeScript": {
    "code": "module.exports=async (cloudCode) =>{cloudCode.logger.info('this message confirms that the logging client is functional!'); return cloudCode.params.someThing;}",
    "params": [
      {
        "name": "someThing",
        "type": "STRING",
        "required": true
      }
    ],
    "version": 2,
    "datePublished": "2021-07-23T16:08:35Z"
  },
  "versions": [
    {
      "code": "module.exports=async (cloudCode) =>{cloudCode.logger.info('this message confirms that the logging client is functional!'); return cloudCode.params.someThing;}",
      "params": [
        {
          "name": "someThing",
          "type": "STRING",
          "required": true
        }
      ],
      "isDraft": true,
      "version": null,
      "dateUpdated": "2021-07-23T15:59:32Z"
    },
    {
      "code": "module.exports=async (cloudCode) =>{cloudCode.logger.info('this message confirms that the logging client is functional!'); return cloudCode.params.someThing;}",
      "params": [
        {
          "name": "someThing",
          "type": "STRING",
          "required": true
        }
      ],
      "isDraft": false,
      "version": 2,
      "dateUpdated": "2021-07-23T16:08:35Z",
      "dateCreated": "2021-07-23T16:08:35Z"
    },
    {
      "code": "module.exports=async (cloudCode) =>{cloudCode.logger.info('this message confirms that the logging client is functional!'); return cloudCode.params.someThing;}",
      "params": [
        {
          "name": "someThing",
          "type": "STRING",
          "required": true
        }
      ],
      "isDraft": false,
      "version": 1,
      "dateUpdated": "2021-07-23T15:59:58Z",
      "dateCreated": "2021-07-23T15:59:58Z"
    }
  ],
  "params": [
    {
      "name": "someThing",
      "type": "STRING",
      "required": true
    }
  ]
}
```

レスポンスには以下の情報が含まれます。

* `name`: スクリプトの名前。
* `type`: スクリプトのタイプ。Cloud Code スクリプトでは、API スクリプトのみがサポートされます。
* `language`: スクリプトの言語。Cloud Code スクリプトでは、JavaScript のみがサポートされます。

`activeScript` は、ゲームクライアントで使用可能な現在公開されているスクリプトを参照します。これには、そのコードとパラメーター、バージョン番号、および公開された日付が含まれます。

`versions` 配列には、現在公開されているバージョン、作業中のコピー、前に公開したバージョンなど、スクリプトのすべてのバージョンが含まれます。この作業中のコピーは、最新の変更を含むが、まだゲームクライアントでは使用できないスクリプトバージョンです。このバージョンでは、属性 `isDraft` は `true` に設定され、その `version` は null です。作業中のコピーは、次に公開リクエストを送信したときに公開されます。

作成したすべてのスクリプトを参照するには、以下のリクエストを送信します。

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

リストのレスポンスは以下のようになります。

```json
{
    "results": [
        {
            "name": "script",
            "language": "JS",
            "type": "API",
            "published": true,
            "lastPublishedDate": "2022-03-08T12:37:48Z",
            "lastPublishedVersion": 40
        },
        {
            "name": "test",
            "language": "JS",
            "type": "API",
            "published": true,
            "lastPublishedDate": "2023-06-20T15:14:58Z",
            "lastPublishedVersion": 4
        }
    ],
    "links": {
        "next": null
    }
}
```

レスポンスには、作成したすべてのスクリプトの概要が含まれます。ページ区切りを使用するには、クエリパラメーターを使用して結果のスコープを絞り込み、結果の次のページへのリンクを取得します。

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

次のリンクは以下のようになります。

```json
{
  "links": {
        "next": "/v1/projects/<PROJECT_ID>/environments/<ENVIRONMENT_ID>/scripts?after=<SCRIPT_NAME>"
    }
}
```

### スクリプトの削除##delete-script

スクリプトを削除するには、以下のリクエストを送信します。

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

空のレスポンスは削除に成功したことを示します。
