Передача ответов об ошибках JSON через HTTPD

Команда, с которой я работаю, создает интерфейс API для своего приложения, чтобы предоставить данные веб-сайту, который в этом нуждается. Они отправляют запросы и ответы в формате JSON, но в настоящее время заблокированы по следующей проблеме.

Они написали свой API для ответа на запрос, в котором отсутствуют необходимые данные, с кодом ошибки 422:

422 Unprocessable Entity (WebDAV; RFC 4918) - Запрос был правильно сформирован, но не мог быть выполнен из-за семантических ошибок.

Запрос обрабатывается, и с сервера приложений возвращается действительный объект ответа JSON, но HTTPD-сервер в настоящее время перехватывает ответ и помещает общий ErrorDocument для ошибки 422.

Хотел посмотреть есть ли способ:

  1. Отключите перехват ErrorDocument и просто прозрачно верните JSON-ответ от сервера приложений через сервер Apache
  2. Используйте обработчик ErrorDocument, но вставьте тело ответа в возвращаемое сообщение - т.е.

    ErrorDocument 422 $ {RESPONSE_BODY}

Любые другие предложения будут приветствоваться. Наше временное решение - просто вернуть ответ 200 и определить код ошибки в ответе, но по возможности использовать коды ошибок HTTP.

1 ответ

Не зная структуры URL вашего API, я бы предложил нечто похожее на то, что я использую в JSON API, который я создал, который использует PHP для фреймворка. Поместите это в .htaccess файл в корневом каталоге вашего сервера или веб-приложения.

ErrorDocument  422     /error/422

Что это делает, это отправить любой 422 ошибка в пути URL /error/422, Это при условии, что у вас есть настройки вашего сервера следующим образом:

http://api.mygreatserver.net/error/422

У меня тоже есть правило в моем .htaccess какие маршруты трафика так:

RewriteRule     ^([a-z_-]+)/([0-9]+)/?$   index.php?controller=$1&id=$2 [QSA]

Так что в основном /error/422 превращается в index.php?controller=error&id=422 за кулисами. Сценарий PHP направляется к error а потом error действует на 422… И вуаля!

И если каким-то образом сам API расположен как путь к домену, вот так:

http://www.mygreatserver.net/api/error/422

Тогда это может быть что-то вроде этого:

ErrorDocument  422     /api/error/422

Общая цель - отправить 422 на заранее определенный путь в вашем контроле. И затем внутри этого контроллера вы отправляете любой пользовательский контент, который пожелаете.

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