From fuse-laravel
Build RESTful APIs with Laravel using API Resources, Sanctum authentication, rate limiting, and versioning. Use when creating API endpoints, transforming responses, or handling API authentication.
How this skill is triggered — by the user, by Claude, or both
Slash command
/fuse-laravel:laravel-apiThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Before ANY implementation, use `TeamCreate` to spawn 3 agents:
references/controllers.mdreferences/http-client.mdreferences/middleware.mdreferences/pagination.mdreferences/rate-limiting.mdreferences/redirects.mdreferences/requests.mdreferences/responses.mdreferences/routing.mdreferences/strings.mdreferences/templates/ApiController.php.mdreferences/templates/ApiResource.php.mdreferences/templates/FormRequest.php.mdreferences/templates/HttpClientService.php.mdreferences/templates/api-routes.mdreferences/templates/routing-examples.mdreferences/templates/validation-rules.mdreferences/urls.mdreferences/validation.mdBefore ANY implementation, use TeamCreate to spawn 3 agents:
After implementation, run fuse-ai-pilot:sniper for validation.
Build RESTful APIs with Laravel using API Resources for response transformation and Sanctum for authentication.
| Component | Purpose |
|---|---|
| Controllers | Handle requests, delegate to services |
| Form Requests | Validate input, authorize actions |
| API Resources | Transform models to JSON |
| Middleware | Auth, rate limiting, CORS |
| Routes | Versioned endpoints with groups |
| Pagination | Offset/cursor pagination |
| HTTP Client | Consume external APIs |
/v1/, /v2/with() before pagination| Topic | Reference | When to consult |
|---|---|---|
| Routing | routing.md | Defining versioned API routes |
| Controllers | controllers.md | Controller patterns, resource methods |
| Middleware | middleware.md | Route protection, request filtering |
| Validation | validation.md | Form Requests, validation rules |
| Topic | Reference | When to consult |
|---|---|---|
| Requests | requests.md | Accessing input, files, headers |
| Responses | responses.md | API Resources, status codes |
| Pagination | pagination.md | Offset/cursor pagination |
| Topic | Reference | When to consult |
|---|---|---|
| Rate Limiting | rate-limiting.md | Throttle configuration |
| HTTP Client | http-client.md | Consuming external APIs |
| URLs | urls.md | URL generation, signed URLs |
| Strings | strings.md | String helpers, UUIDs, slugs |
| Redirects | redirects.md | Redirect responses |
| Template | Purpose |
|---|---|
| ApiController.php.md | Complete CRUD controller with service |
| api-routes.md | Versioned routes with middleware |
| routing-examples.md | Detailed routing patterns |
| Template | Purpose |
|---|---|
| FormRequest.php.md | Store/Update Form Requests |
| validation-rules.md | All validation rules reference |
| ApiResource.php.md | Resource with relationships |
| Template | Purpose |
|---|---|
| HttpClientService.php.md | Reusable HTTP client service |
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));
| Feature | Status | Reference |
|---|---|---|
| RESTful Controllers | ✅ | controllers.md |
| API Resources | ✅ | responses.md |
| Form Request Validation | ✅ | validation.md |
| Route Versioning | ✅ | routing.md |
| Route Model Binding | ✅ | routing.md |
| Middleware | ✅ | middleware.md |
| Rate Limiting | ✅ | rate-limiting.md |
| Pagination | ✅ | pagination.md |
| Cursor Pagination | ✅ | pagination.md |
| HTTP Client | ✅ | http-client.md |
| Signed URLs | ✅ | urls.md |
| JSON Responses | ✅ | responses.md |
Laravel 13 introduit #[Collects] et #[PreserveKeys] pour configurer les ResourceCollections via attributs PHP.
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 {}
Pour les APIs JSON:API (sparse fieldsets, inclusion, links), voir [[laravel-jsonapi]] qui couvre ?include=, ?fields[type]=, et la pagination conforme spec.
JsonResource) pour toute réponse JSON publique/api/v1) plutôt que via header (lisible, cacheable)throttle:60,1 + custom limiter)cursor() pagination pour grandes listes (stable, performant)PreventRequestForgery exemption pour les webhooks externesnpx claudepluginhub fusengine/agents --plugin fuse-laravelBuilds production-grade Laravel REST APIs using essa/api-tool-kit patterns (ApiResponse, QueryFilters, dynamicPaginate, EnumHelpers) and best practices for code quality, auth, testing, database.
Laravel architecture patterns, routing/controllers, Eloquent ORM, service layers, queues, events, caching, and API resources for production apps.
Provides patterns for Laravel API Resources covering transformation, conditional attributes, nested relationships, collections, and pagination links. Use for standardizing JSON API responses.