我有两个问题:
(1.)我想知道在REST API中显示错误消息的最佳方法是什么。
我应该抛出异常或 我应该使用 VIEW 来显示包含状态代码等详细信息的错误消息。
我正在使用FOSRestBundle处理与休息相关的任务。
我在每个响应中发送API使用数据(没有API使用者询问)。
(2。)如果我使用异常如何将自定义数据添加到包含错误消息的标题中。
答案 0 :(得分:1)
使用RESTful API,您始终使用HTTP代码向客户提供有意义的消息。
为此,您使用Response
对象发送各种HTTP代码。 Symfony提供了一些异常处理方案,这些方案会导致403
,404
或500
错误,但不会像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