What the package does not do, and a few details worth knowing before you run into them by surprise.
Limits
- It registers no routes or controllers. The endpoints, and their authorization, are yours. See Getting started.
- Extensions and profiles. JSON:API 1.1 is negotiated, but extensions and profiles are not implemented: any
extis rejected with415and profiles are ignored. There is nolideither. PUT. It is not validated unlessallow_putis on; the specification only definesPATCHfor updates.includewithout a loaded relationship. Anincludeon a relationship that was not loaded is silently ignored: eager loading is the job ofjsonApiInclude().- Custom paginators. A paginator that implements Laravel's contract but is not Illuminate's
LengthAwarePaginatorclass gets nolinksormeta. - Relationship endpoints. The cardinality rules (an identifier or a list) and the type rules are written by your application. See Relationship endpoints.
- The tests' schema. The official JSON:API schema used in the package tests is the one for version 1.0.
Details worth knowing
Observed in a real application that uses the package:
- The language of a validation
detail. In a validation error, thetitlecomes out in the package's language, but thedetailis the Laravel rule's message, in your application's language. If you do not have the validation texts translated (for examplelang/es/validation.php), it comes out in English even if thetitlecomes out in Spanish. - The
Passwordrule. When a password breaks several rules ofPassword::min(8)->letters()->…, only the first error carries thevalidation.code; the others come out aspassword validation., because those messages do not carry the rule name.failed - Headers. With
strict_set toheaders true, a client that sendsAccept: application/jsoninside the package scope gets a406. If you are migrating an API with existing clients, see Configuration.