Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

mitoop/laravel-api-response

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

69 Commits

Repository files navigation

Laravel API Response

✨ 主要功能

🎯 提供统一且标准化的响应格式,同时支持普通分页与游标分页
🔧 支持自定义状态码与扩展字段
📦 灵活设置响应头(可添加签名、追踪 ID、版本号等)
🚀 无缝兼容 Laravel API 资源
🐛 已定制异常处理器,实现统一格式化输出

环境需求

以下为最低环境要求:

  • PHP >= 8.2
  • Laravel ^11.0|^12.0

安装

composer require mitoop/laravel-api-response

输出格式

{
 "success": true, // 请求是否成功。true 表示成功,false 表示失败。由系统自动判断,无需手动设置。
 "code": 0, // 状态码。默认值为 0(成功)、1(失败)、-1(登录失效),可通过 `setDefaults` 自定义。
 "message": "success", // 提示信息
 "data": {}, // 成功响应的主体内容
 "meta": { // 分页信息对象,仅在分页响应时返回
 "pagination": "page", // 分页类型,可为 "page" 或 "cursor"
 "page": 1, // 当前页码(仅 page 分页)
 "page_size": 20, // 每页条数
 "has_more": false, // 是否有下一页
 "total": 100, // 总条数(仅 paginate 方法有,simplePaginate 没有)
 "next_cursor": "..." // 下一个游标(仅 cursor 分页)
 },
 "errors": {} // 错误详情对象,仅在请求失败时返回,类型可为 object 或 array
}

使用

use Mitoop\Http\RespondsWithJson;
class Controller extends BaseController
{
 use RespondsWithJson;
}

可用方法

包含三个方法 success, error, deny, 分别对应成功, 失败, 登录失效三种情况

class Controller extends BaseController
{
 use RespondsWithJson;
 public function successEmpty()
 {
 return $this->success();
 }
 public function successWithData()
 {
 return $this->success(['Hello']);
 }
 public function successWithPagination()
 {
 return $this->success(User::active()->paginate());
 }
 public function errorDefault()
 {
 return $this->error();
 }
 public function errorCustomMessage()
 {
 return $this->error('自定义错误信息');
 }
 public function unauthorized()
 {
 return $this->deny('登录信息已失效, 请重新登陆!');
 }
}

自定义状态码以及扩展字段

AppServiceProvider@boot 方法中添加如下代码

use Mitoop\Http\JsonResponderDefault;
app(JsonResponderDefault::class)->apply([
 'success' => 0,
 'error' => 1,
 'deny' => -1,
 'extra' => [
 'request_id' => app('request_id'),
 ],
]);

API 资源

支持 API 资源, 只需要改下继承关系, 其他不需要任何改变
Tips: 更改下系统默认的 stub, 每次直接生成好继承关系

普通资源继承 Mitoop\Http\Resources\Resource

use Illuminate\Http\Request;
use Mitoop\Http\Resources\Resource;
class LoraResource extends Resource
{
 public function toArray(Request $request): array
 {
 return [
 'id' => $this->id,
 'name' => $this->name,
 ];
 }
}

资源集合继承 Mitoop\Http\Resources\ResourceCollection

use Mitoop\Http\Resources\ResourceCollection;
class LoraCollection extends ResourceCollection
{
}

和原来一样,直接返回资源对象,自动应用统一响应格式

class Controller extends BaseController
{
 public function show()
 {
 // 直接返回标准化的 API Resource
 return new LoraResource(Lora::find(1));
 }
}

异常

已定制异常处理器,开发者只需少量配置即可实现统一格式化输出,同时支持完全自定义异常逻辑。

  1. AppServiceProvider 类中添加如下代码
 use Illuminate\Contracts\Debug\ExceptionHandler;
 use Mitoop\Http\Exceptions\Handler;
 
 public $singletons = [
 ExceptionHandler::class => Handler::class,
 ];
  1. bootstrap/app.php 中添加如下代码
use Illuminate\Foundation\Configuration\Exceptions;
->withExceptions(function (Exceptions $exceptions) { 
 // 只需要根据需求配置异常映射
 // 其他异常由统一 Handler 接管,无需单独处理
 $exceptions->map(JWTException::class, fn ($e) => new AuthenticationException); 
})

License

MIT

About

Normalize and standardize Laravel API response data structures.

Topics

Resources

Stars

Watchers

Forks

Packages

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /