2.1 KiB
2.1 KiB
API Versionierung und Deprecation Policy
Ziel
Diese Policy definiert eine reproduzierbare Versionierungsstrategie fuer helpyourneighbour, damit API-Clients stabil bleiben und Breaking Changes planbar sind.
Versionierungsmodell
- Basispfad-Versionierung:
/v1/...,/v2/... - Aktueller Stand dieses Repos ist funktional
v1. - Fuer die laufende Migration gilt: bestehende Routen ohne Prefix bleiben bis zur vollstaendigen Umstellung als Legacy-Compat aktiv.
Semantik
- Minor Change (non-breaking): neue optionale Felder, neue Endpunkte, neue optionale Query-Parameter.
- Major Change (breaking): Umbenennung/Entfernung von Feldern, strictere Validierung mit API-Break, geaenderte Fehlersemantik.
- Non-breaking Aenderungen bleiben innerhalb derselben Major API (
v1). - Breaking Aenderungen erzeugen eine neue Major API (
v2).
Deprecation-Regeln
Bei geplanter Entfernung eines Endpunkts/Felds:
- Markierung als
deprecated: truein OpenAPI. - Deprecation-Hinweis in Response-Headern:
Deprecation: trueSunset: <RFC-1123 Datum>- optional
Link: <migrations-url>; rel=\"deprecation\"
- Changelog-Eintrag und Migrationshinweise im Repo (
docs/). - Mindestfrist bis Removal: 90 Tage.
Kompatibilitaetsgarantien
- JSON-Felder werden nicht ohne neue Major API entfernt.
- Typen werden nicht stillschweigend geaendert.
- Neue Pflichtfelder werden nicht in bestehende Request-Bodies von
v1eingefuehrt.
Fehlerverhalten
- Fehlerobjekte folgen stabil dem Muster
{ "error": ... }. - Neue Fehlercodes werden additive eingefuehrt.
- Bereits genutzte HTTP-Statuscodes bleiben stabil, ausser bei neuer Major API.
Rollout-Prozess fuer Breaking Changes
- ADR erstellen (Design + Impact).
v2Endpunkt parallel einfuehren.v1als deprecated markieren (Header + OpenAPI).- 90-Tage-Frist einhalten.
- Nach Frist
v1entfernen.
Definition of Done fuer API-Aenderungen
- OpenAPI aktualisiert (
/openapi.yamlunddocs/openapi.yaml). - Changelog/Migrationshinweis vorhanden.
- Contract-Tests fuer geaenderte Endpunkte aktualisiert.
- Breaking vs non-breaking explizit im PR beschrieben.