gpt4 book ai didi

php - Laravel 5 中的 RESTful API 响应

转载 作者:可可西里 更新时间:2023-11-01 15:19:34 25 4
gpt4 key购买 nike

我正在使用 Laravel 构建 RESTful API。我的 API 总是返回 JSON。我想做的是将响应逻辑放在一个地方。下面是我现在在 API Controller 中的做法,它由 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);
}

在这个例子中,我的 API 路由将是例如 /double/13 通过 GET 方法访问。问题是我在每个方法中重复这个 try ... catch block 。我希望我的 API 方法是这样的:

public function getDouble($number) {
if (!is_numeric($number)) {
throw new HttpException(400, 'Invalid number.');
}

return $number;
}

然后,捕获这些异常并在另一个地方形成 JSON。就良好的应用程序架构而言,这里的最佳方法是什么?

最佳答案

异常响应

您可以通过在 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);
}

成功响应

有几种方法可以做到这一点,但我想中间件是最适合的一种。

  • 创建一个中间件(比如 ApiResponseFormatterMiddleware)
  • 在您的“App\Http\Kernel”中,将其添加到 $routeMiddleware 数组。
  • 将其应用于 api 路由,您要解析的响应。

你可以按照以下方式做一些事情:

/**
* 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());
}

当然,您需要更改一些逻辑以按照您想要的方式解析内容,但框架保持不变。

关于php - Laravel 5 中的 RESTful API 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28692453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com