laravelapi统一返回接口
时间: 2023-11-12 09:06:04 浏览: 45
在 Laravel 中,可以通过自定义中间件来实现 API 统一返回格式。具体步骤如下:
1. 创建中间件文件,例如 `ApiFormatMiddleware.php`,并在 `app/Http/Kernel.php` 文件的 `$middlewareGroups` 属性中添加中间件:
```php
protected $middlewareGroups = [
// ...
'api' => [
// ...
\App\Http\Middleware\ApiFormatMiddleware::class,
],
];
```
2. 在 `ApiFormatMiddleware.php` 中,编写中间件逻辑,统一处理 API 返回格式:
```php
<?php
namespace App\Http\Middleware;
use Closure;
class ApiFormatMiddleware
{
public function handle($request, Closure $next)
{
$response = $next($request);
if ($response->exception instanceof \App\Exceptions\ApiException) {
// 处理自定义 API 异常
return response()->json([
'code' => $response->getStatusCode(),
'message' => $response->exception->getMessage(),
'data' => null,
]);
}
// 统一处理成功响应
return response()->json([
'code' => 0,
'message' => 'success',
'data' => $response->original,
]);
}
}
```
3. 在 API 控制器中,根据业务逻辑处理返回结果:
```php
<?php
namespace App\Http\Controllers\Api;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
public function index()
{
$users = User::all();
return $this->success($users);
}
public function store()
{
// ...
if ($error) {
throw new \App\Exceptions\ApiException('创建用户失败');
}
return $this->success($user);
}
protected function success($data)
{
return response()->json($data);
}
}
```
这样,所有 API 请求都会经过 `ApiFormatMiddleware` 中间件,返回格式会被统一处理。同时在业务逻辑中,可以通过抛出 `ApiException` 异常来处理自定义的 API 异常。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![.zip](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)