Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Auf dem Weg zur Continuous API Delivery - API Evolution beherrschen mit Spring Cloud Pipelines (OOP 2019)

0 views

Published on

Entkoppelte Microservices sollen es für Teams ermöglichen, ihre Services schnell und unabhängig voneinander zu entwickeln und so möglichst schnell Mehrwerte zu schaffen. Dieser Wert wird jedoch erst dann erzielt, wenn ein neues Features auch in Produktion live geht und das möglichst automatisiert.
Solche Veränderungen implizieren oft auch die Evolution der bestehenden Schnittstellen zwischen den Systemen. Da in solch komplexen Systemen viele Wechselwirkungen zwischen den einzelnen Services bestehen und viele APIs von unterschiedlichsten Services konsumiert werden, kann unkoordiniertes Vorgehen hier zu Breaking Changes und Problemen führen. Eine komplexe, manuelle Prüfung wiederum verzögert den Livegang neuer Features und führt zwangsläufig zu hoher organisatorischer Kopplung zwischen den Entwicklungsteams.
Ein Teil dieses Problems kann mithilfe von Consumer Driven Contract Testing gelöst werden. Spring Cloud Contract stellt Möglichkeiten bereit, um mittels automatisierter Tests die Kompatibilität mit anderen Services und auch mit 3rd-Party Schnittstellen aufrecht zu erhalten. Jedoch ist dabei nicht der gesamte Auslieferungsprozess im Fokus, sondern eher die Isolation von Schnittstellentests, so dass ein Restrisiko im Rahmen des Continuous Deployment verbleibt.
Mit Spring Cloud Pipelines steht Entwicklerteams eine Möglichkeit zur Verfügung, schnell eine gut durchdachte CI/CD Pipeline aufzubauen. Im Vortrag wird aufgezeigt, wie Spring Cloud Pipelines funktioniert, wie schnell man zu brauchbaren Ergebnissen kommen und wie eine gut aufgestellte Pipeline in Kombination mit CDCT dabei helfen kann, API Changes sicher in die Produktion zu bringen.

Published in: Software
  • Be the first to comment

  • Be the first to like this

Auf dem Weg zur Continuous API Delivery - API Evolution beherrschen mit Spring Cloud Pipelines (OOP 2019)

  1. 1. 1 Auf dem Weg zur Continuous API Delivery API Evolution beherrschen mit (Spring) Cloud Pipelines Quelle: https://pixabay.com/de/rohr-leitung-pipeline-577581/ @maverick_1601@fpfleiderer #WeAreHiring
  2. 2. 2 Quelle: http://www.google.de
  3. 3. 3 Consumer Driven Contract Testing GET /customer/{id} ?fields=name ------------------------------------ { “name”: “Max Meier” } { “name”: “Max Meier”, “age”: 34 } GET /customer/{id} ?fields=name Spring Cloud Contract <<generated>> ProviderTest <<generated>> WireMock Stubs Consumer Test
  4. 4. 4 Quelle: https://philsturgeon.uk/api/2018/05/02/api-evolution-for-rest-http-apis/
  5. 5. 5 “Things have changed since WSDL back then …” ● Relaxed Schema ○ Resource based ○ Tolerant Reader ○ Relaxed type system based on JSON ○ No strict schema validation ● Maintenance ○ Evolution ideally consumer “driven” ○ Number of consumers outweighing providers ○ Effort for maintaining compatibility at provider ○ Avoid coupling, especially lock-step deployments, using step-wise migration ● Versioning ○ Last resort API Evolution { “name”: “Max Meier”, “age”: 34 } GET /customer/{id} ?fields=name
  6. 6. 6 Consumer-Provider Relationships GET /customer/{id} ?fields=name { “name”: “Max Meier” } { “name”: “Max Meier”, “firstName”: “Max”, “lastName”: “Meier” } { “firstName”: “Max”, “lastName”: “Meier” } GET /customer/{id} ?fields=lastName, firstName
  7. 7. 7 Managing API Compatibility { “name”: “Max Meier” } { “name”: “Max Meier”, “firstName”: “Max”, “lastName”: “Meier” } { “firstName”: “Max”, “lastName”: “Meier” } GET /customer/{id} ?fields=name GET /customer/{id} ?fields=name GET /customer/{id} ?fields=lastName, firstName GET /customer/{id} ?fields=lastName, firstName { “name”: “Max Meier”, “firstName”: “Max”, “lastName”: “Meier” } GET /customer/{id} ?fields=lastName, firstName GET /customer/{id} ?fields=name
  8. 8. 8 (Spring) Cloud Pipelines Build Test Stage Production ● Maven/Gradle Build ● Publish to repository ● Unit Tests ● CDCT Tests ● API compatibility Tests ● Running Instance with surrounding stubs ● Smoke Tests ● Running instances of the whole system ● Manual deployment step ● End-to-end Tests ● Tag current version ● Blue/Green Deployment ● Rollback possible Quelle: https://github.com/spring-cloud/spring-cloud-pipelines
  9. 9. 9 Live Demo Cloud Pipelines
  10. 10. 10 API Types Order Customer Payment Payment Provider Marketing Public Consumer Public Consumer REST API with “known” consumer & provider “Unknown” REST API consumers Message-based API with “known” consumer & provider 3rd-party REST API with “limited” provider control Partner REST API
  11. 11. 11 1. Use Consumer Driven Contract Testing to decouple your development life-cycles a. Ideal for known consumers/provider b. Regularly check 3rd-party APIs using “proxy” contracts c. Offer contracts to public consumers? 2. Preverse API compatibility by avoiding breaking changes a. Consolidate consumer driven API changes b. Verify backward compatibility using Cloud Pipelines 3. If necessary, use step-wise migration a. Verify backward compatibility using Cloud Pipelines b. Let consumers drive the breaking change c. Keep track of consumers/providers still relying on older versions Summary
  12. 12. 12 How are you dealing with API evolution and compatibility? #WeAreHiringQuelle: https://pixabay.com/de/feedback-checkliste-job-gut-3676922/ @maverick_1601@fpfleiderer https://blog.digitalfrontiers.de https://www.digitalfrontiers.de

×