在Symfony2 REST API中抛出异常或显示自定义错误消息

时间:2014-10-15 13:44:39

标签: php rest symfony exception fosrestbundle

我有两个问题:

(1.)我想知道在REST API中显示错误消息的最佳方法是什么。

我应该抛出异常或 我应该使用 VIEW 来显示包含状态代码等详细信息的错误消息。

我正在使用FOSRestBundle处理与休息相关的任务。

我在每个响应中发送API使用数据(没有API使用者询问)。

(2。)如果我使用异常如何将自定义数据添加到包含错误消息的标题中。

3 个答案:

答案 0 :(得分:1)

使用RESTful API,您始终使用HTTP代码向客户提供有意义的消息。

为此,您使用Response对象发送各种HTTP代码。 Symfony提供了一些异常处理方案,这些方案会导致403404500错误,但不会像this list那样广泛。所有异常都会抛出您可以手动实现的相同HTTP代码,尽管在开发环境中有更多有意义的内部调试错误,但控制较少。

send a meaningful HTTP error code(例如正在成功创建的对象):

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,因此您应该reading the documentation about the view layer and how to use it。视图层已经为您处理这些HTTP代码,并提供多种格式的响应,就像RESTful接口应该一样。

答案 1 :(得分:0)

正如您所看到的,here可以为内核异常添加一个监听器。

在该侦听器中,您可以定义响应的标头和状态代码,如:

    $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的使用者就能够处理不同类型的异常。

尽管如此,如果抛出一般性异常(意味着某些事情已经出现了可怕的错误),您仍然可以返回格式正确的响应,并且消费者也能够处理失败

答案 2 :(得分:0)

我有同样的问题和问题。寻找答案让我想到了这个问题。我最终设法让它工作,我在这里发布了一个类似问题的答案(问题中的代码也非常有用): FOSRestBundle configuration of exceptions messages in prod environment

这个文档也很有用,虽然不是很清楚我想:https://symfony.com/doc/current/bundles/FOSRestBundle/4-exception-controller-support.html