에러 코드
REST API 오류 응답 구조와 HTTP 상태 코드별 원인, 해결 방법을 설명합니다.
에러 코드
API 요청이 실패하면 HTTP 상태 코드와 함께 오류 정보를 담은 JSON을 반환합니다.
오류 응답 구조
{
"error": {
"code": "VALIDATION_ERROR",
"message": "title 필드는 필수입니다.",
"details": [
{
"field": "title",
"message": "필수 항목입니다."
}
]
}
}
| 필드 | 타입 | 설명 |
|---|---|---|
error.code |
string |
오류를 식별하는 코드 |
error.message |
string |
오류 내용을 설명하는 메시지 |
error.details |
array | null |
필드별 유효성 오류 목록 (유효성 검사 실패 시만 포함) |
HTTP 상태 코드 목록
400 Bad Request
요청 형식이 잘못되었거나 필수 파라미터가 누락된 경우입니다.
원인
- JSON 형식 오류
- 필수 쿼리 파라미터 또는 요청 본문 필드 누락
- 지원하지 않는 값
해결 방법
Content-Type: application/json 헤더가 포함되었는지 확인합니다. 요청 본문이 유효한 JSON인지 검증하고, 파라미터 이름과 타입을 레퍼런스와 비교합니다.
401 Unauthorized
인증이 실패한 경우입니다.
원인
Authorization헤더 누락Bearer접두사 없이 Key만 전달- API Key 값이 잘못되었거나 존재하지 않음
- API Key가 삭제되었거나 비활성화됨
해결 방법
헤더 형식이 Authorization: Bearer {API_KEY}인지 확인합니다. API Key를 복사할 때 앞뒤 공백이 포함되지 않았는지 확인합니다.
# 올바른 형식
curl -H "Authorization: Bearer abc123xyz"
# 잘못된 형식 (Bearer 없음)
curl -H "Authorization: abc123xyz"
403 Forbidden
인증은 성공했지만 해당 작업을 수행할 권한이 없는 경우입니다.
원인
- 읽기 전용 API Key로 쓰기(POST, PUT, DELETE) 요청
- 허용 호스트 외 도메인에서 요청
- 다른 Project의 데이터에 접근 시도
해결 방법
API Key의 권한 설정과 허용 호스트를 확인합니다. 쓰기가 필요하면 읽기+쓰기 권한의 Key를 사용합니다.
404 Not Found
요청한 리소스가 존재하지 않는 경우입니다.
원인
{projectId},{tableId},{contentsId}등의 식별자가 잘못됨- 이미 삭제된 리소스에 접근
- 경로 오타
해결 방법
대시보드에서 각 리소스의 ID를 복사해 요청 경로와 비교합니다. 경로에 오타가 없는지 확인합니다.
409 Conflict
리소스 충돌이 발생한 경우입니다.
원인
unique설정된 컬럼에 중복 값 입력- 현재 상태에서 허용되지 않는 상태 전환 시도
해결 방법
중복 값이 있는지 확인하거나 현재 리소스 상태를 먼저 조회한 후 요청합니다.
422 Unprocessable Entity
요청 구조는 올바르지만 유효성 검사를 통과하지 못한 경우입니다.
원인
required컬럼에 값 누락- 숫자 컬럼의
min/max범위 초과 - 텍스트 컬럼의
minText/maxText길이 위반
오류 응답 예시
{
"error": {
"code": "VALIDATION_ERROR",
"message": "유효성 검사에 실패했습니다.",
"details": [
{
"field": "data.title",
"message": "title 필드는 필수입니다."
},
{
"field": "data.price",
"message": "price는 0 이상이어야 합니다."
}
]
}
}
해결 방법
error.details 배열의 각 항목에서 문제 필드와 원인을 확인하고 요청 데이터를 수정합니다.
429 Too Many Requests
단시간에 너무 많은 요청을 보낸 경우입니다.
해결 방법
재시도 전 잠시 대기합니다. 응답 헤더의 Retry-After 값을 확인해 대기 시간을 조정합니다.
500 Internal Server Error
서버 내부 오류가 발생한 경우입니다.
해결 방법
동일한 요청을 잠시 후 재시도합니다. 문제가 지속되면 요청 ID(응답 헤더에 포함될 수 있음)와 함께 지원 채널에 문의합니다.
TypeScript 오류 처리 예제
const res = await fetch(
`https://api.onttle.com/v1/{projectId}/tables/posts/contents`,
{
headers: {
Authorization: `Bearer ${process.env.ONTTLE_API_KEY}`,
},
},
)
if (!res.ok) {
const error = await res.json()
switch (res.status) {
case 401:
throw new Error('인증 실패: API Key를 확인하세요.')
case 403:
throw new Error('권한 없음: API Key 권한을 확인하세요.')
case 404:
throw new Error('리소스를 찾을 수 없습니다.')
case 422:
console.error('유효성 오류:', error.error.details)
throw new Error('요청 데이터를 확인하세요.')
default:
throw new Error(`API 오류: ${res.status}`)
}
}
const data = await res.json()
다음 단계
- 인증 방식 — 401, 403 오류를 방지하는 올바른 인증 방법을 확인합니다.
- REST API 사용법 — 오류 처리를 포함한 완전한 요청 예제를 확인합니다.