consumer-driven contracts - entwicklertag · consumer-driven contracts markus knittig @mknittig....
TRANSCRIPT
![Page 1: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/1.jpg)
Consumer-Driven ContractsMarkus Knittig
@mknittig
![Page 2: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/2.jpg)
Agenda
● Fundamentals● How CDC works● What CDC can do and not do
![Page 3: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/3.jpg)
Service-oriented Architecture
![Page 4: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/4.jpg)
Microservices
![Page 5: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/5.jpg)
Microservices Architecture
![Page 6: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/6.jpg)
Service Consumer
![Page 7: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/7.jpg)
Service Provider
![Page 8: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/8.jpg)
![Page 9: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/9.jpg)
Provider Contracts
● Document schemas● Interfaces● Conversations● Policy● Quality of service characteristics
![Page 10: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/10.jpg)
… and Consumer Contracts?
![Page 11: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/11.jpg)
Consumer-Driven
![Page 12: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/12.jpg)
Contracts
![Page 13: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/13.jpg)
Pact and Spring Cloud Contractsto the rescue!
![Page 14: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/14.jpg)
Example with Spring Cloud Contracts
![Page 15: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/15.jpg)
Example with Pactanimal_service.given("an alligator named Mary exists").
upon_receiving("a request for an alligator").
with(
method: "get",
path: "/alligators/Mary",
headers: {"Accept" => "application/json"}).
will_respond_with(
status: 200,
headers: {"Content-Type" => "application/json"},
body: {
name: "Mary",
dateOfBirth: Pact.term(
generate: "02/11/2013",
matcher: /\d{2}\/\d{2}\/\d{4}/)
})
![Page 16: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/16.jpg)
Overview with Spring Cloud Contracts
![Page 17: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/17.jpg)
Consumer view with Pact
![Page 18: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/18.jpg)
Provider view with Pact
![Page 19: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/19.jpg)
Should I use Pact or Spring Cloud Contracts?
![Page 20: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/20.jpg)
Simple: Use Spring Cloud Contracts if you want to test Spring (Boot) projects
(you can consume Pact files too)
![Page 21: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/21.jpg)
Pact Implementations
![Page 22: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/22.jpg)
Share contracts
![Page 23: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/23.jpg)
Pact Broker
● Matrix of compatible consumer/provider versions ● Tagging of Pact versions e.g. “production”,
“feature-branch”● Hooks when Pact changes e.g. run provider verifications● Provider verification results● Diffs between Pact versions● And some more...
![Page 24: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/24.jpg)
Pact Broker Index
![Page 25: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/25.jpg)
Pact Broker Contract Details
![Page 26: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/26.jpg)
Pact Broker Dependency Graph
![Page 27: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/27.jpg)
(Possible) CDC Flow
![Page 28: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/28.jpg)
Contract Tests vs Functional Tests
![Page 29: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/29.jpg)
![Page 30: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/30.jpg)
Consumer-Driven Contracts
![Page 31: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/31.jpg)
Given "there is no user called Mary"
When "creating a user with username Mary"
POST /users { "username": "mary", email: "...", ... }
Then
Expected Response is 200 OK
![Page 32: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/32.jpg)
Given "there is already a user called Mary"
When "creating a user with username Mary"
POST /users { "username": "mary", email: "...", ... }
Then
Expected Response is 409 Conflict
![Page 33: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/33.jpg)
When "creating a user with a username with 21 characters"
POST /users { "username": "thisisalooongusername", email: "...",... }
Then
Expected Response is 400 Bad Request
Expected Response body is { "error": "username cannot be more than 20
characters" }
![Page 34: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/34.jpg)
When "creating a user with a username containing numbers"
POST /users { "username": "us3rn4me", email: "...", ... }
Then
Expected Response is 400 Bad Request
Expected Response body is { "error": "username can only contain
letters" }
![Page 35: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/35.jpg)
Given that username "bad_username" is invalid
When "creating a user with an invalid username"
POST /users { "username": "bad_username", ... }
Then
Response is 400 Bad Request
Response body is { "error": "<any string>" }
![Page 36: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/36.jpg)
CDC vs. Swagger
![Page 37: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/37.jpg)
CDC vs. JSON Schema
![Page 38: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/38.jpg)
Where CDC can help ● Good tool for communication about
interfaces between consumer and provider● Simple structure / naming / type checks in
request / response on lower test level● Simple stubs for the consumer which can be
used to use consumer even if the real implementation is missing
![Page 39: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/39.jpg)
Do not use CDC...● ...to replace end-to-end / system tests. “We
have CDC! Why does integration break?” ● ...to test business logic. “For this request I
expect two offerings, for this request one..”● ...to test (master) data. “I need to ensure all
different currencies are supported.”● … to test cross-cutting concerns like security,
token handling etc.
![Page 40: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/40.jpg)
CDC Users
![Page 41: Consumer-Driven Contracts - Entwicklertag · Consumer-Driven Contracts Markus Knittig @mknittig. Agenda Fundamentals How CDC works What CDC can do and not do. Service-oriented Architecture](https://reader035.vdocument.in/reader035/viewer/2022062919/5f01dbd17e708231d4016166/html5/thumbnails/41.jpg)
Thank you for your attention!Questions and comments are welcome
Markus Knittig@mknittig