Probleem
De huidige uploadflow kan een lost update accepteren: twee devices kunnen dezelfde cloudrevision lezen, waarna device A een nieuwe revision uploadt en device B vervolgens vanaf de inmiddels verouderde basis eveneens uploadt. Versienummers en hashes bestaan al, maar zijn nog geen write-precondition.
Doel
Introduceer een compatibele revisionlaag vóórdat strict conditional writes verplicht worden voor alle helpers.
Fase 1 — compatibel protocol
- iedere
save/latest success-response bevat revision (de immutable save-ID) en een sterke ETag header;
- uploads accepteren
If-Match en/of multipart baseRevision;
- een opgegeven basis die niet de actuele logical-save revision is geeft HTTP 412 en retourneert de actuele revision/hash/version;
If-None-Match: * ondersteunt create-only gedrag;
- dezelfde preconditionlogica wordt vóór gewone uploads en projection-/speciale opslagpaden toegepast;
- responsemetadata maakt duidelijk of conditional writes door de server worden ondersteund.
Fase 2 — strict capability
- helpers kunnen via schema/capability aangeven dat zij conditional writes ondersteunen;
- zodra een helper deze capability claimt, ontbrekende precondition op een bestaande logical save geeft HTTP 428;
- legacy helpers blijven tijdelijk compatibel totdat hun protocol is gemigreerd.
Idempotentie
- uploads accepteren een idempotency key;
- retry na een afgebroken response creëert geen extra revision;
- dezelfde key met andere payload/identity wordt geweigerd.
Tests
- twee clients lezen dezelfde basis, eerste write slaagt, tweede krijgt 412;
- juiste
If-Match schrijft exact één nieuwe revision;
If-None-Match:* faalt wanneer de logical save al bestaat;
- idempotente retry retourneert hetzelfde resultaat;
- stale historical payloads kunnen conditional checks niet omzeilen;
- legacy helper zonder capability blijft tijdens migratiefase werken;
- helper met conditional capability zonder precondition krijgt 428.
Probleem
De huidige uploadflow kan een lost update accepteren: twee devices kunnen dezelfde cloudrevision lezen, waarna device A een nieuwe revision uploadt en device B vervolgens vanaf de inmiddels verouderde basis eveneens uploadt. Versienummers en hashes bestaan al, maar zijn nog geen write-precondition.
Doel
Introduceer een compatibele revisionlaag vóórdat strict conditional writes verplicht worden voor alle helpers.
Fase 1 — compatibel protocol
save/latestsuccess-response bevatrevision(de immutable save-ID) en een sterkeETagheader;If-Matchen/of multipartbaseRevision;If-None-Match: *ondersteunt create-only gedrag;Fase 2 — strict capability
Idempotentie
Tests
If-Matchschrijft exact één nieuwe revision;If-None-Match:*faalt wanneer de logical save al bestaat;