Fordi tjenester implementeres uafhængigt, kan du aldrig antage, at opkaldere opgraderer i lockstep. API-versionering plus bagud-kompatibilitet gør det muligt for producenter at udvikle sig uden at bryde eksisterende forbrugere.
Fordi tjenester implementeres uafhængigt, kan du aldrig antage, at opkaldere opgraderer i lockstep. API-versionering plus bagud-kompatibilitet gør det muligt for producenter at udvikle sig uden at bryde eksisterende forbrugere.
| Strategi | Eksempel |
|---|
| URI-sti | GET /v2/orders/42 |
| Overskrift | Accept: application/vnd.api.v2+json |
| Skemaevolution | tilføj felter, fjern/omdøb aldrig |
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
}
Feltnumre, ikke navne, definerer wireformatet, så tilføjelse af felter er bagud-kompatibel.
Release v2 ─▶ run v1 + v2 together ─▶ migrate consumers ─▶ deprecate v1 ─▶ remove v1
Fjern aldrig en version, mens der stadig er rigtig trafik, der bruger den. Spor brugen før pensionering.
Uafhængig implementerbarhed fungerer kun, hvis en producent kan sende en ændring uden at koordinere hver forbrugers udgivelse.
Design til additive ændringer og understøttelse af gamle versioner under migration er det, der bevarer denne uafhængighed i stedet for at tvinge skrøbelige big-bang-opgraderinger.