Treci la conținutul principal

Spune ce vrei să spui

Un API REST comunică prin două vocabulare. Metoda spune ce vrea clientul: GET citește, POST creează, PUT înlocuiește, PATCH modifică o parte, DELETE șterge. Codul de stare spune cum a decurs: 2xx succes, 4xx greșeala clientului, 5xx greșeala serverului.

Un detaliu bun de știut: PUT este idempotent — dacă îl trimiți de două ori, rezultatul final este același ca după o singură dată. POST nu este: două cereri POST creează două resurse.


Metoda potrivită

Clasa handler direcționează după verb în locul tău: serverul apelează do_GET pentru un GET, do_POST pentru un POST, do_DELETE pentru un DELETE — câte o metodă pentru fiecare verb. Crearea răspunde cu 201 Created și indică noua resursă printr-un antet Location; ștergerea răspunde cu 204 No Content — succes, fără nimic de spus.

GET, POST și DELETE pe o singură resursă

Trei verbe, trei răspunsuri: lista vine înapoi cu 200, crearea cu 201 și un antet Location, iar ștergerea cu 204 și un corp gol.

Prompt
Scrie un program Python cu un handler pentru notițe care răspunde la GET /notes cu 200 și o linie cu lista, la POST /notes cu 201 și un antet Location, iar la DELETE /notes/3 cu 204 și un corp gol. Pornește serverul pe un port liber, trimite cele trei cereri și afișează pentru fiecare metoda, codul de stare și, dacă există, antetul Location sau corpul.
Ieșire: program Python complet

Codul de stare potrivit

Și erorile merită precizie: o resursă care lipsește înseamnă 404 Not Found (cu un corp JSON de eroare, ca să-l poată citi programele), iar un verb greșit pe o rută doar pentru citire înseamnă 405 Method Not Allowed — aici trimis de o metodă do_DELETE foarte scurtă. (Dacă omiți complet această metodă, http.server răspunde singur cu 501 Unsupported method — să scrii tu răspunsul 405 este varianta REST mai precisă.)

Pe partea de client, urllib ridică HTTPError pentru fiecare răspuns 4xx și 5xx, în loc să-l returneze în liniște — obiectul de eroare conține totuși codul de stare și corpul.

200, 404 și 405

Notița existentă returnează 200 cu date, cea care lipsește returnează 404 cu o eroare JSON, iar cererea DELETE este refuzată cu 405. Clientul prinde HTTPError și citește din el corpurile de eroare.

Prompt
Scrie un program Python cu un handler pentru GET /notes/{id} care răspunde cu 200 și JSON pentru o notiță existentă, cu 404 și un corp JSON de eroare pentru una care lipsește, și cu 405 pentru orice DELETE. Pornește serverul pe un port liber, trimite cele trei cereri cu urllib, prinzând HTTPError pentru a citi corpurile de eroare, și afișează toate cele trei rezultate.
Ieșire: program Python complet