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