HTTP API

원시 HTTP API를 사용하여 Cloud Code 스크립트를 관리할 수 있습니다.

API 사용

  • 관리자 API 기술 자료에는 스크립트 생성, 읽기, 업데이트, 삭제 등의 관리자 작업이 자세히 설명되어 있습니다.
  • 클라이언트 API 기술 자료에는 스크립트 실행을 비롯한 클라이언트 측 작업이 자세히 설명되어 있습니다.

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

관리자 API를 사용하려면 서비스 계정을 사용하여 인증해야 합니다.

스크립트 배포

다음 요청을 전송하여 스크립트를 생성할 수 있습니다.

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

게임 클라이언트에서 스크립트를 사용하려면 다음과 같이 스크립트를 퍼블리시해야 합니다.

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

스크립트를 퍼블리시할 때마다 스크립트 버전의 숫자가 늘어납니다. 성공적인 응답의 예시는 다음과 같습니다.

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

마지막 퍼블리시 이후 변경 사항이 없는 스크립트는 퍼블리시할 수 없습니다.

스크립트 업데이트

다음 요청을 전송하여 스크립트 코드, 파라미터, 또는 둘 다 업데이트할 수 있습니다.

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 <KEY_ID>:<SECRET_KEY>' \
--data '{
    "params": [
        {
            "name": "parameter",
            "type": "STRING",
            "required": false
        }
    ],
     "code": "module.exports = () => {return \"Updated result from standalone API script\";}"
}'

업데이트된 버전의 스크립트를 게임 클라이언트에서 사용하려면, 스크립트를 다시 퍼블리시해서 버전 2를 생성해야 합니다.

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

스크립트 롤백

스크립트를 퍼블리시했는데 새로운 버전이 마음에 들지 않으면, 지정된 버전 번호로 요청을 전송하여 이전 버전으로 롤백할 수 있습니다.

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 <KEY_ID>:<SECRET_KEY>'
--data '{
    "version": 1
}'

그러면 다음과 같이 첫 번째 스크립트 버전이 버전 3으로 다시 퍼블리시됩니다.

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

스크립트 검색

다음 요청을 전송하면 스크립트의 콘텐츠를 확인할 수 있습니다.

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

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

{
  "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로 각각 설정됩니다. 작업 중인 사본은 다음에 퍼블리시 요청을 보낼 때 퍼블리시됩니다.

다음 요청을 전송하면 지금까지 생성한 모든 스크립트를 볼 수 있습니다.

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

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

{
    "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
    }
}

응답에는 생성한 모든 스크립트의 간략한 개요가 포함되어 있습니다. 파라미터로 결과의 범위를 좁히고 다음 결과 페이지로 연결되는 링크를 확보하면 페이지 매김을 사용할 수 있습니다.

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

다음 결과 링크의 예시는 다음과 같습니다.

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

스크립트 삭제

다음 요청을 전송하면 스크립트를 삭제할 수 있습니다.

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

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