특징 플래그 API

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed, GitLab Dedicated

GitLab feature flags의 리소스에 액세스하기 위한 API입니다.

최소한 개발자 역할을 가진 사용자는 특징 플래그 API에 액세스할 수 있습니다.

특징 플래그 페이지네이션

기본적으로 GET 요청은 한 번에 20개의 결과를 반환합니다. 이는 API 결과가 페이지별로 구분되기 때문입니다.

프로젝트용 특징 플래그 목록

요청된 프로젝트의 모든 특징 플래그를 가져옵니다.

GET /projects/:id/feature_flags
속성 타입 필수 설명
id 정수/문자열 프로젝트의 ID 또는 URL-인코딩된 경로.
scope 문자열 아니오 특징 플래그의 조건 중 하나: enabled, disabled.
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/feature_flags"

예시 응답:

[
   {
      "name":"merge_train",
      "description":"이 기능은 머지 트레인에 관한 것입니다.",
      "active": true,
      "version": "new_version_flag",
      "created_at":"2019-11-04T08:13:51.423Z",
      "updated_at":"2019-11-04T08:13:51.423Z",
      "scopes":[],
      "strategies": [
        {
          "id": 1,
          "name": "userWithId",
          "parameters": {
            "userIds": "user1"
          },
          "scopes": [
            {
              "id": 1,
              "environment_scope": "production"
            }
          ],
          "user_list": null
        }
      ]
   },
   {
      "name":"new_live_trace",
      "description":"이것은 새로운 라이브 트레이스 기능입니다.",
      "active": true,
      "version": "new_version_flag",
      "created_at":"2019-11-04T08:13:10.507Z",
      "updated_at":"2019-11-04T08:13:10.507Z",
      "scopes":[],
      "strategies": [
        {
          "id": 2,
          "name": "default",
          "parameters": {},
          "scopes": [
            {
              "id": 2,
              "environment_scope": "staging"
            }
          ],
          "user_list": null
        }
      ]
   },
   {
      "name":"user_list",
      "description":"이 기능은 사용자 목록에 관한 것입니다.",
      "active": true,
      "version": "new_version_flag",
      "created_at":"2019-11-04T08:13:10.507Z",
      "updated_at":"2019-11-04T08:13:10.507Z",
      "scopes":[],
      "strategies": [
        {
          "id": 2,
          "name": "gitlabUserList",
          "parameters": {},
          "scopes": [
            {
              "id": 2,
              "environment_scope": "staging"
            }
          ],
          "user_list": {
            "id": 1,
            "iid": 1,
            "name": "내 사용자 목록",
            "user_xids": "user1,user2,user3"
          }
        }
      ]
   }
]

단일 특징 플래그 가져오기

단일 특징 플래그를 가져옵니다.

GET /projects/:id/feature_flags/:feature_flag_name
속성 타입 필수 설명
id 정수/문자열 프로젝트의 ID 또는 URL-인코딩된 경로.
feature_flag_name 문자열 특징 플래그의 이름
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/feature_flags/awesome_feature"

예시 응답:

{
  "name": "awesome_feature",
  "description": null,
  "active": true,
  "version": "new_version_flag",
  "created_at": "2020-05-13T19:56:33.119Z",
  "updated_at": "2020-05-13T19:56:33.119Z",
  "scopes": [],
  "strategies": [
    {
      "id": 36,
      "name": "default",
      "parameters": {},
      "scopes": [
        {
          "id": 37,
          "environment_scope": "production"
        }
      ],
      "user_list": null
    }
  ]
}

기능 플래그 생성

새로운 기능 플래그를 생성합니다.

