Design & Error Codes

API Design

1. Path

Nodit Multichain API의 Path는 공통적으로 아래와 같이 구성됩니다.

/{version}/multichain/{API resource}
//EXAMPLE: /v1/multichain/lookupEntities
  • version: API의 버전을 명시합니다. (예시) v1
  • multichain: Multichain API 엔드포인트임을 나타내는 고정 세그먼트입니다.
  • resource: 각 API의 리소스가 정의되는 파트로, 계층 구조로 구성됩니다.

2. Response Format

모든 Multichain API의 응답은 Object 형태로 반환되며, 정상 응답(HTTP 상태코드가 2XX인 경우)의 경우 응답 Body 내부에 실제 응답 객체가 도메인 응답의 형태로 반환됩니다.

KeyValue Description
data요청에 대한 결과 응답 data 객체.

정상 응답이 아닌 경우, message필드가 code필드와 함께 응답 내에 포함됩니다. 발생한 오류에 대한 설명을 포함합니다.

KeyValue Description
message오류에 대한 설명 메세지.

성공과 실패 각 케이스에 대한 응답 예시는 다음과 같습니다.

// Successful response with 2XX http status code (single record)
{
  requested domain response will be included here 
}

// Successful response with 2XX http status code (mutiful record)
{
  "count": int,
  "cursor": "string", // or "page": 1
  "rpp": int,
  "items": [
    {
      requested domain response will be included here 
    }
  ]
}


// Error response
{
  "code":"RESOURCE_NOT_FOUND",
  "message":"The error message will be include here"
}

3. Error Response Format

오류가 발생한 경우 응답은 아래와 같은 형식으로 반환됩니다. codemessage는 발생한 에러 타입에 따라 다른 값으로 반환되며, code 명세에 대해서는 아래 Error Code Specification을 참고하세요.

{
  "code":"${CODE}",
  "message":"${ERROR_DESCRIPTION}"
}

Error Code Specification

codeHTTP Status CodeDescription
SUCCESS200 OK정상 응답
SUCCESS201 Created정상 처리 (신규 생성)
MISSING_REQUIRED_PARAMETER400 Bad Request필수 인자가 누락된 경우.

[Example Cases]

1. Path, Query, 또는 Body parameter 중 필수 필드 누락
INVALID_PARAMETER400 Bad Request인자에 잘못된 값을 입력한 경우.

[Example Casess]

1. 지정된 인자의 형식과 위배되는 값이 입력된 경우
2. 인자에 빈 값을 전달한 경우
3. 허용되는 최대 길이를 초과하는 값을 전달한 경우
4. 유효하지 않은 날짜/시간 형식을 입력된 경우
5. 정의된 인코딩 스킴을 적용하지 않은 인자가 입력된 경우
6. 포맷에 맞지 않는 인자 값을 입력한 경우
7. 호환되지 않는 파라미터를 함께 사용한 경우
WRONG_RANGE_PARAMETER400 Bad Request조회 범위를 지정하는 인자에 범위 밖의 값을 입력한 경우.

[Example Cases]

1. 통계 API에서 최대 조회 일자를 초과하여 요청한 경우
2. 기준일 이전 데이터를 요청한 경우
3. 존재하지 않는 데이터 범위에 대해 요청한 경우
DEPRECATED_OPERATION400 Bad RequestDeprecate된 API 및 리소스에 대한 요청한 경우.

[Example Cases]

1. API 버전이 업데이트되어 더이상 지원하지 않는 이전 버전의 API를 요청한 경우
NO_AUTHENTICATION_FOUND401 Unauthorized요청 내 인증 정보가 존재하나, 정보의 불일치 또는 존재하지 않는 계정 정보 에러

[Example Cases]

1. path 또는 header에 인증 정보가 포함되었으나 유효기간이 지난 경우
2. path 또는 header에 인증 정보가 포함되었으나 다른 계정의 인증 정보를 사용한 경우
AUTHENTICATION_FAILED401 Unauthorized요청 내 인증 정보 포함되지 않는 경우에 대한 에러

[Example Cases]

