【发布时间】:2018-09-15 20:13:49
【问题描述】:
我正在我的公司使用 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 响应的良好做法是什么?
【问题讨论】:
-
这个问题中提出的类似问题stackoverflow.com/questions/36366727/…
-
浏览器会在接受标头中告诉您他们接受的内容。如果浏览器不接受 JSON,那么给它 JSON 有什么意义?
-
通过
$apiRoute = $request->segment(1) == 'api';之类的操作也可能更容易检查 api 路由 -
@apokryfos 你能详细说明一下吗? '浏览器会让你知道'是什么意思。我可以在 laravel 中设置一个设置来说明它接受的内容吗?
-
请求接受头由客户端设置。作为服务器,您应该尊重客户端发送的内容。如果这是为了调试,您可以使用 postman 之类的东西并从那里正确发送标头或实施一些单元测试。