Eccezioni e codici di stato HTTP

In molte situazioni, potresti voler utilizzare codici di stato HTTP comuni per indicare l'esito positivo o negativo di una richiesta API di un utente. Ad esempio, se un utente sta tentando di recuperare un'entità inesistente, ti consigliamo di inviare un codice di stato HTTP 404 per indicare che non esiste alcuna entità con l'ID entity_id.

Puoi inviare questi codici di stato HTTP comuni sollevando un'eccezione fornita dalla libreria di endpoint come segue:

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

Eccezione fornite da Endpoints Frameworks

La libreria di endpoint fornisce le seguenti eccezioni, corrispondenti a codici di stato HTTP specifici:

Eccezione Codice di stato HTTP corrispondente
endpoints.BadRequestException HTTP 400
endpoints.UnauthorizedException HTTP 401
endpoints.ForbiddenException HTTP 403
endpoints.NotFoundException HTTP 404
endpoints.InternalServerErrorException HTTP 500

Codici di stato HTTP supportati

Cloud Endpoints Frameworks supporta un sottoinsieme di codici di stato HTTP nelle risposte delle API. La tabella seguente descrive i codici supportati.

Codici di stato HTTP Assistenza
HTTP 2xx In genere, HTTP 200 viene assunto dai framework di endpoint se il metodo API restituisce un valore corretto.
Se il tipo di risposta del metodo API è VoidMessage o il valore restituito del metodo API è None, viene impostato HTTP 204.
HTTP 3xx I codici HTTP 3xx non sono supportati. L'utilizzo di codici HTTP 3xx comporta una risposta HTTP 404.
HTTP 4xx Sono supportati solo i seguenti codici HTTP 4xx:
  • 400
  • 401
  • 403
  • 404
  • 409
  • 410
  • 412
  • 413
Qualsiasi altro codice HTTP 4xx viene restituito come errore 404, ad eccezione di quanto segue:
  • 405 viene restituito come 501
  • 408 viene restituito come 503
Errori HTTP 5xx Tutti i codici di stato HTTP 5xx vengono convertiti in HTTP 503 nella risposta del client.

Creare classi di eccezione personalizzate

Se vuoi creare altre classi di eccezioni per altri codici di stato HTTP, può farlo creando sottoclassi endpoints.ServiceException. Il seguente snippet mostra come creare una classe di eccezione che rappresenta un codice di stato HTTP 409:

import endpoints
import httplib

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