1. path 혹은 header에 인증 정보를 입력하지 않은 경우
PERMISSION_DENIED403 Forbidden인증은 완료되었으나 인가되지 않은 리소스에 접근하는 경우 권한 에러

[Example Cases]

1. 인증 정보의 권한이 없는 요청을 진행한 경우
WRONG_ENDPOINT404 Not Found요청한 API 경로가 존재하지 않는 경우

[Example Cases]

1. 잘못된 API 경로를 요청한 경우
2. 존재하지 않는 API 버전을 요청한 경우
3. 서버에서 제거되었거나 변경된 API를 호출한 경우
NOT_SUPPORTED_CHAIN404 Not Found요청한 체인에서 지원하지 않는 서비스 경로를 요청한 경우

[Example Cases]

1. 해당 path의 기능에서 path parameter의 {protocol}필드에 지정된 체인을 서비스하지 않는 경우
RESOURCE_NOT_FOUND404 Not Found요청한 리소스가 서버에 존재하지 않는 경우

[Example Cases]

1. 서버에 없는 데이터를 요청한 경우
2. 존재하지 않는 파일이나 리소스에 대한 요청
3. 유효하지 않은 ID나 키를 사용하여 데이터를 요청한 경우
METHOD_NOT_ALLOWED405 Method Not Allowed허용되지 않는 HTTP 메서드로 요청한 경우

[Example Cases]

1. 유효한 HTTP 메서드 타입이지만 요청한 API에서는 지원하지 않는 경우
2. 유효하지 않은 HTTP 메서드 타입으로 요청한 경우
TIMEOUT408 Request Timeout호출이 정해진 시간 이내에 완료되지 않는 경우 혹은 WAS 컨트롤러에서 목표로 한 시간 제한을 초과한 경우

[Example Cases]

1. Transaction receipt 조회를 위한 체인에 대한 RPC 호출이 5초 이내에 완료되지 않은 경우, 재시도 3회 포함 모두 실패 시 클라이언트에게 최종 TIMEOUT 에러 반환함.
2. Elasticsearch 서비스 호출시, receipt 조회 응답이 5초 내에 완료되지 않은 경우
RESOURCE_ALREADY_EXISTS409 Conflict이미 존재하는 리소스에 대한 중복 생성 요청한 경우

[Example Cases]

1. 중복 생성될 수 없는 리소스에 대한 중복 생성 시도
2. 요청된 식별 값을 키 값으로 생성 요청시, 해당 식별 값이 이미 존재하는 경우
REJECTED409 Conflict요청 처리가 서버로부터 거절된 경우
CONTENTS_TOO_LARGE413 Payload Too Large서버에서 설정된 payload 최대값을 초과한 경우
TOO_LONG_URI414 URI Too Long클라이언트 요청이 서버에서 해석가능한 최대 URI 길이를 초과한 경우 반환되는 에러.
TOO_MANY_REQUESTS429 Too Many Request허용된 Rate limit을 초과하는 경우

[Example Cases]

1. 초당/분당 Compute Unit 제한이 있는 경우
2. 초당/분당 Bytes 사이즈 제한이 있는 경우
3. 초당/분당 Requests 제한이 있는 경우
EXCEEDED_QUOTA_LIMIT429 Too many request허용된 Quota limit을 초과한 경우

[Example Cases]

1. 사용자의 요금제에서 제공하는 월별 사용량을 초과한 경우
INTERNAL_SERVER_ERROR500 Internal Server Error내부 서버 오류

[Example Cases]

1. 처리되지 않는 런타임 에러가 발생하는 경우
2. 인프라(DB, 스토리지, 큐, 캐시 등) 및 외부 서비스 호출과 같은 도메인 컨텍스트 이외의 영역에서 발생하는 모든 내부 에러의 경우
INTERRUPTED500 Internal Server Error다중 요청을 처리하는 과정에서 특정 클라이언트의 요청에 대해 일시적으로 처리가 실패한 경우.

서버 부하로 인한 에러로 판단 할 수 있음.
UNAVAILABLE503 Service Unavailable서버의 서비스 제공이 불가능한 상태. 인프라의 다운 또는 서비스 중단을 동반한 업그레이드 작업 등으로 인해 반환될 수 있는 에러.