you BUILD it
OPEN THANX
you RUN it
you IMRPOVE it API-Design,
Microarchitecture & Testing
Arne Limburg | @ArneLimburg
Software als SERVICE
Software als SERVICE
you BUILD it
API First um von vornherein
die Sicht des API-Konsumenten einzunehmen
Consumer Interaction durch kontinuierlichen
Austausch mit den API-Konsumenten
Rapid Delivery durch eine
klare und einfache Architektur
Continuous Evolution durch Vertrauen
In die eigene Test-Suite und hohe Testabdec
Software als SERVICE
API FIRST
Master Keyfact Subthema EINS, welches
ganz toll ist.
Master Keyfact Subthema ZWEI, welches
auch ganz toll ist.
API Experience ist die UX der Entwickler
... am Beispiel
Consumer-Centric
API Design
Know the goal of your API
#WISSENTEILEN
„It‘s all about the Money“
Expedia generiert $2 Milliarden jährlich
durch seine Affiliate Networks APIs.
$7 Milliarden der eBay Transaktionen
werden via APIs realisiert.
#WISSENTEILEN
Mobile Initiativen
$139 Milliarden Prognose des Umsatzes
mit Mobile Apps in 2021
Zusatzbenefit: Mobile User stellen freiwillig
persönliche Daten via Apps zur Verfügung!
#WISSENTEILEN
B2B / Partner Connectivity
Bereits 2020 wird 40 % des Umsatzes
der IT Industrie und 98 % des Wachstums
durch Dritte getrieben werden.
(Quelle: Annahme der International Data Cooperation [IDC])
#WISSENTEILEN
Interner Datenzugriff
Verbesserte Kollaboration und Kommunikation
kann die Produktivität
um 20 - 25 % erhöhen
(Quelle: McKinsey)
Know your Audience
#WISSENTEILEN
API
Service
Frontend
Mobile
Frontend
B2B
Client
Same Company
Public Client
Software als SERVICE
Master Keyfact Subthema EINS, welches
ganz toll ist.
Master Keyfact Subthema ZWEI, welches
auch ganz toll ist.
In einem service-orientieren System
muss jederzeit automatisiert sichergestellt sei
dass unterschiedliche Versionen
zusammenpassen.
... am Beispiel
Consumer-Driven
Contracts
CONSUMER INTERACTION
WELCHE CLIENTS NUTZEN MICH?
#WISSENTEILEN
API (PROVIDER CONTRACT)
#WISSENTEILEN
CONSUMER CONTRACT
#WISSENTEILEN
CONSUMER CONTRACT – YAGNI
#WISSENTEILEN
CONSUMER-DRIVEN CONTRACT TEST
Consumer
Contract
Consumer Provider
Consumer
Tests
Provider
Tests
#WISSENTEILEN
PIPELINE TO DEPLOY TO STAGE
Execute
Own
Provider
Tests
Generate
Consumer
Contract
Execute
Depending
Provider
Tests
Deploy
to
Stage
#WISSENTEILEN
BREAKING CHANGE VOM PROVIDER
Execute
Own
Provider
Tests
Generate
Consumer
Contract
Execute
Depending
Provider
Tests
Deploy
to
Stage
#WISSENTEILEN
BREAKING CHANGE VOM PROVIDER
Execute
Own
Provider
Tests
Generate
Consumer
Contract
Execute
Depending
Provider
Tests
Deploy
to
Stage
#WISSENTEILEN
Achtung:
Abwärtskompatibilität ist
trotzdem notwendig!
BREAKING CHANGE VOM CONSUMER
Execute
Own
Provider
Tests
Generate
Consumer
Contract
Execute
Depending
Provider
Tests
Deploy
to
Stage
#WISSENTEILEN
Tolerant Reader Pattern
Tolerant gegenüber unbekannten Feldern
Umgang mit x-extensible-enum
http://zalando.github.io/restful-api-guidelines
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
OK, so soll sich
der Client verhalten.
Aber was ist mit dem Server?
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)
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
Software als SERVICE
Master Keyfact Subthema EINS, welches
ganz toll ist.
Master Keyfact Subthema ZWEI, welches
auch ganz toll ist.
Die Microarchitektur muss genau so viel
Struktur bieten, dass Services schnell entwick
aber dennoch langfristig gut gewartet werd
können.
... am Beispiel
LEAN ARCHITECTURE
RAPID
DELIVERY
KLASSISCHE ARCHITEKTUR
#WISSENTEILEN
Infrastructure
Domain
API
OFFENE ARCHITEKTUR
#WISSENTEILEN
Infrastructure
Domain
API
BIDIREKTIONALE ZUGRIFFE
#WISSENTEILEN
Infrastructure
Domain
API
REST-
Client
Client-
Interface
HEXAGONALE ARCHITEKTUR
#WISSENTEILEN
Domain
Application
BIDIREKTIONALE ZUGRIFFE
#WISSENTEILEN
Infrastructure
Domain
API
REST-
Client
Client-
Interface
BIDIREKTIONALE ZUGRIFFE
#WISSENTEILEN
Infrastructure
Domain
API
REST-
Client
Client-
Interface
Software als SERVICE
Master Keyfact Subthema EINS, welches
ganz toll ist.
Master Keyfact Subthema ZWEI, welches
auch ganz toll ist.
Hohe Testabdeckung, sinnvolle Tests und
Vertrauen in die eigene Test-Suite bilden
die Basis für Contiunous and Fast Delivery.
... am Beispiel
TESTING
CONTINUOUS
EVOLUTION
TEST-PYRAMIDE
Integration-
Tests
Unit-Tests
Inte-
grated
Tests
#WISSENTEILEN
Live
Coding
#WISSENTEILEN
TEST-DRIVEN DEVELOPMENT
Code
Refactor
Test
#WISSENTEILEN
TDD, MOCKS UND REFACTORING
Code
Refactor
Test
CLASSICAL VS. LONDON
SCHOOL
#WISSENTEILEN
CLASSICAL VS. LONDON
SCHOOL
#WISSENTEILEN
CLASSICAL VS. LONDON
SCHOOL
#WISSENTEILEN
CLASSICAL VS. LONDON
SCHOOL
#WISSENTEILEN
UNIT TESTING
Vladimir Khorikov
Manning 2020
#WISSENTEILEN
QUALITÄTSMERKMALE
Schutz gegen Regression
• Software-Fehler entdecken
• möglichst viel Code
abdecken
Unmittelbares Feedback
• kurze Ausführungsdauer
Unempfindlichkeit gegen
Refactoring
• beobachtbares Verhalten
testen
Wartbarkeit
• Verständlichkeit
• einfache Ausführbarkeit
#WISSENTEILEN
Unempfindlichkeit
gegen
Refactoring
Unmittelbares
Feedback
Schutz
Gegen
Regression
End-to-End-Tests
• große Testabdeckung
• gegen API programmiert
• lange Ausführungsdauer
Triviale Tests
• Testet einfachen
Code, z.B. Getter,
Setter
• wird nicht brechen
• schnell
• findet keine Bugs
Zerbrechliche Tests
• Schnell
• Viele False-Positives
• Bricht sofort bei Prod-
Code-Änderung
max Wartbarkeit
Unempfindlichkeit
gegen Refactoring
Unmittelbares
Feedback
Schutz gegen
Regression
Integrationstest Unit-Test
End-to-End-Test
PRIORISIERUNG
Komplexität,
Relevanz für Geschäftslogik
Anzahl der Abhängigkeiten
WELCHEN CODE WIE TESTEN?
Domain-Modell,
Algorithmen
Applikationsschicht,
Controllers
Komplexität,
Relevanz für Geschäftslogik
Anzahl der Abhängigkeiten
WELCHEN CODE WIE TESTEN?
Domain-Modell,
Algorithmen
Applikationsschicht,
Controllers
Komplexität,
Relevanz für Geschäftslogik
Anzahl der Abhängigkeiten
Unit-Tests
Integrations-
Tests
WELCHEN CODE WIE TESTEN?
Domain-Modell,
Algorithmen
trivialer
Code
Applikationsschicht,
Controllers
Komplexität,
Relevanz für Geschäftslogik
Anzahl der Abhängigkeiten
WELCHEN CODE WIE TESTEN?
Domain-Modell,
Algorithmen
zu
komplizerter
Code
trivialer
Code
Applikationsschicht,
Controllers
Komplexität,
Relevanz für Geschäftslogik
Anzahl der Abhängigkeiten
WELCHEN CODE WIE TESTEN?
Domain-Modell,
Algorithmen
zu
komplizerter
Code
trivialer
Code
Applikationsschicht,
Controllers
Komplexität,
Relevanz für Geschäftslogik
Anzahl der Abhängigkeiten
REFACTORING
Unempfindlichkeit
gegen
Refactoring
Unmittelbares
Feedback
Schutz
Gegen
Regression
End-to-End-Tests
• große Testabdeckung
• gegen API programmiert
• lange Ausführungsdauer
Triviale Tests
• Testet einfachen
Code, z.B. Getter,
Setter
• wird nicht brechen
• schnell
• findet keine Bugs
Zerbrechliche Tests
• Schnell
• Viele False-Positives
• Bricht sofort bei Prod-
Code-Änderung
TRANSAKTIONALEN USE CASE
OHNE TRANSAKTION TESTEN?
#WISSENTEILEN
Domain-Modell,
Algorithmen
Applikationsschicht,
Controllers
Komplexität,
Relevanz für Geschäftslogik
Anzahl der Abhängigkeiten
Unit-Tests
Integrations-
Tests
WELCHEN CODE WIE TESTEN?
TEST-PYRAMIDE
Integration-
Tests
Unit-Tests
Inte-
grated
Tests
#WISSENTEILEN
TEST-HONEYCOMB
Integrated
Tests
Unit-
Tests
Integration-
Tests
#WISSENTEILEN
QUALITÄTSMERKMALE
Schutz gegen Regression
• Software-Fehler entdecken
• möglichst viel Code
abdecken
Unmittelbares Feedback
• kurze Ausführungsdauer
Unempfindlichkeit gegen
Refactoring
• beobachtbares Verhalten
testen
Wartbarkeit
• Verständlichkeit
• einfache Ausführbarkeit
#WISSENTEILEN
INTEGRATION TEST
PERFORMANCE
Externe Systeme mocken
Server nur einmal pro Test-Suite starten
Infrastruktur (DB, Messaging) nur einmal starten
Datenbankänderungen nach jedem Test zurückrollen
Software als SERVICE
you build it - FAZIT
API First um von vornherein
die Sicht des API-Konsumenten einzunehmen
Consumer Interaction durch kontinuierlichen
Austausch mit den API-Konsumenten
Rapid Delivery durch eine
klare und einfache Architektur
Continuous Evolution durch Vertrauen
In die eigene Test-Suite und hohe Testabdec
Arne Limburg, @ArneLimburg
Kontakt:
arne.limburg@openknowledge.de
kontakt@openknowledge.de
Vielen Dank! #WISSENTEILEN
Alle Bilder der Präsentation sind entweder von pexels.com,
pixabay.com oder von mir selbst erstellt.
Bildernachweis

API-Design, Microarchitecture und Testing