Slide 1

Slide 1 text

Consumer Driven Contracts mit OPENAPI Christian Fischer @agiledojo

Slide 2

Slide 2 text

Cascading Changes Price Store Marketing Mobile

Slide 3

Slide 3 text

Consumer Driven Contracts Price Store Marketing Mobile

Slide 4

Slide 4 text

CDC Frameworks generates generates CDC Service Adapter REST Controller Consumer Provider Provider Stub Adapter Test REST API Test BL Stub

Slide 5

Slide 5 text

What do we have to do now? 1. Write Contracts in provided DSL 2. Switch to generated Mocks for Consumer 3. Integrate Contract Test for Provider Let‘s get started Hmm, isn‘t there an easier ways? We already have an OpenAPI Doc for our REST Service.

Slide 6

Slide 6 text

OPENAPI 3.0 info servers security paths tags externalDocs conponents OPENAPI COMPONENTS schemas responses parameters requestBodies headers securitySchemes links callbacks

Slide 7

Slide 7 text

Swagger Request Validator Service Adapter REST Controller Consumer Provider Provider Stub Adapter Test REST API Test BL Stub Request Validator Request Validator https://bitbucket.org/atlassian/swagger-request-validator/src/master/

Slide 8

Slide 8 text

Example: Provider and Consumers Store Backend Price Service Marketing Backend POST /price [„I“,“II“] status: 200 {„inCent“: 152} POST /price [„I“,“II“] status: 200 {„inCent“: 152, „tax“: 32}

Slide 9

Slide 9 text

Example: The Contracts Store App Backend Price Service Marketing Portal store.yml de.agiledojo.cdd:price-api-store marketing.yml de.agiledojo.cdd:price-api-marketing testimplementation testimplementation

Slide 10

Slide 10 text

Example: The Store Test Fixture Price Service [Wiremock] PriceServiceGatewayAdapter [Adapter Class] PriceServiceGatewayAdapterIT [Junit Test] setup & start call & assert add OpenApiValidationListener [Wiremock Listener] validate store.yml [OPENAPI Contract]

Slide 11

Slide 11 text

Example: The Price Service Test Fixture CalculatorMock [Mockito Mock] PriceApiController [Spring REST Controller Class] PriceApiControllerIT [Spring MockMVC Test] call & assert setup MockMvc [HTTP CLient] OpenApiInteractionValidator [Validator] store.yml [OPENAPI Contract] setup validate

Slide 12

Slide 12 text

CDC: Pact vs OPENAPI

Slide 13

Slide 13 text

CDC vs OPENAPI CDC (Pact) OPENAPI Specification Style Consumer First, Interaction oriented Contract First, Syntax oriented Specification Format API JSON, YAML Languages JVM, JS, NET, Go, Python, Scala, PHP, Ruby, Rust,C++ JVM (Wiremock, RestAssured, MockMVC, Spring Webclient) Contract Broker Pact Server Artifact Repository

Slide 14

Slide 14 text

JS Pact Validation PriceServiceMock [Pact Mock] Api [Api Adapter Class] swagger-mock-validator [npm module] create validate api.pact.spec.js [Pact Test] marketing.yml [OPENAPI Contract] call & assert setup Interactions marketing-priceservice.json [PactContract]

Slide 15

Slide 15 text

Christian Fischer Software Engineering Coach http://agiledojo.de @agiledojo