What Is a Resource?
In Apivalk, a resource is a concrete subclass ofAbstractResource that describes one domain entity:
- its identifier property (e.g.
animal_uuid); - its data properties (name, type, weight, …);
- which properties are excluded from a given mode (e.g. hide
passwordfrom list responses); - the filters and sortings list endpoints expose;
- the OpenAPI tags for grouping.
Why Use Resources?
Without resources, building a full CRUD surface for one entity means authoring ~15 classes: five controllers, five request classes with property documentation, and five response classes. Resources collapse that to one resource class plus five thin controller subclasses. Benefits:- Zero duplicate documentation: identifier, properties, filters, and sortings are declared once.
- Consistent URLs and methods:
Route::resource()picks the correct URL template and HTTP verb per mode. - Built-in validation:
RequestValidationMiddlewarevalidates body, path, filters, and sort fields — all derived from the resource. - Built-in OpenAPI: request and response schemas are emitted for all five modes automatically.
- Shared response envelopes:
ResourceCreated/View/Updated/Deleted/ListResponsewrap thedatakey and pagination envelope for you.
Big Picture
Learn More
Defining a Resource
How to subclass
AbstractResource: identifier, properties, filters, sortings, per-mode exclusions.Resource Controllers
The five CRUD controller bases, how they wire up, and what you override.
Resource Responses
The five pre-built response envelopes and how to attach pagination.