POST /projects/:id/feature_flags
속성 유형 필수 여부 설명
id integer/string 프로젝트의 ID 또는 URL-encoded path입니다.
name string 기능 플래그의 이름입니다.
version string Deprecated 기능 플래그의 버전입니다. new_version_flag여야 합니다. 레거시 기능 플래그를 생성하려면 생략합니다.
description string 아니요 기능 플래그의 설명입니다.
active boolean 아니요 플래그의 활성 상태입니다. 기본값은 true입니다. GitLab 13.3 이상에서 지원됩니다.
strategies 전략 JSON 객체의 배열 아니요 기능 플래그의 전략입니다.
strategies:name JSON 아니요 전략의 이름입니다. default, gradualRolloutUserId, userWithId, 또는 gitlabUserList일 수 있습니다. GitLab 13.5 이상에서는 flexibleRollout 일 수 있습니다.
strategies:parameters JSON 아니요 전략의 매개변수입니다.
strategies:scopes JSON 아니요 전략의 범위입니다.
strategies:scopes:environment_scope string 아니요 범위의 환경 범위입니다.
strategies:user_list_id integer/string 아니요 전략이 gitlabUserList인 경우의 기능 플래그 사용자 목록 ID입니다.
curl "https://gitlab.example.com/api/v4/projects/1/feature_flags" \
     --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Content-type: application/json" \
     --data @- << EOF
{
  "name": "awesome_feature",
  "version": "new_version_flag",
  "strategies": [{ "name": "default", "parameters": {}, "scopes": [{ "environment_scope": "production" }] }]
}
EOF

예시 응답:

{
  "name": "awesome_feature",
  "description": null,
  "active": true,
  "version": "new_version_flag",
  "created_at": "2020-05-13T19:56:33.119Z",
  "updated_at": "2020-05-13T19:56:33.119Z",
  "scopes": [],
  "strategies": [
    {
      "id": 36,
      "name": "default",
      "parameters": {},
      "scopes": [
        {
          "id": 37,
          "environment_scope": "production"
        }
      ]
    }
  ]
}

기능 플래그 업데이트

기능 플래그를 업데이트합니다.

PUT /projects/:id/feature_flags/:feature_flag_name
속성 유형 필수 여부 설명
id integer/string 프로젝트의 ID 또는 URL-encoded path입니다.
feature_flag_name string 기능 플래그의 현재 이름입니다.
description string 아니요 기능 플래그의 설명입니다.
active boolean 아니요 플래그의 활성 상태입니다. GitLab 13.3 이상에서 지원됩니다.
name string 아니요 기능 플래그의 새 이름입니다. GitLab 13.3 이상에서 지원됩니다.
strategies 전략 JSON 객체의 배열 아니요 기능 플래그의 전략입니다.
strategies:id JSON 아니요 기능 플래그 전략 ID입니다.
strategies:name JSON 아니요 전략의 이름입니다.
strategies:_destroy boolean 아니요 true이면 전략을 삭제합니다.
strategies:parameters JSON 아니요 전략의 매개변수입니다.
strategies:scopes JSON 아니요 전략의 범위입니다.
strategies:scopes:id JSON 아니요 범위의 환경 범위 ID입니다.
strategies:scopes:environment_scope string 아니요 범위의 환경 범위입니다.
strategies:scopes:_destroy boolean 아니요 true이면 범위를 삭제합니다.
strategies:user_list_id integer/string 아니요 전략이 gitlabUserList인 경우의 기능 플래그 사용자 목록 ID입니다.
curl "https://gitlab.example.com/api/v4/projects/1/feature_flags/awesome_feature" \
     --header "PRIVATE-TOKEN: <your_access_token>" \
     --header "Content-type: application/json" \
     --data @- << EOF
{
  "strategies": [{ "name": "gradualRolloutUserId", "parameters": { "groupId": "default", "percentage": "25" }, "scopes": [{ "environment_scope": "staging" }] }]
}
EOF

예시 응답:

{
  "name": "awesome_feature",
  "description": null,
  "active": true,
  "version": "new_version_flag",
  "created_at": "2020-05-13T20:10:32.891Z",
  "updated_at": "2020-05-13T20:10:32.891Z",
  "scopes": [],
  "strategies": [
    {
      "id": 38,
      "name": "gradualRolloutUserId",
      "parameters": {
        "groupId": "default",
        "percentage": "25"
      },
      "scopes": [
        {
          "id": 40,
          "environment_scope": "staging"
        }
      ]
    },
    {
      "id": 37,
      "name": "default",
      "parameters": {},
      "scopes": [
        {
          "id": 39,
          "environment_scope": "production"
        }
      ]
    }
  ]
}

기능 플래그 삭제

기능 플래그를 삭제합니다.

DELETE /projects/:id/feature_flags/:feature_flag_name
속성 유형 필수여부 설명
id integer/string yes 프로젝트의 ID 또는 URL 인코딩된 경로.
feature_flag_name string yes 기능 플래그의 이름.
curl --header "PRIVATE-TOKEN: <your_access_token>" --request DELETE "https://gitlab.example.com/api/v4/projects/1/feature_flags/awesome_feature"