API Expand Contract ist ein Pattern zur Weiterentwicklung von APIs. Aber was verbirgt sich hinter der Idee? Wie kann ich damit eine API weiterentwickeln, ohne dass Client und/oder Server im Wartungsaufwand alter Schnittstellen(-Versionen) ersticken?
In der Realität erweist sich Management von APIs und deren Versionen als gar nicht so einfach. Diese Session zeigt mögliche Wege und Alternativen, um der Versionierungshölle zu entkommen und dabei das oberste Gebot beim API-Design - nämlich „Don’t break the Client“ - jederzeit einzuhalten.
2. ÜBER MICH
Arne Limburg – Lead Architect
@ArneLimburg
• APIs
• Microservices
• Domain Driven Design
• Architektur
• Coaching
• Technologie (Java EE / Jakarta EE)
3. OPEN KNOWLEDGE GmbH
Wir realisieren Enterprise-, Web- und Cloud-Anwendungen unter anderem für
Kunden aus den Bereichen Energie, Telekommunikation, Logistik, Industrie,
Versicherungs- sowie Bankwesen.
Strategisch, technologisch und methodisch sind wir kompetenter Partner für die
digitale Transformation von Geschäftsprozessen.
Wir entwickeln digitale Produkte und Services im Mittelstand sowie im Konzern.
Warum Kunden uns schätzen:
„Wir sind neugierig, wie unsere Kunden arbeiten. Uns
treibt an, Auftraggeber erfolgreicher und handlungsfähiger
zu machen.”
Softwarearchitektur &
- entwicklung
Strategie- &
Technologieberatung
Digitale Produkte &
Automatisierung
30. Tolerant Reader Pattern
Tolerant gegenüber unbekannten Feldern
Umgang mit x-extensible-enum
http://zalando.github.io/restful-api-guidelines
Tolerant gegenüber unbekannten Statuscodes
HTTP Status 301 folgen
31. OK, so soll sich
der Client verhalten.
Aber was ist mit dem Server?
32. Photo by Irene Fertik, USC News Service. Copyright 1994, USC.
„Be conservative in what you do,
Be liberal in what you accept
from others“
RFC 793, Robustness Principal (John Postel)
33. Es darf nichts entfernt werden
Keine Veränderung von Verarbeitungsregel
Optionales darf nie Required werden
http://zalando.github.io/restful-api-guidelines
Alles was hinzugefügt wird, muss optional sein
61. PIPELINE TO DEPLOY TO STAGE
Execute
Own
Provider
Tests
Generate
Consumer
Contract
Execute
Depending
Provider
Tests
Deploy
to
Stage
62. PIPELINE TO DEPLOY TO STAGE
Execute
Own
Provider
Tests
Generate
Consumer
Contract
Execute
Depending
Provider
Tests
Deploy
to
Stage
Achtung:
Abwärtskompatibilität ist
trotzdem notwendig!
63. BREAKING CHANGE VOM PROVIDER
Execute
Own
Provider
Tests
Generate
Consumer
Contract
Execute
Depending
Provider
Tests
Deploy
to
Stage
64. BREAKING CHANGE VOM CONSUMER
Execute
Own
Provider
Tests
Generate
Consumer
Contract
Execute
Depending
Provider
Tests
Deploy
to
Stage
68. ERMITTELN DER VERSION
Über URL-Pfad
/v2/addresses
Über Query-Parameter
/addresses?version=2
Über Version-Header
X-Api-Version: v2
Über Version-Attribut am Media-Type
application/xml;version=v2
Über Media-Type
application/vnd.de.openknowledge.v2+json
77. A N S P R E C H P A R T N E R
Kaiserliche Post, Poststraße 1, 26122 Oldenburg
www.openknowledge.de
OPENKNOWLEDGE
GmbH
Arne Limburg
Lead Architect
+49 151 108 22 942
arne.limburg@openknowledge.de
@ArneLimburg