PATCH /listings/{code} sau, dacă lucrezi cu id-urile tale, cu PUT /listings/ref/{ref}. Ambele trimit doar ce s-a schimbat și ambele te feresc să suprascrii o modificare făcută între timp în portal.
JSON Merge Patch
Corpul unuiPATCH urmează regulile JSON Merge Patch (RFC 7386):
- un câmp trimis își înlocuiește valoarea;
- un câmp trimis cu
nullse golește; - un câmp netrimis rămâne cum era.
features, heating_types, orientations) se înlocuiesc în întregime. Ca să adaugi o dotare, trimiți lista completă, cu dotarea nouă inclusă.
După combinare, anunțul rezultat trece prin aceleași reguli ca o editare din formular. Un PATCH nu poate goli un câmp obligatoriu: {"street": null} primește 422 cu required pe /street.
Ce răspuns primești
Corpul răspunsului e anunțul, plus
warnings[] (vezi mai jos). La 202, anunțul din răspuns are încă valorile publice: modificarea ta se vede după aprobare.
Versiunile: ETag și If-Match
Un anunț trimis prin API rămâne editabil și din portal: agentul poate corecta un preț direct pe housera.ro. Ca o sincronizare automată să nu șteargă pe tăcute o astfel de corectură, fiecare anunț are o versiune.
- Când citești anunțul, primești versiunea în antetul
ETagși în câmpuletag. - Când editezi, o trimiți înapoi în antetul
If-Match. - Dacă anunțul s-a schimbat între timp (o editare în portal, o altă cerere), primești
412 Precondition Failedși nu se scrie nimic.
412, citești din nou anunțul (GET /account/listings/{code}), decizi ce versiune câștigă și retrimiți cu noul ETag.
Versiunea se schimbă când se schimbă conținutul anunțului, inclusiv o editare care așteaptă moderarea. Când cineva editează anunțul în portal, primești și webhook-ul listing.edited_in_portal, cu noul etag.
PUT /listings/ref/{ref} se aplică tot ca un patch
Pe un id pe care Housera îl cunoaște deja, PUT /listings/ref/{ref} nu înlocuiește anunțul întreg, ci se comportă ca un PATCH:
- câmpurile pe care le trimiți se actualizează;
- câmpurile pe care nu le trimiți își păstrează valoarea, nu se golesc niciodată;
- un câmp trimis explicit cu
nullse golește; If-Matche respectat la fel, cu412pe o versiune veche.
Corp identic: X-Housera-Unchanged
Dacă trimiți la PUT /listings/ref/{ref} exact același corp ca la ultima scriere reușită, Housera nu scrie nimic și nu trimite nimic la moderare. Primești 200 cu anunțul curent și antetul:
Avertismentele: warnings[]
Orice răspuns reușit la o scriere (POST, PUT, PATCH) conține lista warnings[], cu ce ai trimis și nu a fost luat:
Un avertisment nu blochează scrierea, dar îți spune că maparea ta trimite ceva inutil. Lista câmpurilor și a dotărilor permise pentru fiecare tip și tranzacție e în vocabular.
Conflicte de concurență
Dacă două scrieri ajung în același timp pe același anunț, a doua poate primi409 listing_busy. Nu s-a scris nimic: reîncerci după o secundă sau două.