{"id":37236662,"url":"https://github.com/mitoop/laravel-api-response","last_synced_at":"2026-01-16T04:53:37.386Z","repository":{"id":181374216,"uuid":"666632507","full_name":"mitoop/laravel-api-response","owner":"mitoop","description":"Normalize and standardize Laravel API response data structures.","archived":false,"fork":false,"pushed_at":"2025-11-02T09:05:14.000Z","size":119,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-02T09:12:15.664Z","etag":null,"topics":["api","response"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mitoop.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-07-15T04:05:29.000Z","updated_at":"2025-11-02T09:05:18.000Z","dependencies_parsed_at":"2025-05-02T14:27:39.937Z","dependency_job_id":"51c46a41-9022-40d5-8fef-9364eaa8b289","html_url":"https://github.com/mitoop/laravel-api-response","commit_stats":null,"previous_names":["mitoop/laravel-api-response"],"tags_count":27,"template":false,"template_full_name":null,"purl":"pkg:github/mitoop/laravel-api-response","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitoop%2Flaravel-api-response","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitoop%2Flaravel-api-response/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitoop%2Flaravel-api-response/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitoop%2Flaravel-api-response/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mitoop","download_url":"https://codeload.github.com/mitoop/laravel-api-response/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mitoop%2Flaravel-api-response/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28420814,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T10:47:48.104Z","status":"ssl_error","status_checked_at":"2026-01-14T10:46:19.031Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","response"],"created_at":"2026-01-15T04:16:07.661Z","updated_at":"2026-01-15T04:16:08.443Z","avatar_url":"https://github.com/mitoop.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eLaravel API Response\u003c/h1\u003e\n\n## ✨ 主要功能\n🎯 提供统一且标准化的响应格式，同时支持普通分页与游标分页  \n🔧 支持自定义状态码与扩展字段  \n📦 灵活设置响应头（可添加签名、追踪 ID、版本号等）  \n🚀 无缝兼容 Laravel API 资源  \n🐛 已定制异常处理器，实现统一格式化输出  \n\n## 环境需求\n以下为最低环境要求：\n- PHP \u003e= 8.2\n- Laravel ^11.0｜^12.0\n\n## 安装\n\n```shell\ncomposer require mitoop/laravel-api-response\n```\n\n## 输出格式\n```jsonc\n{\n  \"success\": true,             // 请求是否成功。true 表示成功，false 表示失败。由系统自动判断，无需手动设置。\n  \"code\": 0,                   // 状态码。默认值为 0（成功）、1（失败）、-1（登录失效），可通过 `setDefaults` 自定义。\n  \"message\": \"success\",        // 提示信息\n  \"data\": {},                  // 成功响应的主体内容\n  \"meta\": {                    // 分页信息对象，仅在分页响应时返回\n    \"pagination\": \"page\",      // 分页类型，可为 \"page\" 或 \"cursor\"\n    \"page\": 1,                 // 当前页码（仅 page 分页）\n    \"page_size\": 20,           // 每页条数\n    \"has_more\": false,         // 是否有下一页\n    \"total\": 100,              // 总条数（仅 paginate 方法有，simplePaginate 没有）\n    \"next_cursor\": \"...\"       // 下一个游标（仅 cursor 分页）\n  },\n  \"errors\": {}                 // 错误详情对象，仅在请求失败时返回，类型可为 object 或 array\n}\n```\n\n## 使用\n\n```php\nuse Mitoop\\Http\\RespondsWithJson;\n\nclass Controller extends BaseController\n{\n    use RespondsWithJson;\n}\n```\n\n#### 可用方法\n\n包含三个方法 `success`, `error`, `deny`, 分别对应成功, 失败, 登录失效三种情况\n\n```php\nclass Controller extends BaseController\n{\n    use RespondsWithJson;\n\n    public function successEmpty()\n    {\n       return $this-\u003esuccess();\n    }\n\n    public function successWithData()\n    {\n       return $this-\u003esuccess(['Hello']);\n    }\n\n    public function successWithPagination()\n    {\n       return $this-\u003esuccess(User::active()-\u003epaginate());\n    }\n\n    public function errorDefault()\n    {\n       return $this-\u003eerror();\n    }\n\n    public function errorCustomMessage()\n    {\n       return $this-\u003eerror('自定义错误信息');\n    }\n\n    public function unauthorized()\n    {\n       return $this-\u003edeny('登录信息已失效, 请重新登陆!');\n    }\n}\n```\n\n## 自定义状态码以及扩展字段\n\n在 `AppServiceProvider@boot` 方法中添加如下代码\n\n```php\nuse Mitoop\\Http\\JsonResponderDefault;\n\napp(JsonResponderDefault::class)-\u003eapply([\n    'success' =\u003e 0,\n    'error' =\u003e 1,\n    'deny' =\u003e -1,\n    'extra' =\u003e [\n       'request_id' =\u003e app('request_id'),\n    ],\n]);\n```\n\n## API 资源\n支持 API 资源, `只需要`改下继承关系, 其他不需要任何改变  \nTips: 更改下系统默认的 `stub`, 每次直接生成好继承关系\n\n#### 普通资源继承 `Mitoop\\Http\\Resources\\Resource`\n\n```php\nuse Illuminate\\Http\\Request;\nuse Mitoop\\Http\\Resources\\Resource;\n\nclass LoraResource extends Resource\n{\n    public function toArray(Request $request): array\n    {\n        return [\n            'id' =\u003e $this-\u003eid,\n            'name' =\u003e $this-\u003ename,\n        ];\n    }\n}\n\n```\n\n#### 资源集合继承 `Mitoop\\Http\\Resources\\ResourceCollection`\n\n```php\nuse Mitoop\\Http\\Resources\\ResourceCollection;\n\nclass LoraCollection extends ResourceCollection\n{\n\n}\n```\n\n#### 和原来一样，直接返回资源对象，自动应用统一响应格式\n\n```php\nclass Controller extends BaseController\n{\n    public function show()\n    {\n       // 直接返回标准化的 API Resource\n       return new LoraResource(Lora::find(1));\n    }\n}\n```\n\n## 异常\n已定制异常处理器，开发者只需少量配置即可实现统一格式化输出，同时支持完全自定义异常逻辑。\n\n1. 在 `AppServiceProvider` 类中添加如下代码\n```php\n    use Illuminate\\Contracts\\Debug\\ExceptionHandler;\n    use Mitoop\\Http\\Exceptions\\Handler;\n    \n    public $singletons = [\n        ExceptionHandler::class =\u003e Handler::class,\n    ];\n```\n2. 在 `bootstrap/app.php` 中添加如下代码\n```php\nuse Illuminate\\Foundation\\Configuration\\Exceptions;\n\n-\u003ewithExceptions(function (Exceptions $exceptions) {    \n    // 只需要根据需求配置异常映射\n    // 其他异常由统一 Handler 接管，无需单独处理\n    $exceptions-\u003emap(JWTException::class, fn ($e) =\u003e new AuthenticationException); \n})\n```\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmitoop%2Flaravel-api-response","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmitoop%2Flaravel-api-response","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmitoop%2Flaravel-api-response/lists"}