collaborative contract driven development
play

Collaborative Contract Driven Development Billy Korando Developer - PowerPoint PPT Presentation

Collaborative Contract Driven Development Billy Korando Developer Advocate - IBM @BillyKorando william.korando@ibm.com Subscribe to the Java Newsletter https://developer.ibm.com/newsletters/java/ For your Spring & JakartaEE needs


  1. Collaborative Contract Driven Development Billy Korando Developer Advocate - IBM @BillyKorando william.korando@ibm.com 📭

  2. Subscribe to the Java Newsletter https://developer.ibm.com/newsletters/java/ For your Spring & JakartaEE needs https://cloud.ibm.com/docs/java @BillyKorando

  3. https://billykorando.com/ @BillyKorando

  4. CONTRACT DRIVEN DEVELOPMENT DEFINED (BRIEFLY) @BillyKorando

  5. DEFINING THE BEHAVIOR OF AN API Response: 200 Request /api/… { { … … SERVICE CLIENT } } @BillyKorando

  6. DECONSTRUCTING THE STATUS QUO (i.e. WHY DEVELOPMENT IS DIFFICULT WITHOUT CONTRACTS) @BillyKorando

  7. POORLY DEFINED SERVICES @BillyKorando

  8. POORLY DEFINED SERVICES @BillyKorando

  9. SCENE BREAKDOWN ● Poorly defined or undocumented API Inconsistent behavior or patterns ● Testing against a live service can lead to inconsistent results ● @BillyKorando

  10. VERY SERIAL DEVELOPMENT @BillyKorando

  11. VERY SERIAL DEVELOPMENT @BillyKorando

  12. SCENE BREAKDOWN Inability to develop in parallel ● ● Timeline impacted by delays from both service and client developers ● Client developer will have to get back up to speed @BillyKorando

  13. I AM ALTERING THE API @BillyKorando

  14. I AM ALTERING THE API @BillyKorando

  15. SCENE BREAKDOWN ● Breaking API changes not caught until production ● API design governed almost entirely by service developer @BillyKorando

  16. CONTRACT DRIVEN DEVELOPMENT EXPLAINED USING SPRING CLOUD CONTRACT @BillyKorando

  17. SPRING CLOUD CONTRACT ● Very active project ● Inter-operable with other tools/standards: OpenAPI, Packt, Swagger ● Flexible documentation support with Spring REST Docs ● Polyglot support More: https://spring.io/projects/spring-cloud-contract @BillyKorando

  18. WRITING THE CONTRACT Contract.make { label “Add New Person” request { method 'POST' url '/api/persons' body([ fName: “John” lName: “Doe”]) headers { header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_UTF8_VALUE)} } response { status 201 headers { header(HttpHeaders.LOCATION, 'api/persons/1')} } } @BillyKorando

  19. VALIDATING THE CONTRACT ✅ Add Service New Person @BillyKorando

  20. SHARING THE CONTRACT Stubs Artifact @BillyKorando

  21. SHARING THE CONTRACT Artifact Stubs Repository Artifact @BillyKorando

  22. DOCUMENTING THE API @BillyKorando

  23. VALIDATING AGAINST THE CONTRACT ✅ Stubs Client Artifact @BillyKorando

  24. CONTRACT DRIVEN DEVELOPMENT IN REVIEW 1. Write contract(s) to define API behavior 5. Clients can test/develop against artifact } 2. Contracts validate API matches behavior 3. Bundle contracts as shareable artifact Automated 4. Generate documentation from contracts @BillyKorando

  25. @BillyKorando

  26. PRODUCER DRIVEN CONTRACTS THE API OK WILL LOOK LIKE THIS SERVICE CLIENT @BillyKorando

  27. CONSUMER DRIVEN CONTRACTS I NEED THIS OK FROM THE SERVICE SERVICE CLIENT @BillyKorando

  28. WHY COLLABORATION IS IMPORTANT ● Better utilization of developer time More input from parties on API design ● More buy-in from parties on API design ● @BillyKorando

  29. CAN’T SPELL “COLLABORATIVE” WITHOUT “POLYGLOT” @BillyKorando

  30. LANGUAGE INDEPENDENT TOOLS Java Developers Javascript Developers Other Developers JDK ✅ JDK ❌ JDK ❌ Maven ✅ Maven ❌ Maven ❌ Java friendly IDE ✅ Java friendly IDE ❌ Java friendly IDE ❌ Docker ✅ Docker ✅ Docker ✅ Text editor ✅ Text editor ✅ Text editor ✅ @BillyKorando

  31. YAML CONTRACT request: label: “Add New Person” method: POST url: /api/persons body: fName: “John” lName: “Doe” headers: Content-Type: application/json response: status: 201 headers: Location: api/persons/1 @BillyKorando

  32. DOCKER IMAGES FOR READING CONTRACTS Encapsulates all Java and Spring Cloud Contract logic within a Docker container ● ● Images for both consumers and producers ● Configured by passing in environment variables Example of using producer image link ● Example of using consumer image link ● @BillyKorando

  33. CONTRACT TESTING WITH DOCKER Stubs Artifact ✅ Client @BillyKorando

  34. CONTRACT TESTING WITH DOCKER ✅ Service @BillyKorando

  35. DEMO TIME!

  36. POORLY DEFINED SERVICES X @BillyKorando

  37. SCENE BREAKDOWN API is documented automatically as a result of the process ● Accurate documentation encourages discussion on design/consistency ● ● Clients can develop/test against contracts which give consistent results @BillyKorando

  38. VERY SERIAL DEVELOPMENT X @BillyKorando

  39. SCENE BREAKDOWN Client and service developers can work in parallel once contract is written ● ● Process encourages discussion on API design @BillyKorando

  40. I AM ALTERING THE API X @BillyKorando

  41. SCENE BREAKDOWN ● API is checked as part of build process ● Changes will cause either service or client to fail Prevents “rogue” changes from reaching PROD and becoming “finalized” ● @BillyKorando

  42. FINAL POINTS ● Not just REST/HTTP , can also write contracts for messages ● It’s ok to change contracts Contract tests are not acceptance tests nor replace end-to-end tests ● Not tested: ○ ■ Resiliency ■ Timeout ■ Performance Edge cases ■ @BillyKorando

  43. Q & A @BillyKorando

  44. SOURCES Code: https://github.com/wkorando/collaborative-contract-driven-development-2-0 https://cloud.spring.io/spring-cloud-contract/single/spring-cloud-contract.html https://spring.io/blog/2018/02/13/spring-cloud-contract-in-a-polyglot-world Contact me: Twitter: @BillyKorando Email: William.Korando@ibm.com @BillyKorando

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend