agentsclimarketplace

Laravel api

Skill fusengine/agents/plugins/laravel-expert/skills/laravel-api

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.From its SKILL.md

Install
npx -y skills add fusengine/agents --skill laravel-api

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 22 stars22 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

7.0 KB, ~1.5k tokens by cl100k_base, as published. Nobody here has run it

Laravel API Development

Agent Workflow (MANDATORY)

Before ANY implementation, use TeamCreate to spawn 3 agents:

  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 pour API Resources

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 {}

JSON:API compliance

Pour les APIs JSON:API (sparse fieldsets, inclusion, links), voir [[laravel-jsonapi]] qui couvre ?include=, ?fields[type]=, et la pagination conforme spec.

Best Practices

DO

  • Utiliser API Resources (JsonResource) pour toute réponse JSON publique
  • Versionner via URL (/api/v1) plutôt que via header (lisible, cacheable)
  • Rate-limiter par utilisateur ET par IP (throttle:60,1 + custom limiter)
  • Documenter via OpenAPI/Scribe avant de coder l'endpoint
  • Préférer cursor() pagination pour grandes listes (stable, performant)

DON'T

  • Retourner directement un Model Eloquent (fuite de colonnes sensibles)
  • Mélanger statuts HTTP (toujours 422 pour validation, 401 vs 403)
  • Skip Form Request validation (jamais valider en controller)
  • Exposer les IDs auto-increment publiquement (préférer UUID/ULID)
  • Oublier PreventRequestForgery exemption pour les webhooks externes

What ships with it: 19 files

75.3 KB alongside SKILL.md

Keep looking

Skills are one crate of 325,949. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.