InfoGrab DocsInfoGrab Docs

실험 API

요약

A/B 실험과 상호 작용하는 데 이 API를 사용합니다. GitLab 인스턴스의 모든 실험을 나열합니다. 캐시 저장소에서 실험의 캐시된 모든 변형(variant) 할당을 제거합니다. 성공하면 204 No Content를 반환합니다.

A/B 실험과 상호 작용하는 데 이 API를 사용합니다. 이 API는 내부 사용 전용입니다. 익명 또는 인증되지 않은 사용자와 함께 사용할 수 없습니다. 익명 사용자가 관련된 실험의 경우, 대신 glex_force 쿼리 매개변수를 사용하세요.

전제 조건:

모든 실험 목록#

GitLab 인스턴스의 모든 실험을 나열합니다. 각 실험에는 실험이 전역적으로 또는 특정 컨텍스트에서만 활성화되어 있는지를 나타내는 enabled 상태가 있습니다.

GET /experiments
curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/experiments"

응답 예시:

[
  {
    "key": "code_quality_walkthrough",
    "definition": {
      "name": "code_quality_walkthrough",
      "introduced_by_url": "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58900",
      "rollout_issue_url": "https://gitlab.com/gitlab-org/gitlab/-/issues/327229",
      "milestone": "13.12",
      "type": "experiment",
      "group": "group::activation",
      "default_enabled": false
    },
    "current_status": {
      "state": "conditional",
      "gates": [
        {
          "key": "boolean",
          "value": false
        },
        {
          "key": "percentage_of_actors",
          "value": 25
        }
      ]
    }
  },
  {
    "key": "ci_runner_templates",
    "definition": {
      "name": "ci_runner_templates",
      "introduced_by_url": "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58357",
      "rollout_issue_url": "https://gitlab.com/gitlab-org/gitlab/-/issues/326725",
      "milestone": "14.0",
      "type": "experiment",
      "group": "group::activation",
      "default_enabled": false
    },
    "current_status": {
      "state": "off",
      "gates": [
        {
          "key": "boolean",
          "value": false
        }
      ]
    }
  }
]

캐시된 할당 삭제#

캐시 저장소에서 실험의 캐시된 모든 변형(variant) 할당을 제거합니다. 코드는 코드베이스에서 제거되었지만 캐시된 할당이 남아 있는 완료된 실험을 정리하려면 이 엔드포인트를 사용하세요.

DELETE /experiments/:name/cache

지원되는 속성:

속성 타입 필수 설명
name string 지울 실험의 캐시 키.

성공하면 204 No Content를 반환합니다.

주어진 이름에 대한 캐시된 할당이 없는 경우에도 요청은 204 No Content를 반환합니다. 이름이 실험이 아닌 캐시 키를 참조하는 경우 요청은 400 Bad Request를 반환합니다. 요청이 인증되지 않은 경우 요청은 401 Unauthorized를 반환합니다. 사용자가 GitLab 팀원이 아닌 경우 요청은 403 Forbidden을 반환합니다.

Note

name 값은 캐시 키로 직접 사용됩니다. 이 엔드포인트는 현재 정의된 실험에 속하지 않은 항목이라도 일치하는 모든 캐시 항목을 지웁니다. 이 동작은 코드가 제거된 고아 실험을 정리하는 것을 지원합니다. 이 엔드포인트를 호출하기 전에 이름을 확인하세요.

요청 예시:

curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/experiments/code_quality_walkthrough/cache"

실험 할당#

GLEX Redis 캐시에서 실험 변형 할당을 읽으려면 이 엔드포인트를 사용합니다. 이는 glex_force 쿼리 매개변수를 사용할 수 없는, 요청/응답 주기 외부에서 실행되는 백엔드 전용 실험에 유용합니다.

실험은 app/experiments의 실험 클래스에서 context_keys를 선언해야 합니다.

현재 할당 가져오기#

주어진 실험 및 컨텍스트에 대해 현재 캐시된 변형 할당을 읽습니다.

GET /experiments/:experiment_name/assignments

매개변수:

속성 타입 필수 설명
experiment_name string 실험의 이름.
context[user] string 아니요 컨텍스트에 사용할 사용자 이름.
context[namespace] string 아니요 컨텍스트에 사용할 네임스페이스의 전체 경로.
context[project] string 아니요 컨텍스트에 사용할 프로젝트의 전체 경로.

context[user] 매개변수를 생략하면 API는 인증된 사용자를 사용합니다.

실험이 context_keys에서 actor를 선언하는 경우, actor는 context[user]에서 확인됩니다. 별도의 context[actor] 매개변수는 없습니다.

실험은 여러 컨텍스트 키를 선언할 수 있습니다. 예를 들어 context_keys :user, :namespace입니다. 이 경우 선언된 모든 키를 전달하세요. useractor 키만 인증된 사용자로 폴백되며, namespaceproject는 항상 명시적으로 전달해야 합니다.

user 컨텍스트를 사용하는 실험에 대한 요청 예시:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/experiments/my_experiment/assignments?context[user]=john-doe"

namespace 컨텍스트를 사용하는 실험에 대한 요청 예시:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/experiments/my_experiment/assignments?context[namespace]=my-group"

context_keys :user, :namespace를 선언하는 실험에 대한 요청 예시:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/experiments/my_experiment/assignments?context[user]=john-doe&context[namespace]=my-group"

응답 예시:

{
  "experiment": "my_experiment",
  "variant": "candidate",
  "context_key": "my_experiment:a1b2c3d4e5f6",
  "cached": true
}

실험 API

GitLab v19.2
Tier: Free, Premium, Ultimate
Offering: GitLab.com
원문 보기
요약

