Error
오류를 표현하기 위해 사용되는, Schema 타입의 일종입니다.
오류는 언제든 어느 엔드포인트에서든 발생할 수 있으며, 상태 코드로 오류인지 정상 응답인지를 구분할 수 있습니다.
예를 들어 GET /posts/{id} 요청에서 200이 아닌 다른 상태 코드를 가진 응답이 반환된다면 해당 응답은 에러 객체이며, 아래 스키마에 따라 파싱할 수 있음을 확신할 수 있습니다.
Type
| Name | Type | Note | Example |
|---|---|---|---|
| at | Date | 에러가 발생한 시각 | |
| status | Enum<integer> (하단 참고) | HTTP 상태 코드 | 404 |
| type | Enum<string> (하단 참고) | 발생한 에러의 종류 | "PageNotFound" |
| payload | (각 type에 따라 다름, 하단 참고) | 에러 데이터 | |
| message | string | 에러 메세지 | "could not find page" |
at
서버 기준으로 해당 에러가 발생한 시각을 의미합니다.
status
HTTP Status Code 를 나타냅니다.
대부분의 경우, 모든 에러는 알맞은 상태 코드와 함께 전달되기 때문에 해당 값을 읽을 필요가 없습니다.
Enum<string> 타입이며, 아래와 같은 값을 가집니다.
| Value | Meaning | Note |
|---|---|---|
400 | Bad Request | 대부분의 경우 클라이언트가 보낸 요청이 제약 조건을 만족하지 못하거나, 파싱에 실패하거나, 처리할 수 없는 값을 포함하고 있어 발생합니다. |
401 | Unauthorized | 사용자가 로그인한 상태가 아닌 상태에서 인증이 필요한 API에 접근할 경우 발생합니다. 로그인이 실패할 경우에도 발생합니다. |
403 | Forbidden | 사용자가 로그인을 했지만 API를 실행하기 위한 권한이 부족할 때 발생합니다. 예를 들어 한 사용자가 다른 사용자가 작성한 글을 지우려고 한다면 해당 에러가 발생할 수 있습니다. |
404 | Not Found | 요청한 값이 없을 때 발생합니다. 예를 들어 작성된 적 없거나 삭제된 글을 조회하려 한다면 해당 에러가 발생할 수 있습니다. |
500 | Internal Server Error | 서버에서 에러를 적절히 처리하지 못했을 때 발생합니다. |
type
해당 에러 종류를 나타내는 고유하고 일관적인 문자열입니다.
에러 종류를 파악하기 위해서는 해당 값을 아래 표에 맞게 비교해야 합니다.
여러 단어로 이루어진 경우 PascalCase로 표현합니다.
아래 표는 편의를 위해 넓은 범위의 에러부터 좁은 범위의 에러 순으로 나열합니다.
| Value | Note | Status | Payload |
|---|---|---|---|
Error | 알 수 없는 종류의 에러가 발생하였습니다. | null | |
ServerError | 서버 내부에서 에러가 발생하였습니다. | 500 | null |
BadRequest | 클라이언트의 요청을 처리하던 중 에러가 발생하였습니다. | 400 | null |
WrongEndpoint | 존재하지 않는 엔드포인트를 호출하였습니다. | 400 | null |
RequestInvalid | 요청이 올바르지 않습니다. | 400 | null |
TokenRequired | 인증을 위해 필요한 토큰이 누락되었습니다. | 401 | null |
TokenInvalid | 전달된 토큰이 올바르지 않습니다. | 401 | null |
TokenExpired | 전달된 토큰이 만료되었습니다. | 401 | null |
payload
해당 에러에 대한 데이터입니다.
어떤 에러 종류(type)인지에 따라 값이 다르며, 값이 없을 수도 있습니다.
값이 없는 경우 null, 값이 있는 경우 null이 아닌 다른 값(실제 데이터)을 가집니다.
| Value | Note |
|---|---|
null | 페이로드 없음 |
T != null | 페이로드 있음 |
message
사람이 읽을 수 있는 형태의 문자열 에러 메세지입니다.
caution
해당 에러 메세지를 파싱하지 마세요.
에러의 종류는 type으로 파악할 수 있습니다.