mcpField
L
laravel-api

laravel-api

github.com/fusengineDevelopment3577 installsUpdated 1w ago
Repository

About laravel-api

laravel-api is a skill for building RESTful APIs with Laravel, aimed at developers implementing and maintaining API endpoints. It combines guidance and templates for validation, response resources, authentication, pagination, and related API patterns.

Key features

  1. 01API Resources for JSON responses
  2. 02Sanctum authentication guidance
  3. 03Form Request validation
  4. 04Versioned routes and rate limiting
  5. 05Offset and cursor pagination
  6. 06HTTP client for external APIs

Use cases

  1. 01Designing versioned REST endpoints
  2. 02Validating and authorizing requests
  3. 03Formatting paginated API responses
  4. 04Calling external APIs from Laravel

Install

Copy the command and run it in a terminal.

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

After installing, type/laravel-apiin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with 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

Details

From the project README
Covers building RESTful APIs with Laravel: API Resources for response transformation, Sanctum authentication, rate limiting, route versioning, Form Request validation, pagination (offset/cursor), and consuming external APIs via the HTTP client. For JSON:API-spec-compliant endpoints (sparse fieldsets, inclusion, links), see laravel-jsonapi instead.

Laravel API Development

Agent Workflow (MANDATORY)

Before ANY implementation, spawn 3 agents in parallel, one Agent call each with a name:

  1. fuse-ai-pilot:explore-codebase - Analyze existing API patterns
  2. fuse-ai-pilot:research-expert - Verify Laravel API docs via Context7
  3. mcp__context7__query-docs - Check API Resources and Sanctum patterns

After implementation, run fuse-ai-pilot:sniper for validation.


Overview

Build RESTful APIs with Laravel using API Resources for response transformation and Sanctum for authentication.

ComponentPurpose
ControllersHandle requests, delegate to services
Form RequestsValidate input, authorize actions
API ResourcesTransform models to JSON
MiddlewareAuth, rate limiting, CORS
RoutesVersioned endpoints with groups
PaginationOffset/cursor pagination
HTTP ClientConsume external APIs

Critical Rules

  1. Always use API Resources - Never return Eloquent models directly
  2. Versioned routes - Prefix with /v1/, /v2/
  3. Validate all input - Use Form Requests, not inline validation
  4. Rate limiting - Configure per-route limits
  5. Consistent responses - Same structure, proper status codes
  6. Use services - Keep controllers thin
  7. Eager load - Prevent N+1 with with() before pagination

Reference Guide

Core Concepts
TopicReferenceWhen to consult
Routingrouting.mdDefining versioned API routes
Controllerscontrollers.mdController patterns, resource methods
Middlewaremiddleware.mdRoute protection, request filtering
Validationvalidation.mdForm Requests, validation rules
Request/Response
TopicReferenceWhen to consult
Requestsrequests.mdAccessing input, files, headers
Responsesresponses.mdAPI Resources, status codes
Paginationpagination.mdOffset/cursor pagination
Advanced
TopicReferenceWhen to consult
Rate Limitingrate-limiting.mdThrottle configuration
HTTP Clienthttp-client.mdConsuming external APIs
URLsurls.mdURL generation, signed URLs
Stringsstrings.mdString helpers, UUIDs, slugs
Redirectsredirects.mdRedirect responses

Templates (Code Examples)
Controllers & Routes
TemplatePurpose
ApiController.php.mdComplete CRUD controller with service
api-routes.mdVersioned routes with middleware
routing-examples.mdDetailed routing patterns
Validation & Resources
TemplatePurpose
FormRequest.php.mdStore/Update Form Requests
validation-rules.mdAll validation rules reference
ApiResource.php.mdResource with relationships
External APIs
TemplatePurpose
HttpClientService.php.mdReusable HTTP client service

Quick Reference

Resource Response
return PostResource::collection($posts);
return PostResource::make($post);
Status Codes
return PostResource::make($post)->response()->setStatusCode(201);
return response()->json(null, 204);
Form Request
public function store(StorePostRequest $request): JsonResponse
{
    $post = $this->service->create($request->validated());
    return PostResource::make($post)->response()->setStatusCode(201);
}
Rate Limiting
Route::middleware('throttle:60,1')->group(fn () => ...);
Versioned Routes
Route::prefix('v1')->group(function () {
    Route::apiResource('posts', PostController::class);
});
Pagination
return PostResource::collection(Post::paginate(15));

Feature Matrix

FeatureStatusReference
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 Notes

Attributes for API Resources

Laravel 13 introduces #[Collects] and #[PreserveKeys] to configure ResourceCollections via PHP attributes.

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 compliance

For JSON:API APIs (sparse fieldsets, includes, links), see [[laravel-jsonapi]], which covers ?include=, ?fields[type]=, and spec-compliant pagination.

Best Practices

DO
  • Use API Resources (JsonResource) for every public JSON response
  • Version via URL (/api/v1) rather than via header (readable, cacheable)
  • Rate-limit per user AND per IP (throttle:60,1 + custom limiter)
  • Document via OpenAPI/Scribe before coding the endpoint
  • Prefer cursor() pagination for large lists (stable, performant)
DON'T
  • Return an Eloquent Model directly (leaks sensitive columns)
  • Mix up HTTP statuses (always 422 for validation, 401 vs 403)
  • Skip Form Request validation (never validate in the controller)
  • Expose auto-increment IDs publicly (prefer UUID/ULID)
  • Forget the PreventRequestForgery exemption for external webhooks

Comments

Markdown supported