A/B 실험과 상호 작용하는 데 이 API를 사용합니다. GitLab 인스턴스의 모든 실험을 나열합니다. 캐시 저장소에서 실험의 캐시된 모든 변형(variant) 할당을 제거합니다. 성공하면 204 No Content를 반환합니다.

A/B 실험과 상호 작용하는 데 이 API를 사용합니다. 이 API는 내부 사용 전용입니다. 익명 또는 인증되지 않은 사용자와 함께 사용할 수 없습니다. 익명 사용자가 관련된 실험의 경우, 대신 glex_force 쿼리 매개변수를 사용하세요.

전제 조건:

모든 실험 목록#

GitLab 인스턴스의 모든 실험을 나열합니다. 각 실험에는 실험이 전역적으로 또는 특정 컨텍스트에서만 활성화되어 있는지를 나타내는 enabled 상태가 있습니다.

GET /experiments
curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/experiments"

응답 예시:

[
  {
    "key": "code_quality_walkthrough",
    "definition": {
      "name": "code_quality_walkthrough",
      "introduced_by_url": "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58900",
      "rollout_issue_url": "https://gitlab.com/gitlab-org/gitlab/-/issues/327229",
      "milestone": "13.12",
      "type": "experiment",
      "group": "group::activation",
      "default_enabled": false
    },
    "current_status": {
      "state": "conditional",
      "gates": [
        {
          "key": "boolean",
          "value": false
        },
        {
          "key": "percentage_of_actors",
          "value": 25
        }
      ]
    }
  },
  {
    "key": "ci_runner_templates",
    "definition": {
      "name": "ci_runner_templates",
      "introduced_by_url": "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/58357",
      "rollout_issue_url": "https://gitlab.com/gitlab-org/gitlab/-/issues/326725",
      "milestone": "14.0",
      "type": "experiment",
      "group": "group::activation",
      "default_enabled": false
    },
    "current_status": {
      "state": "off",
      "gates": [
        {
          "key": "boolean",
          "value": false
        }
      ]
    }
  }
]

캐시된 할당 삭제#

캐시 저장소에서 실험의 캐시된 모든 변형(variant) 할당을 제거합니다. 코드는 코드베이스에서 제거되었지만 캐시된 할당이 남아 있는 완료된 실험을 정리하려면 이 엔드포인트를 사용하세요.

DELETE /experiments/:name/cache

지원되는 속성:

속성 타입 필수 설명
name string 지울 실험의 캐시 키.

성공하면 204 No Content를 반환합니다.

주어진 이름에 대한 캐시된 할당이 없는 경우에도 요청은 204 No Content를 반환합니다. 이름이 실험이 아닌 캐시 키를 참조하는 경우 요청은 400 Bad Request를 반환합니다. 요청이 인증되지 않은 경우 요청은 401 Unauthorized를 반환합니다. 사용자가 GitLab 팀원이 아닌 경우 요청은 403 Forbidden을 반환합니다.

Note

name 값은 캐시 키로 직접 사용됩니다. 이 엔드포인트는 현재 정의된 실험에 속하지 않은 항목이라도 일치하는 모든 캐시 항목을 지웁니다. 이 동작은 코드가 제거된 고아 실험을 정리하는 것을 지원합니다. 이 엔드포인트를 호출하기 전에 이름을 확인하세요.

요청 예시:

curl --request DELETE \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/experiments/code_quality_walkthrough/cache"

실험 할당#

GLEX Redis 캐시에서 실험 변형 할당을 읽으려면 이 엔드포인트를 사용합니다. 이는 glex_force 쿼리 매개변수를 사용할 수 없는, 요청/응답 주기 외부에서 실행되는 백엔드 전용 실험에 유용합니다.

실험은 app/experiments의 실험 클래스에서 context_keys를 선언해야 합니다.

현재 할당 가져오기#

주어진 실험 및 컨텍스트에 대해 현재 캐시된 변형 할당을 읽습니다.

GET /experiments/:experiment_name/assignments

매개변수:

속성 타입 필수 설명
experiment_name string 실험의 이름.
context[user] string 아니요 컨텍스트에 사용할 사용자 이름.
context[namespace] string 아니요 컨텍스트에 사용할 네임스페이스의 전체 경로.
context[project] string 아니요 컨텍스트에 사용할 프로젝트의 전체 경로.

context[user] 매개변수를 생략하면 API는 인증된 사용자를 사용합니다.

실험이 context_keys에서 actor를 선언하는 경우, actor는 context[user]에서 확인됩니다. 별도의 context[actor] 매개변수는 없습니다.

실험은 여러 컨텍스트 키를 선언할 수 있습니다. 예를 들어 context_keys :user, :namespace입니다. 이 경우 선언된 모든 키를 전달하세요. useractor 키만 인증된 사용자로 폴백되며, namespaceproject는 항상 명시적으로 전달해야 합니다.

user 컨텍스트를 사용하는 실험에 대한 요청 예시:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/experiments/my_experiment/assignments?context[user]=john-doe"

namespace 컨텍스트를 사용하는 실험에 대한 요청 예시:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/experiments/my_experiment/assignments?context[namespace]=my-group"

context_keys :user, :namespace를 선언하는 실험에 대한 요청 예시:

curl --request GET \
  --header "PRIVATE-TOKEN: <your_access_token>" \
  --url "https://gitlab.example.com/api/v4/experiments/my_experiment/assignments?context[user]=john-doe&context[namespace]=my-group"

응답 예시:

{
  "experiment": "my_experiment",
  "variant": "candidate",
  "context_key": "my_experiment:a1b2c3d4e5f6",
  "cached": true
}