실험 API
GitLab v19.3Offering: GitLab.com
요약
A/B 실험과 상호 작용하는 데 이 API를 사용합니다. GitLab 인스턴스의 모든 실험을 나열합니다. 각 실험은 또한 해당 실험이 선언하는 컨텍스트 키(user, namespace, project 또는 actor)를 담은 context 배열을 노출합니다.
A/B 실험과 상호 작용하는 데 이 API를 사용합니다. 이 API는 내부 사용 전용입니다.
익명 또는 인증되지 않은 사용자와 함께 사용할 수 없습니다. 익명 사용자가 관련된 실험의 경우,
대신 glex_force 쿼리 매개변수를 사용하세요.
전제 조건:
- GitLab 팀원이어야 합니다.
모든 실험 목록#
히스토리
- GitLab 19.3에서
context속성이 도입되었습니다.
GitLab 인스턴스의 모든 실험을 나열합니다. 각 실험에는 실험이 전역적으로 또는 특정 컨텍스트에서만 활성화되어 있는지를 나타내는 enabled 상태가 있습니다.
각 실험은 또한 해당 실험이 선언하는 컨텍스트 키(user, namespace, project 또는 actor)를 담은 context 배열을 노출합니다.
변형 할당을 강제 지정, 읽기 또는 지울 때 이러한 키를 전달하세요. actor 키의 경우, GitLab이 사용자로부터 actor를 확인하므로
context[user] 매개변수를 전달합니다. 컨텍스트 키를 선언하지 않는 실험의 경우 이 배열은 비어 있습니다.
GET /experiments
curl --request GET \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/experiments"
응답 예시:
[
{
"key": "code_quality_walkthrough",
"context": ["user"],
"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",
"context": ["user", "namespace"],
"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을 반환합니다.
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를 선언해야 합니다. 자세한 내용은 변형 할당 강제 지정을 참조하세요.
변형 할당 강제 지정#
주어진 컨텍스트에 대해 실험 캐시에 변형 할당을 기록합니다.
POST /experiments/:experiment_name/assignments
매개변수:
| 속성 | 타입 | 필수 | 설명 |
|---|---|---|---|
| experiment_name | string | 예 | 실험의 이름. |
| variant | string | 예 | 할당할 변형 이름(예: control, candidate). |
| context[user] | string | 아니요 | 컨텍스트에 사용할 사용자 이름. |
| context[namespace] | string | 아니요 | 컨텍스트에 사용할 네임스페이스의 전체 경로. |
| context[project] | string | 아니요 | 컨텍스트에 사용할 프로젝트의 전체 경로. |
context 매개변수를 생략하면 API는 인증된 사용자를 사용합니다.
curl --request POST \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/experiments/my_experiment/assignments" \
--data "variant=candidate" \
--data "context[user]=sidney-jones"
응답 예시:
{
"experiment": "my_experiment",
"variant": "candidate",
"context_key": "my_experiment:a1b2c3d4e5f6"
}
현재 할당 가져오기#
주어진 실험 및 컨텍스트에 대해 현재 캐시된 변형 할당을 읽습니다.
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입니다. 이 경우 선언된 모든 키를 전달하세요. user 및 actor 키만 인증된 사용자로 폴백되며, namespace와 project는 항상 명시적으로 전달해야 합니다.
user 컨텍스트를 사용하는 실험에 대한 요청 예시:
curl --request GET \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/experiments/my_experiment/assignments?context[user]=sidney-jones"
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]=sidney-jones&context[namespace]=my-group"
응답 예시:
{
"experiment": "my_experiment",
"variant": "candidate",
"context_key": "my_experiment:a1b2c3d4e5f6",
"cached": true
}
변형 할당 지우기#
주어진 컨텍스트에 대해 실험 캐시에서 강제 지정된 변형 할당을 제거하여, 해당 actor를 일반 롤아웃 할당으로 되돌립니다.
DELETE /experiments/:experiment_name/assignments
매개변수:
| 속성 | 타입 | 필수 | 설명 |
|---|---|---|---|
| experiment_name | string | 예 | 실험의 이름. |
| context[user] | string | 아니요 | 컨텍스트에 사용할 사용자 이름. |
| context[namespace] | string | 아니요 | 컨텍스트에 사용할 네임스페이스의 전체 경로. |
| context[project] | string | 아니요 | 컨텍스트에 사용할 프로젝트의 전체 경로. |
컨텍스트 확인 방식은 현재 할당 가져오기와 동일합니다. context[user]를 생략하면 API는 인증된 사용자를 사용하며, 실험이 actor를 선언하는 경우 actor는 context[user]에서 확인됩니다.
성공하면 204 No Content를 반환합니다.
이 작업은 멱등적입니다. 캐시된 할당이 없는 컨텍스트를 지우는 경우에도 204 No Content를 반환합니다.
요청 예시:
curl --request DELETE \
--header "PRIVATE-TOKEN: <your_access_token>" \
--url "https://gitlab.example.com/api/v4/experiments/my_experiment/assignments?context[user]=sidney-jones"