plugins/laravel-expert/skills/laravel-api/SKILL.md
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.
npx skillsauth add fusengine/agents laravel-apiInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Before 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 externesdevelopment
Use when optimizing entity-based / semantic SEO 2026. Covers entity maps, Google Knowledge Graph resolution, salience scoring, passage-level ranking, about/sameAs/knowsAbout schema, Cloud Natural Language API validation.
development
Use when running SEO, GEO, schema, Core Web Vitals, sitemap, hreflang, E-E-A-T, AI Overviews, technical SEO, or structured data tasks. Covers full-site audits, single-page analysis, schema markup, content quality, AI search optimization, local SEO, sitemap/robots, internal linking, semantic clustering, and search experience.
development
Use when optimizing search experience (SXO). Covers intent matching, user personas, user stories, page-type analysis, dwell time, scroll depth, pogo-sticking prevention.
development
Use when optimizing local SEO. Covers Google Business Profile, NAP consistency, citations, reviews acquisition, Local Pack ranking, location pages, LocalBusiness schema.