Sari la conținut
← Construiește un REST API cu Laravel
Progres curs 0 / 7 lecții (0%)

Ce înseamnă un API bun

Lectură estimată: 4 minute

Estimare pentru text, la un ritm de 180 de cuvinte pe minut. Timpul pentru analizarea codului, exerciții și proiecte se adaugă separat și depinde de ritmul tău.

Problema pe care o vei rezolva: Contract API pentru listare și creare

API demonstrativ: GET /api/services cu paginare; POST /api/services pentru un rol autorizat. Intrări de test: title valid, title gol, sort necunoscut, utilizator fără drepturi.

Rezultatul urmărit

Scrie contractul JSON și erorile înaintea controllerului. Folosește Resources pentru câmpurile publice și verifică efectele în baza de date pentru fiecare cerere.

Cum recunoști o soluție corectă

Listarea nu expune câmpuri private. Sortarea folosește o listă permisă. Cererea invalidă și cea neautorizată nu creează servicii; răspunsul are format consecvent.

Parcurge lecțiile în ordine și păstrează exercițiile în registrul descărcabil. Ultima lecție include atelierul de 40 de minute în care combini conceptele și testezi o variație a situației inițiale. Exemplele comerciale sunt fictive; nu reprezintă rezultate ale unor clienți.

Un API bun e previzibil: cine îl folosește poate ghici cum funcționează un endpoint nou după ce a văzut două. Asta înseamnă convenții consecvente — verbe HTTP, coduri de status, structura răspunsului, denumirea resurselor — respectate peste tot.

Principii REST

  • Resursele sunt substantive la plural: `/articole`, `/comenzi`.
  • Verbele HTTP dau acțiunea: GET (citește), POST (creează), PUT/PATCH (actualizează), DELETE (șterge).
  • `GET /articole` = listă, `GET /articole/1` = unul, `POST /articole` = creează.
  • Fără verbe în URL: nu `/getArticole` sau `/articole/delete/1`.

Coduri de status corecte

  • 200 OK — succes cu corp.
  • 201 Created — resursă creată (POST).
  • 204 No Content — succes fără corp (DELETE).
  • 400 Bad Request — cererea e malformată.
  • 401 / 403 — neautentificat / neautorizat.
  • 404 Not Found — resursa nu există.
  • 422 Unprocessable Entity — validare eșuată.
  • 500 — eroare de server (bug).

Structura răspunsului

// consecvent, mereu:
{
  "data": { ... }          // sau [ ... ] pentru liste
}
// pentru liste paginate:
{
  "data": [ ... ],
  "meta": { "current_page": 1, "total": 137, "per_page": 15 },
  "links": { "next": "...", "prev": null }
}

Versionare

Pune versiunea în URL de la început: `/api/v1/articole`. Chiar dacă nu ai încă v2, structura permite să introduci schimbări incompatibile fără să strici clienții existenți.

Exercițiu

Proiectează pe hârtie API-ul pentru un blog: listează toate endpoint-urile (metodă + cale) pentru articole și comentarii, cu codul de status de succes pentru fiecare. Verifică: doar substantive la plural, verbe HTTP pentru acțiuni.

Greșeli frecvente

  • Verbe în URL (`/createArticol`).
  • Întorci mereu 200, chiar și la erori (clientul nu poate distinge).
  • Structură de răspuns diferită de la un endpoint la altul.
  • Nu versionezi și primul breaking change strică toți clienții.

De reținut

  • Resurse = substantive la plural; acțiune = verb HTTP.
  • Coduri de status corecte: 201, 204, 404, 422, nu doar 200/500.
  • Structură de răspuns consecventă (data / meta / links).
  • Versionează din prima: /api/v1/.

Pe scurt

Un API previzibil respectă convențiile REST peste tot: URL-uri de resurse, verbe HTTP, coduri de status corecte, răspunsuri uniforme.

Contract API stabil pentru client

Un API bun definește resursele, statusurile, erorile și paginarea. Clientul nu trebuie să ghicească dacă o operație a reușit dintr-un mesaj în limba română. Pentru laborator, resursa cerere are id, serviciu și status, iar câmpurile interne nu sunt expuse. Metoda HTTP și răspunsul trebuie să aibă sens consecvent. Autentificarea și autorizarea se verifică pentru fiecare endpoint care cere acces, nu doar la login.

Exemplu de lucru

GET /api/v1/requests → listă paginată
POST /api/v1/requests → 201 + resursa creată
GET /api/v1/requests/42 → 200 sau eroare conform accesului
PATCH /api/v1/requests/42 → schimbare permisă
Exemplu: {"data":{"id":42,"service":"revizie","status":"new"}}

Interpretarea rezultatului

Un răspuns 200 cu textul „nu ai acces” contrazice contractul de status dacă aplicația a stabilit 403 pentru refuz. Păstrează documentația și testele sincronizate. Nu expune adrese sau note interne doar pentru că modelul le serializează implicit.

Exercițiu de consolidare

Definește un răspuns de eroare pentru status invalid și unul pentru resursă inaccesibilă, fără a divulga date suplimentare.

Aplicație practică

Sarcina

Definește contractul unui API de servicii.

Rezolvare orientativă și verificare

Descrie resurse, metode, statusuri, paginare și exemplu de eroare înainte de implementare.

Greșeală de evitat

Un contract stabil este mai util decât endpoint-uri construite ad-hoc.

Documentație și surse

Ți-a plăcut lecția? Continuă cursul complet

Ai citit o lecție gratuită. Celelalte lecții, aplicațiile practice și materialele se deblochează odată cu cursul.

199 lei

Plată unică, acces pe viață la toate cele 7 lecții.

Vezi ce conține cursul →

Folosim cookie-uri esențiale pentru funcționarea site-ului și, cu acordul tău, cookie-uri de analiză și publicitate. Partenerii noștri, inclusiv Google, pot folosi cookie-uri pentru a afișa reclame relevante. Detalii în Politica de cookie-uri.