我正在使用laravel在我的公司建立一个api。
我遇到的问题是,如果您发送api请求而没有使用请求定义正确的标头,那么如果出现故障,您将获得html。授权失败或findOrFail()
失败。
我的想法是你永远不想返回html(即使用户有错误的标题)。
我有几个解决方案。在BeforeMiddleware.php
中,我可以手动在请求中插入标题,例如:
// Check if we are on an api route
$apiRoute = strncmp($uri, '/api/', 5) == 0;
// Insert the request header to force json response
if ($apiRoute){
$language = $request->header->add('Accept', 'application/json');
}
如果他们没有正确的标题,第二种解决方案就是抛出错误。
强制执行json响应的最佳方法是什么,在laravel中处理api响应的好方法是什么?
答案 0 :(得分:0)
一旦您检测到您在api路径上,便步履蹒跚,并且确实可以按照How do you force a JSON response on every response in Laravel?的建议在app \ Exceptions \ Handler.php文件中解决您的问题。
对于一个开源项目,我通过Microsoft格式创建了JSON异常对象作为输出,但是您可以根据需要选择jsonapi格式(http://jsonapi.org/examples/#error-objects-basics): https://github.com/StadGent/laravel_site_opening-hours/blob/develop/app/Exceptions/Handler.php (请注意,此实现确实取决于标头,但我认为您可以使用路径检测)