REST API 문제 해결
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
스팸으로 감지된 요청
REST API 요청이 스팸으로 감지될 수 있습니다. 요청이 스팸으로 감지되면:
-
CAPTCHA 서비스가 구성되지 않은 경우, 오류 응답이 반환됩니다. 예를 들어:
{"message":{"error":"Your snippet has been recognized as spam and has been discarded."}}
-
CAPTCHA 서비스가 구성된 경우, 다음과 같은 응답을 받게 됩니다:
-
needs_captcha_response
는true
로 설정됩니다. -
spam_log_id
와captcha_site_key
필드가 설정됩니다.
예를 들어:
{"needs_captcha_response":true,"spam_log_id":42,"captcha_site_key":"REDACTED","message":{"error":"Your snippet has been recognized as spam. Please, change the content or solve the reCAPTCHA to proceed."}}
- 적절한 CAPTCHA API를 사용하여 CAPTCHA 응답 값을 얻기 위해
captcha_site_key
를 사용하십시오. 지원되는 것은 Google reCAPTCHA v2입니다. -
X-GitLab-Captcha-Response
및X-GitLab-Spam-Log-Id
헤더를 설정하여 요청을 다시 제출합니다.export CAPTCHA_RESPONSE="<CAPTCHA response obtained from CAPTCHA service>" export SPAM_LOG_ID="<spam_log_id obtained from initial REST response>" curl --request POST --header "PRIVATE-TOKEN: $PRIVATE_TOKEN" --header "X-GitLab-Captcha- Response: $CAPTCHA_RESPONSE" --header "X-GitLab-Spam-Log-Id: $SPAM_LOG_ID" "https://gitlab.example.com/api/v4/snippets? title=Title&file_name=FileName&content=Content&visibility=public"
-