예외 및 HTTP 상태 코드

사용자의 API 요청 성공 또는 실패 여부를 나타낼 때는 공통 HTTP 상태 코드를 사용하려는 경우가 많습니다. 예를 들어 사용자가 존재하지 않는 항목을 가져오려고 하면 HTTP 404 상태 코드를 전송하여 ID가 entity_id 인 항목이 존재하지 않음을 알릴 수 있습니다.

다음과 같이 엔드포인트 라이브러리에서 제공되는 예외를 발생시켜서 이러한 공통 HTTP 상태 코드를 전송할 수 있습니다.

message = 'No entity with the id "%s" exists.' % entity_id
raise endpoints.NotFoundException(message)

Endpoints Frameworks에서 제공되는 예외

엔드포인트 라이브러리는 특정 HTTP 상태 코드에 따라 다음과 같은 예외를 제공합니다.

예외 해당 HTTP 상태 코드
endpoints.BadRequestException HTTP 400
endpoints.UnauthorizedException HTTP 401
endpoints.ForbiddenException HTTP 403
endpoints.NotFoundException HTTP 404
endpoints.InternalServerErrorException HTTP 500

지원되는 HTTP 상태 코드

Cloud Endpoints Frameworks에서는 API 응답에서 HTTP 상태 코드 일부가 지원됩니다. 지원되는 코드는 다음 표에 설명되어 있습니다.

HTTP 상태 코드 지원
HTTP 2xx API 메서드가 성공적으로 반환되면 일반적으로 Endpoints Frameworks에서 HTTP 200이 사용됩니다.
API 메서드의 응답 유형이 VoidMessage이거나, 혹은 API 메서드의 반환 값이 None이면 204가 대신 설정됩니다.
HTTP 3xx HTTP 3xx 코드는 지원되지 않습니다. HTTP 3xx 코드를 사용하면 HTTP 404 응답이 발생합니다.
HTTP 4xx 다음 HTTP 4xx 코드만 지원됩니다.
  • 400
  • 401
  • 403
  • 404
  • 409
  • 410
  • 412
  • 413
다음을 제외하고 다른 모든 HTTP 4xx 코드는 404 오류로 반환됩니다.
  • 405501로 반환됨
  • 408503로 반환됨
HTTP 5xx 모든 HTTP 5xx 상태 코드는 클라이언트 응답에서 HTTP 503으로 변환됩니다.

고유한 예외 클래스 만들기

다른 HTTP 상태 코드에 대해 다른 예외 클래스를 만들려면 endpoints.ServiceException을 서브클래스로 만들면 됩니다. 다음 스니펫은 HTTP 409 상태 코드를 나타내는 예외 클래스 생성 방법을 보여줍니다.

import endpoints
import httplib

class ConflictException(endpoints.ServiceException):
  """Conflict exception that is mapped to a 409 response."""
  http_status = httplib.CONFLICT