Excepciones y códigos de estado HTTP

En muchas situaciones, es posible que desees utilizar códigos de estado HTTP comunes para indicar si la solicitud a la API de un usuario se realizó correctamente o si hubo un error. Por ejemplo, si un usuario intenta recuperar una entidad que no existe, es posible que desees enviar un código de estado HTTP 404 para decir que no existe ninguna entidad con el ID entity_id.

Puedes enviar códigos de estado HTTP comunes mediante el envío de una excepción proporcionada por la biblioteca de Endpoints de la siguiente manera:

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

Excepciones proporcionadas por Endpoints Frameworks

La biblioteca de Endpoints proporciona las siguientes excepciones, correspondientes a códigos de estado HTTP específicos:

Excepción Código de estado HTTP correspondiente
endpoints.BadRequestException HTTP 400
endpoints.UnauthorizedException HTTP 401
endpoints.ForbiddenException HTTP 403
endpoints.NotFoundException HTTP 404
endpoints.InternalServerErrorException HTTP 500

Códigos de estado HTTP compatibles

Cloud Endpoints Frameworks admite un subconjunto de códigos de estado HTTP en las respuestas de la API. En la siguiente tabla, se describen los códigos compatibles.

Códigos de estado HTTP Asistencia
HTTP 2xx Por lo general, HTTP 200 es el que supone Endpoints Frameworks si el método de API se muestra con éxito.
Si el tipo de respuesta del método de API es VoidMessage o el valor mostrado del método de API es None, en su lugar se establece HTTP 204.
HTTP 3xx Los códigos HTTP 3xx no son compatibles. El uso de cualquier código HTTP 3xx da como resultado una respuesta HTTP 404.
HTTP 4xx Solo se admiten los siguientes códigos HTTP 4xx:
  • 400
  • 401
  • 403
  • 404
  • 409
  • 410
  • 412
  • 413
Cualquier otro código HTTP 4xx se muestra como error 404, excepto por lo siguiente:
  • 405 se muestra como 501.
  • 408 se muestra como 503.
HTTP 5xx Todos los códigos de estado HTTP 5xx se convierten en HTTP 503 en la respuesta del cliente.

Crea tus propias clases de excepciones

Si desea crear otras clases de excepción para otros códigos de estado HTTP, puedes hacerlo si subclasificas endpoints.ServiceException. El siguiente fragmento muestra cómo crear una clase de excepción que represente un código de estado HTTP 409:

import endpoints
import httplib

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