Revizije
JSON:API modul izlaže revizije entiteta kao verzije resursa, na način inspirisan RFC5829: Link Relation Types for Simple Version Navigation between Web Resources.
Trenutna ograničenja:
- Verzije resursa (revizije entiteta) mogu se samo čitati. I samo za tipove entiteta
Node
iMedia
(node--*
imedia--*
tipove resursa) JSON:API može učiniti verzije resursa dostupnim (zbog odsustva formalnog API-ja za kontrolu pristupa revizijama u jezgru Drupala; kada to bude dostupno, biće omogućeno za sve entitete koji podržavaju revizije, vidi #3031271: Support version negotiation for any entity type (currently only Node & Media are supported)). - Međutim, verzije resursa se automatski kreiraju kada izvršite
PATCH
nad resursom tipa (tip entiteta + bundle) koji je konfigurisan da automatski kreira nove verzije (revizije). Radi se na tome da se omogućiPATCH
zahtevima za verzionisane resurse da specificiraju da li treba kreirati novu reviziju ili ne, vidi #2993557: Allow optional creation of new revision when PATCHing revisionable entities to support autosave functionality via JSON:API..
Podrška za revizije nije zvanični deo JSON:API specifikacije. Međutim, nekoliko "profila" je u razvoju (takođe nisu deo specifikacije, ali su već prihvaćeni u JSON:API v1.1) da standardizuju neka prilagođena ponašanja koja je JSON:API modul razvio (sva su i dalje u skladu sa specifikacijom).
Na ovaj način, JSON:API modul treba da bude maksimalno kompatibilan sa drugim sistemima i da minimizuje "drupalisme" koje bi developer koji radi sa JSON:API implementacijom morao da zna.
"Verzija" u JSON:API modulu je svaka revizija koja je prethodno bila ili je trenutno podrazumevana revizija (default revision). Nisu sve revizije smatrane "verzijama". Revizije koje nisu označene kao "default" su "radne kopije" (working copies), pošto obično nisu javno dostupne i predstavljaju verzije na kojima se trenutno radi.
Kada je instaliran Content Moderation modul, moguće je da najnovija podrazumevana revizija *nije* poslednja revizija.
Zahtev za određenu verziju resursa se pravi preko query parametra u URL-u. Ima sledeći oblik:
version-identifier
__|__
/ \
?resourceVersion=foo:bar
\_/ \_/
| |
version-negotiator |
version-argument
Identifikator verzije je string sa dovoljno informacija da se učita određena revizija. Komponenta "version negotiator" određuje mehanizam pregovaranja za učitavanje revizije. Trenutno, ovo može biti id
ili rel
. id
koristi kao argument željeni ID revizije. rel
koristi kao argument string latest-version
ili working-copy
.
U budućnosti mogu biti razvijeni i drugi "negotiators", na primer, zasnovani na vremenskoj oznaci ili radnom prostoru.
Da ilustrujemo kako se zahteva određena revizija entiteta: zamislite node koji ima "Published" reviziju i kasniju "Draft" reviziju.
Pomoću JSON:API, "Published" node možete dobiti zahtevom /jsonapi/node/page/{{uuid}}?resourceVersion=rel:latest-version
.
Da biste pregledali entitet koji je još uvek u radu ("Draft" revizija), koristite /jsonapi/node/page/{{uuid}}?resourceVersion=rel:working-copy
.
Da biste tražili određeni ID revizije, pošaljite zahtev na /jsonapi/node/page/{{uuid}}?resourceVersion=id:{{revision_id}}
.
Još uvek nije moguće zahtevati kolekciju revizija. Ovo je u razvoju, vidi #3009588: Provide a collection resource where a version history can be obtained (`version-history`, `predecessor-version` and `successor-version` link relations).
Članak sa Drupal dokumentacije.