Либо сгенерируйте исключение, либо покажите пользовательское сообщение об ошибке в Symfony2 REST API

У меня две проблемы:

(1.) Я хочу знать, что это лучший способ показать сообщения об ошибках в REST API.

Нужно ли мне бросить исключения или же
я должен использовать ПОСМОТРЕТЬ показать сообщения об ошибках с кодом состояния и т. д. детали.

Я использую FOSRestBundle для обработки задач, связанных с отдыхом.

Я отправляю данные об использовании API в каждом ответе (без запроса потребителя API).

(2.) Если я использую исключение, как добавить свои пользовательские данные в заголовки с сообщением об ошибке.

1

Решение

С RESTful API, вы всегда используйте HTTP-коды для предоставления значимых сообщений клиенту.

Для этого вы используете Response Объект для отправки различных кодов HTTP. Symfony предоставляет несколько сценариев обработки исключений, которые приведут к 403, 404, или же 500 ошибки, но не так много, как этот список. Все исключения, которые будут делать — это генерировать те же HTTP-коды, которые вы могли бы получить вручную, хотя и с более значительными внутренними ошибками отладки в среде разработки, но с меньшим контролем.

к отправить значимый код ошибки HTTP (например, успешно создаваемый объект):

use Symfony\Component\HttpFoundation\Response;

$response = new Response(
'A custom message or an XML/JSON/anything object',
Response::HTTP_CREATED,
array('content-type' => 'text/html')
// Can also be application/json or application/xml .. list goes on
);

но так как вы уже используете FOSRestBundle, вы должны быть чтение документации о слое представления и о том, как его использовать вместо. Слой представления уже обработает эти HTTP-коды для вас и предоставит ответы в нескольких форматах, как и интерфейс RESTful.

1

Другие решения

Как вы видете Вот Вы можете добавить слушатель для исключений ядра.

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

    $response = new Response();
$response->setContent($message);
$response->setStatusCode("YOUR_STATUS_CODE");
$response->headers->replace("YOUR_CUSTOM_HEADERS");

// Send the modified response object to the event
$event->setResponse($response);

Лично я предпочитаю бросать исключения, но стараюсь делать их как можно более конкретными. Таким образом, потребитель API может обрабатывать различные типы исключений.

Тем не менее, если генерируется общее исключение (означает, что что-то пошло не так, как надо), вы все равно можете вернуть правильно отформатированный ответ, и потребитель сможет также обработать ошибку

0

У меня был тот же вопрос и проблема. Поиск ответа привел меня к этому вопросу. В конце концов мне удалось заставить его работать, и я разместил ответ на аналогичный вопрос (код в вопросе тоже очень полезен) здесь:
FOSRestBundle конфигурация сообщений об исключениях в среде prod

Эта документация также была полезной, хотя я не очень ясно подумал: https://symfony.com/doc/current/bundles/FOSRestBundle/4-exception-controller-support.html

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector