Fordi tjenester blir distribuert uavhengig, kan du aldri anta at anropere oppgraderer samtidig. API-versjonering pluss bakoverkompatibilitet lar produsenter utvikle seg uten å bryte eksisterende forbrukere.
Fordi tjenester blir distribuert uavhengig, kan du aldri anta at anropere oppgraderer samtidig. API-versjonering pluss bakoverkompatibilitet lar produsenter utvikle seg uten å bryte eksisterende forbrukere.
| Strategi | Eksempel |
|---|
| URI-bane | GET /v2/orders/42 |
| Header | Accept: application/vnd.api.v2+json |
| Skjemaevoluering | legg til felt, fjern/gi aldri nytt navn |
NON-BREAKING (safe):
✓ add a new optional field
✓ add a new endpoint
✓ add a new enum value (if clients tolerate unknowns)
BREAKING (needs a new version):
✗ remove or rename a field
✗ change a type or make a field required
✗ change semantics of an existing field
message Order {
string id = 1;
double total = 2;
string currency = 3; // NEW field 3 — old clients ignore it safely
}
Feltnummere, ikke navn, definerer trådformatet, så det å legge til felt er bakoverkompatibelt.
Release v2 ─▶ run v1 + v2 together ─▶ migrate consumers ─▶ deprecate v1 ─▶ remove v1
Fjern aldri en versjon mens ekte trafikk fortsatt bruker den. Spor bruken før pensjonering.
Uavhengig distribuerbarhet fungerer bare hvis en produsent kan levere en endring uten å koordinere frigivelsen av alle forbrukere.
Design for additiv endring og støtte for gamle versjoner under migrering er det som bevarer denne uavhengigheten i stedet for å tvinge skjøre big-bang oppgraderinger.