Rob*_*bok 5 php rest http laravel laravel-5
我正在使用Laravel构建RESTful API.我的API总是返回JSON.我想做的是将响应逻辑保持在一个地方.以下是我现在在API控制器中执行此操作的方法Route::controller().有趣且超有用的例子来了:
public function getDouble($number) {
try {
if (!is_numeric($number)) {
throw new HttpException(400, 'Invalid number.');
}
$response = $number * 2;
$status = 200;
}
catch (HttpException $exception) {
$response = $exception->getMessage();
$status = $exception->getStatusCode();
}
return response()->json($response, $status);
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,我的API路由将由/double/13GET方法访问.问题是我在每个方法中重复这个try ... catch块.我希望我的API方法如下:
public function getDouble($number) {
if (!is_numeric($number)) {
throw new HttpException(400, 'Invalid number.');
}
return $number;
}
Run Code Online (Sandbox Code Playgroud)
然后,捕获这些异常并在另一个地方形成JSON.在良好的应用程序架构方面,这里最好的方法是什么?
ult*_*ate 12
您可以通过处理异常来完成此操作App\Exceptions\Handler.
你可以在render方法中做到,喜欢:
/**
* Render an exception into an HTTP response.
*
* @param \Illuminate\Http\Request $request
* @param \Exception $e
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $e)
{
if($e instanceof HttpException) {
return response()->json($e->getMessage(), $e->getStatusCode());
}
return parent::render($request, $e);
}
Run Code Online (Sandbox Code Playgroud)
有几种方法可以做到这一点,但我猜中间件是最适合的.
$routeMiddleware数组中.你可以做以下几点:
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$response = $next($request);
return response()->json($response->getOriginalContent());
}
Run Code Online (Sandbox Code Playgroud)
当然,你需要改变一些逻辑来按照你想要的方式解析内容,但骨架保持不变.
| 归档时间: |
|
| 查看次数: |
9440 次 |
| 最近记录: |