REST API 문제 해결

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

REST API를 사용하는 중에 문제가 발생할 수 있습니다.

문제 해결을 위해 REST API 상태 코드를 참조해야 합니다. 또한 HTTP 응답 헤더와 종료 코드를 포함하는 것이 도움이 될 수 있습니다.

상태 코드

GitLab REST API는 맥락 및 동작에 따라 모든 응답에 상태 코드를 반환합니다. 요청에 의해 반환된 상태 코드는 문제 해결 시 유용할 수 있습니다.

다음 표는 API 기능이 일반적으로 어떻게 작동하는지에 대한 개요를 제공합니다.

요청 타입 설명
GET 하나 이상의 리소스에 액세스하고 결과를 JSON으로 반환합니다.
POST 리소스가 성공적으로 생성되면 201 Created를 반환하고 새로 생성된 리소스를 JSON으로 반환합니다.
GET / PUT / PATCH 리소스에 성공적으로 액세스되거나 수정된 경우 200 OK를 반환합니다. (수정된) 결과는 JSON으로 반환됩니다.
DELETE 리소스가 성공적으로 삭제된 경우 204 No Content를 반환하거나 리소스가 삭제 예정인 경우 202 Accepted를 반환합니다.

다음 표는 API 요청에 대한 가능한 반환 코드를 보여줍니다.

반환 값 설명
200 OK GET, PUT, PATCH 또는 DELETE 요청이 성공했고 리소스 자체가 JSON으로 반환됩니다.
201 Created POST 요청이 성공했고 리소스가 JSON으로 반환됩니다.
202 Accepted GET, PUT 또는 DELETE 요청이 성공했고 리소스가 처리 예정입니다.
204 No Content 서버가 요청을 성공적으로 수행했고 응답 본문에 추가 콘텐츠가 없습니다.
301 Moved Permanently 리소스가 Location 헤더에서 제공된 URL로 확실히 이동되었습니다.
304 Not Modified 지난 요청 이후 리소스가 수정되지 않았습니다.
400 Bad Request API 요청의 필수 속성이 누락되었습니다. 예를 들어 이슈의 제목이 제공되지 않았습니다.
401 Unauthorized 사용자가 인증되지 않았습니다. 유효한 사용자 토큰이 필요합니다.
403 Forbidden 요청이 허용되지 않았습니다. 예를 들어 사용자가 프로젝트를 삭제할 수 없습니다.
404 Not Found 리소스에 액세스할 수 없습니다. 예를 들어 리소스 ID를 찾을 수 없거나 사용자가 리소스에 액세스할 권한이 없습니다.
405 Method Not Allowed 요청이 지원되지 않습니다.
409 Conflict 충돌하는 리소스가 이미 있습니다. 예를 들어 이미 있는 이름으로 프로젝트를 만들려고 하는 경우입니다.
412 Precondition Failed 요청이 거부되었습니다. 예를 들어 리소스 삭제를 시도할 때 If-Unmodified-Since 헤더가 제공된 경우, 해당 리소스가 사이에 수정되었을 때 발생할 수 있습니다.
422 Unprocessable 엔터티를 처리할 수 없습니다.
429 Too Many Requests 사용자가 응용 프로그램 속도 제한을 초과했습니다.
500 Server Error 요청 처리 중 서버에서 오류가 발생했습니다.
503 Service Unavailable 서버가 일시적으로 과부하로 요청을 처리할 수 없습니다.

상태 코드 400

API를 사용하는 중에 유효성 검사 오류가 발생할 수 있으며, 이 경우 API는 HTTP 400 오류를 반환합니다.

이러한 오류는 다음 경우에 발생합니다.

  • API 요청의 필수 속성이 누락된 경우 (예: 이슈의 제목이 주어지지 않음).
  • 속성이 유효성 검사를 통과하지 못한 경우 (예: 사용자 소개가 너무 긴 경우).

속성이 누락된 경우 다음과 같이 수신합니다:

HTTP/1.1 400 Bad Request
Content-Type: application/json
{
    "message":"400 (Bad request) \"title\" not given"
}

유효성 검사 오류가 발생하는 경우 오류 메시지는 다릅니다. 이러한 메시지는 유효성 검사 오류의 모든 세부 정보를 보유합니다:

HTTP/1.1 400 Bad Request
Content-Type: application/json
{
    "message": {
        "bio": [
            "is too long (maximum is 255 characters)"
        ]
    }
}

이렇게 하면 오류 메시지가 기계에서 읽을 수 있게 됩니다. 이 형식은 다음과 같이 설명할 수 있습니다:

{
    "message": {
        "<property-name>": [
            "<error-message>",
            "<error-message>",
            ...
        ],
        "<embed-entity>": {
            "<property-name>": [
                "<error-message>",
                "<error-message>",
                ...
            ],
        }
    }
}

HTTP 응답 헤더 포함

문제 해결 시 HTTP 응답 헤더는 추가 정보를 제공할 수 있습니다.

응답에 HTTP 응답 헤더를 포함하려면 --include 옵션을 사용하세요:

curl --include "https://gitlab.example.com/api/v4/projects"
HTTP/2 200
...

HTTP 종료 코드 포함

API 응답의 HTTP 종료 코드는 문제 해결 시 추가 정보를 제공할 수 있습니다.

HTTP 종료 코드를 포함하려면 --fail 옵션을 사용하세요:

curl --fail "https://gitlab.example.com/api/v4/does-not-exist"
curl: (22) The requested URL returned error: 404