Ausnahmen und HTTP-Statuscodes

In vielen Situationen möchten Sie vielleicht gängige HTTP-Statuscodes verwenden, um einem Nutzer anzuzeigen, ob seine API-Anfrage erfolgreich war oder nicht. Wenn ein Nutzer beispielsweise versucht, eine nicht vorhandene Entität abzurufen, können Sie einen HTTP-404-Statuscode senden, der angibt, dass keine Entität mit der ID entity_id vorhanden ist.

Sie können gängige HTTP-Statuscodes senden. Dazu geben Sie eine von der Endpoints-Bibliothek bereitgestellte Ausnahme aus:

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

Von Endpoints Frameworks bereitgestellte Ausnahmen

Die Endpoints-Bibliothek gibt die folgenden Ausnahmen aus. Diese entsprechen speziellen HTTP-Statuscodes:

Ausnahme Zugehöriger HTTP-Statuscode
endpoints.BadRequestException HTTP 400
endpoints.UnauthorizedException HTTP 401
endpoints.ForbiddenException HTTP 403
endpoints.NotFoundException HTTP 404
endpoints.InternalServerErrorException HTTP 500

Unterstützte HTTP-Statuscodes

Cloud Endpoints Frameworks unterstützt in API-Antworten einen Teil der HTTP-Statuscodes. Die unterstützten Codes werden in der folgenden Tabelle beschrieben.

HTTP-Statuscodes Support
HTTP 2xx Endpoints Frameworks geht bei einer erfolgreichen Rückgabe der API-Methode normalerweise von HTTP 200 aus.
Wenn der Antworttyp der API-Methode VoidMessage oder der Rückgabewert der API-Methode None ist, wird stattdessen HTTP 204 festgelegt.
HTTP 3xx HTTP 3xx-Codes werden nicht unterstützt. Bei der Verwendung von HTTP 3xx-Codes wird HTTP 404 zurückgegeben.
HTTP 4xx Es werden nur die folgenden HTTP 4xx-Codes unterstützt:
  • 400
  • 401
  • 403
  • 404
  • 409
  • 410
  • 412
  • 413
Für alle anderen HTTP 4xx-Codes wird der Fehler 404 zurückgegeben. Dies gilt jedoch nicht für die folgenden Codes:
  • Für 405 wird 501 zurückgegeben.
  • Für 408 wird 503 zurückgegeben.
HTTP 5xx Alle HTTP 5xx-Statuscodes werden in der Client-Antwort in HTTP 503 konvertiert.

Eigene Ausnahmeklassen erstellen

Wenn Sie andere Ausnahmeklassen für andere HTTP-Statuscodes erstellen möchten, können Sie diese aus endpoints.ServiceException ableiten. Das folgende Snippet zeigt, wie Sie eine Ausnahmeklasse erstellen, die den HTTP-Statuscode 409 repräsentiert:

import endpoints
import httplib

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