mcpField
L
laravel-api

laravel-api

github.com/fusengine开发3578 次安装1 周前更新
代码仓库

关于 laravel-api

面向 Laravel 开发者的 RESTful API 构建技能,涵盖资源化 JSON 响应、验证、身份认证、版本管理、分页、限流及外部 HTTP 请求。

主要功能

  1. 01使用 API Resources 返回 JSON
  2. 02Sanctum 身份认证
  3. 03Form Request 输入验证
  4. 04路由版本管理与限流
  5. 05偏移量与游标分页
  6. 06调用外部 API 的 HTTP 客户端

适用场景

  1. 01构建带版本的 REST 端点
  2. 02验证并授权 API 输入
  3. 03对大量 API 结果分页
  4. 04通过 HTTP 调用外部服务

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/fusengine/claude-plugins --skill laravel-api

安装后在 Claude Code 中输入/laravel-api确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
controllers.md
http-client.md
middleware.md
pagination.md
rate-limiting.md
redirects.md
requests.md
responses.md
routing.md
strings.md
urls.md
validation.md
references/templates/
api-routes.md
ApiController.php.md
ApiResource.php.md
FormRequest.php.md
HttpClientService.php.md
routing-examples.md
validation-rules.md

详细介绍

介绍如何使用 Laravel 构建 RESTful API:使用 API Resources 转换响应、使用 Sanctum 进行身份验证、速率限制、路由版本控制、Form Request 验证、分页(偏移量/游标),以及通过 HTTP 客户端调用外部 API。对于符合 JSON:API 规范的端点(稀疏字段集、包含关系、链接),请改用 laravel-jsonapi。

Laravel API 开发

Agent 工作流(强制)

在进行任何实现之前,必须并行启动 3 个 Agent,每次调用一个 Agent,并指定 name:

  1. fuse-ai-pilot:explore-codebase - 分析现有 API 模式
  2. fuse-ai-pilot:research-expert - 通过 Context7 核实 Laravel API 文档
  3. mcp__context7__query-docs - 检查 API Resources 和 Sanctum 模式

实现完成后,运行 fuse-ai-pilot:sniper 进行验证。


概览

使用 Laravel 和 API Resources 转换响应,并使用 Sanctum 进行身份验证,构建 RESTful API。

组件用途
Controllers处理请求并委派给服务
Form Requests验证输入并授权操作
API Resources将模型转换为 JSON
Middleware身份验证、速率限制、CORS
Routes带分组的版本化端点
Pagination偏移量/游标分页
HTTP Client调用外部 API

关键规则

  1. 始终使用 API Resources - 切勿直接返回 Eloquent 模型
  2. 路由版本控制 - 使用 /v1/、/v2/ 作为前缀
  3. 验证所有输入 - 使用 Form Requests,而非内联验证
  4. 速率限制 - 为每条路由配置限制
  5. 响应保持一致 - 使用相同结构和适当的状态码
  6. 使用服务 - 保持控制器精简
  7. 预加载 - 在分页前使用 with() 防止 N+1 问题

参考指南

核心概念
主题参考文档适用场景
Routingrouting.md定义版本化 API 路由
Controllerscontrollers.md控制器模式、资源方法
Middlewaremiddleware.md路由保护、请求筛选
Validationvalidation.mdForm Requests、验证规则
请求/响应
主题参考文档适用场景
Requestsrequests.md访问输入、文件、标头
Responsesresponses.mdAPI Resources、状态码
Paginationpagination.md偏移量/游标分页
进阶
主题参考文档适用场景
Rate Limitingrate-limiting.md节流配置
HTTP Clienthttp-client.md调用外部 API
URLsurls.mdURL 生成、签名 URL
Stringsstrings.md字符串辅助函数、UUID、slug
Redirectsredirects.md重定向响应

模板(代码示例)
控制器与路由
模板用途
ApiController.php.md包含服务的完整 CRUD 控制器
api-routes.md带中间件的版本化路由
routing-examples.md详细的路由模式
验证与资源
模板用途
FormRequest.php.mdStore/Update Form Requests
validation-rules.md所有验证规则参考
ApiResource.php.md包含关联关系的 Resource
外部 API
模板用途
HttpClientService.php.md可复用的 HTTP 客户端服务

快速参考

资源响应
return PostResource::collection($posts);
return PostResource::make($post);
状态码
return PostResource::make($post)->response()->setStatusCode(201);
return response()->json(null, 204);
表单请求
public function store(StorePostRequest $request): JsonResponse
{
    $post = $this->service->create($request->validated());
    return PostResource::make($post)->response()->setStatusCode(201);
}
速率限制
Route::middleware('throttle:60,1')->group(fn () => ...);
版本化路由
Route::prefix('v1')->group(function () {
    Route::apiResource('posts', PostController::class);
});
分页
return PostResource::collection(Post::paginate(15));

功能矩阵

功能状态参考
RESTful 控制器✅controllers.md
API 资源✅responses.md
表单请求验证✅validation.md
路由版本控制✅routing.md
路由模型绑定✅routing.md
中间件✅middleware.md
速率限制✅rate-limiting.md
分页✅pagination.md
游标分页✅pagination.md
HTTP 客户端✅http-client.md
签名 URL✅urls.md
JSON 响应✅responses.md

Laravel 13 说明

API 资源的属性

Laravel 13 引入了 #[Collects] 和 #[PreserveKeys],用于通过 PHP 属性配置 ResourceCollections。

use Illuminate\Http\Resources\Json\ResourceCollection;
use Illuminate\Http\Resources\Attributes\Collects;
use Illuminate\Http\Resources\Attributes\PreserveKeys;

#[Collects(PostResource::class)]
#[PreserveKeys]
final class PostCollection extends ResourceCollection {}
JSON:API 合规性

对于 JSON:API API(稀疏字段集、包含项、链接),请参阅 [[laravel-jsonapi]],其中介绍了 ?include=、?fields[type]= 和符合规范的分页。

最佳实践

应该
  • 每个公开的 JSON 响应都使用 API 资源(JsonResource)
  • 通过 URL(/api/v1)而非请求头进行版本控制(易读、可缓存)
  • 按用户和 IP 分别限制速率(throttle:60,1 + 自定义限制器)
  • 在编写端点代码前,使用 OpenAPI/Scribe 编写文档
  • 大型列表优先使用 cursor() 分页(稳定、高效)
不应该
  • 直接返回 Eloquent Model(会泄露敏感列)
  • 混淆 HTTP 状态码(验证失败始终返回 422,区分 401 和 403)
  • 跳过表单请求验证(绝不要在控制器中验证)
  • 向外部公开自增 ID(优先使用 UUID/ULID)
  • 忘记为外部 webhook 豁免 PreventRequestForgery

评论

支持 Markdown