Nakon ovog poglavlja
Što ćete znati napraviti
- Vratiti resurs i kolekciju kroz Laravel API Resource.
- Zaštititi first-party SPA ili tokene Sanctumom.
- Dosljedno koristiti statuse, straničenje i rate limiting.
Stabilan javni oblik
Model nije automatski API
API Resource kontrolira koja polja izlaze, kako se zovu i kada se relacija uključuje. Ne vraćamo Eloquent model izravno jer bi nova kolona ili skrivena relacija mogla nenamjerno promijeniti ugovor.
Verziju uvodimo kada postoji stvarna potreba za paralelnim ugovorima. Od početka ipak održavamo dokumentiran format podataka, pogrešaka i straničenja.
<?php
final class ArticleResource extends JsonResource
{
public function toArray(Request $request): array
{
return [
'id' => $this->id,
'title' => $this->title,
'slug' => $this->slug,
'author' => new UserResource($this->whenLoaded('author')),
'published_at' => $this->published_at?->toAtomString(),
];
}
}
Predvidiv odgovor
HTTP status nosi osnovno značenje
Uspješan dohvat vraća 200, stvaranje 201, brisanje bez tijela 204. Nevaljan unos u Laravelu tipično vraća 422, neprijavljen 401, zabranjen 403, nepostojeći 404, a konflikt stanja može biti 409.
Pogreška treba imati stabilan strojni kod, ljudsku poruku i detalje po polju gdje postoje. Stack trace i interni SQL nikada nisu API odgovor u produkciji.
{
"message": "Poslani podaci nisu valjani.",
"code": "VALIDATION_FAILED",
"errors": {
"title": ["Naslov je obavezan."]
}
}
Identitet prema vrsti klijenta
Cookie za vlastiti SPA, token za vanjske klijente
Sanctum first-party SPA autentikaciju provodi kroz Laravelovu session cookie zaštitu i CSRF. Za mobilne ili vanjske klijente izdaje osobne tokene koji se šalju Bearer zaglavljem. Tokenu dajemo samo potrebne abilityje, rok i mogućnost opoziva.
Rate limiter štiti skupe i osjetljive rute. CORS dopušta samo potrebne origin, metode i zaglavlja; nije autentikacija niti zaštita od server-to-server zahtjeva.
<?php
Route::middleware(['auth:sanctum', 'throttle:api'])
->group(function (): void {
Route::apiResource('articles', ArticleApiController::class);
});
Primijenite naučeno
Vježba: Read-only API članaka
Objavite popis i detalj javnih članaka kao JSON API.
- Koristite Resource i straničenje.
- Dohvatite autora eager loadingom.
- Dodajte feature test strukture, 404 odgovora i rate limita.
Za provjeru i nastavak