Welche Möglichkeiten gibt es?
Zu beachtende Punkte
- Rückwärtskompatibität beachten
- Major Versionen vermeiden
-
Vorwärtsrkompatibilität berücksichtigen
- siehe dazu hier
3 Wege, es falsch zu machen
- Version in der URL lassen:
/api/v1/...
- Version im MediaType des Accept Header übertragen:
application/vnd.myname.v1+json
oderapplication/vnd.myname+json; version=2
- Custom Request Header verwenden:
api-version: 2
URL
(+) durch Nutzung von HATEOAS wird der Client automatisch auf die neue Version geleitet
(-) URL wird länger
(-) wenn eine Änderung an einer Resource passiert, muss die gesamte API auf die neue Version gesetzt werden: /api/v2/.. (auch die Resourcen, die sich nicht geändert haben
(-) Cache muss mehrere Versionen der gleichen Resource haben
(-) Cache Invalidierung funktioniert nicht mehr über mehrere Versionen
(-) Clientcaching ist einfacher, da Caching mit URL als Key einfacher ist, als MediaType als Key\
Accept Header
(+) nur die Resourcen, die sich geändert haben, müssen in beiden Versionen vorhanden sein
(-) für das Caching muss ein Vary HTTP Header verwendet werden: siehe auch hier
Request Header
(-) die Resource ist jetzt nicht nur durch eine URL, sondern eine Kombination von URL + Header definiert
(+) URL der Resource ändert sich nicht