Как можно создать подкласс конечных точек.ServiceException?

В документации упоминается "создание подклассов конечных точек.ServiceException" по адресу https://developers.google.com/appengine/docs/python/endpoints/exceptions. Тем не менее, подклассы не могут действительно выразить что-либо кроме строкового сообщения, "состояния" и http-кода.

Для любого приложения, чтобы иметь более умную обработку исключений, ошибки должны нести больше, чем это.

Как можно создать подкласс класса исключений, предоставив пользовательское сообщение / состояние?

1 ответ

Решение

В настоящее время нет способа расширить полезную нагрузку, но вы можете настроить код состояния.

Как это делается в endpoints.api_exceptions для 400 ошибка:

import httplib
class BadRequestException(ServiceException):
  """Bad request exception that is mapped to a 400 response."""
  http_status = httplib.BAD_REQUEST

Текущий список (по состоянию на 08.05.2013) кодов состояния, поддерживаемых для ошибок:

  • httplib.BAD_REQUEST: 400
  • httplib.UNAUTHORIZED: 401
  • httplib.FORBIDDEN: 403
  • httplib.NOT_FOUND: 404
  • httplib.CONFLICT: 409
  • httplib.GONE: 410
  • httplib.PRECONDITION_FAILED: 412
  • httplib.REQUEST_ENTITY_TOO_LARGE: 413

и эти коды состояния будут сопоставлены с другими кодами:

  • httplib.PAYMENT_REQUIRED: 402 сопоставлены с 404
  • httplib.METHOD_NOT_ALLOWED: 405 сопоставлен с 501
  • httplib.NOT_ACCEPTABLE: 406 сопоставлено с 404
  • httplib.PROXY_AUTHENTICATION_REQUIRED: 407 сопоставлен с 404
  • httplib.REQUEST_TIMEOUT: 408 сопоставлен с 503
  • httplib.LENGTH_REQUIRED: 411 сопоставлен с 404
  • httplib.REQUEST_URI_TOO_LONG: 414 сопоставлен с 404
  • httplib.UNSUPPORTED_MEDIA_TYPE: 415 сопоставлен с 404
  • httplib.REQUESTED_RANGE_NOT_SATISFIABLE: 416 сопоставлен с 404
  • httplib.EXPECTATION_FAILED: 417 сопоставлен с 404

Кроме того, если ваш ответ message_types.VoidMessage объект, вы сможете отправить 204 нет ответа на контент (httplib.NO_CONTENT).

Другие вопросы по тегам