SlideShare a Scribd company logo
Consumer Driven Contracts and
Your Microservice Architecture
Marcin Grzejszczak Adib Saikali
@mgrzejszczak @asaikali
1
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
About Marcin
Spring Cloud developer at Pivotal working mostly on
● Spring Cloud Sleuth
● Spring Cloud Contract
● Spring Cloud Pipelines
Connect with me
● Twitter: @mgrzejszczak
● Blog: http://toomuchcoding.com
2
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Advisory Platform Architect at Pivotal helping customers
● Adopt cloud native application architecture patterns
● Define strategy for modernizing legacy monolithic apps
● Succeed with PCF
Connect with me
● Twitter: @asaikali
About Adib
3
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Just Another Day at Work
4
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
How the code is currently organized
5
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Application Architecture
6
Legacy
service
Customer Rental
History Service
Payment
processor
Mainframe
Audit service
Insurance
service
● Interservice calls are over http
● Legacy service that is hard to test due the dependencies it
has on other downstream services
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Testing Strategy - Hard Coded Object Stubs
7
Legacy
service
Customer Rental
History Service
Payment
processor
Mainframe
Audit service
insurance
service
Hard coded
Customer
Rental History
Service Stub
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Problems with hand coding stubs
8
● 1225 line JSON response
● Hard to keep hard coded
stub in sync with the api
being stubbed
● Stub does not test that
requests are made
correctly to the remote
service
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Let’s see some code
https://github.com/marcingrzejszczak/the-legacy-app
9
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Generating Stubs From Contracts
10
Contract.make {
description """
should return a list of a charges
"""
request {
urlPath("/v1/charges") {
queryParameters {
parameter("limit", 25)
}
}
method GET()
}
response {
status 200
body($(consumer(file("charges.json")),
producer(execute('assertResponse($it)'))))
}
}
Spring Cloud
Contract
Maven/Gradle
Plugin
Wiremock stub
definition stored in
-stubs.jar
OutputsReads
Stub jar files are published to a maven repo
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Testing Strategy - Auto Generated Remote Stub
11
Legacy
service
Customer Rental
History Service
Payment
processor
Mainframe
Audit service
insurance
service
Auto-generated
Customer Rental
History Service Stub
Stubs can be launched on specified a port number using
the @AutoConfigureStubRunner annotation on test classesAudit Service
integration test
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Spring Cloud Contract Auto-Generated Stub Workflow
12
01
02
03
04
Developer
codes a contract defining
the interaction between
a consumer and the API
using the Spring Cloud
Contract Groovy DSL
Spring Cloud Contract
Maven/gradle plugin
generates wiremock stubs
from contract definitions
packaged in -stubs.jar
published in a maven
repository
CI/CD Server runs tests
Spring Cloud Contract starts
wiremock during the test
execution and configures it
with the scenario specified
by the contract
Developer writes an
integration test and
annotates it with
@AutoConfigureStubRunner
specifying the port number
for the stub to run on
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
How to involve other teams?
https://github.com/marcingrzejszczak/2017-s1p-external-contracts
13
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Spring Cloud Contract plugin
does more than that...
14
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Generating Stubs & Tests From Contracts
15
Contract.make {
description """
should return a list of a charges
"""
request {
urlPath("/v1/charges") {
queryParameters {
parameter("limit", 25)
}
}
method GET()
}
response {
status 200
body($(consumer(file("charges.json")),
producer(execute('assertResponse($it)'))))
}
}
Spring Cloud
Contract
Maven Plugin
Generates
Wiremock stub
definition stored in
-stubs.jar
Reads
Stub jar files are published to a maven repo
junit integration
tests that execute
the contract against
the api
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Testing Strategy - Auto Generated tests & stubs
16
Legacy
service
Customer Rental
History Service
Payment
processor
Mainframe
Audit service
Insurance
service
Auto-generated
Legacy Service Stub
Stubs can be launched on specified a port number using
the @AutoConfigureStubRunner annotation on test classes
Auto-generated
junit integration tests
Auto-generated
Legacy Service Stub
Auto-generated
stubs
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Producer of an API
● Accept pull requests from consumers
containing contract definitions
● Add spring cloud contract maven/gradle
plugin to the build file
● Run generated contract integration tests
against api
● Publish generated -stubs.jar files to the
maven repo
Spring Cloud Contract Workflow
Consumer of an API
● Write a contract that defines the
interaction with the API
● Send a pull request to the producer to
contribute the consumer contract
● Write integration tests that uses the
generated wiremock stubs
● Run integration tests as part of CD
pipeline
17
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Hard Problems
● How can something be added to a service without breaking the clients?
● How can something be removed from a service without breaking the clients?
● How can a service developer find out how clients are using their service?
● How to enable short release cycles and continuous delivery of services?
18
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Service Evolution Patterns
● Single Message Argument
● Dataset Amendment
● Tolerant Reader
● Schema Versioning
● Extension Points
● Consumer-Driven Contracts
19
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Provider Contract
• The implementer of a service defines the interface of the
service everyone uses the same interface
20
Service
Client A
Client B
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Consumer Contract
● The consumer of a service defines their interface to the service within the
conventions / spirit of provider contract
21
Service
Client A
Client B
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Consumer Driven Contracts Workflow
● Every consumer of a service must write an executable integration test that
defines how the consumer uses the service
● Each test must only test what the client cares about
● Consumer tests are sent as pull requests to the service producer
22
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Consumer Driven Contracts
23
Source: http://martinfowler.com/articles/consumerDrivenContracts.html
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Consumer Driven Contracts
24
http://www.servicedesignpatterns.com/WebServiceEvolution/ConsumerDrivenContracts
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Benefits of Consumer Driven Contracts
● Align service providers with the business goals of their consumer through the
consumer driven contracts
● Provide insights into how a service is being used by its consumers
● Make evolving services easier by reducing the amount of co-ordination
required to evolve interfaces
● Help in the configuration of continuous delivery pipelines
○ Spring Cloud Pipelines - https://cloud.spring.io/spring-cloud-pipelines/
25
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Generating Stubs & Tests From Contracts
26
Contract.make {
description """
should return a list of a charges
"""
request {
urlPath("/v1/charges") {
queryParameters {
parameter("limit", 25)
}
}
method GET()
}
response {
status 200
body($(consumer(file("charges.json")),
producer(execute('assertResponse($it)'))))
}
}
Spring Cloud
Contract
Maven Plugin
Generates
Wiremock stub
definition stored in
-stubs.jar
Reads
Stub jar files are published to a maven repo
junit integration
tests that execute
the contract against
the api
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = TheLegacyApp.class,
properties = "api.url=http://localhost:8765",
webEnvironment = NONE)
@AutoConfigureStubRunner(
ids = "com.example:the-legacy-app-stubs:+:stubs:8765"
, workOffline = true
)
public class CustomerWithStubRunnerTests {
@Autowired CustomerRentalHistoryManager manager;
@Test
public void should_return_charge_collection() {
Charges charges = manager.listAllCharges("foo");
BDDAssertions.then(charges.getCharges())
.hasSize(25);
}
}
Using Stubs on the Client Side
27
Stub Runner
Automatically runs a
WireMock server
and feeds it with
stubs
downloads the JAR
with the stubs or
uses classpath to
find them
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
● Messaging (Spring Integration / Stream / Apache Camel)
● Integration with Spring Mock MVC
● Maven and Gradle plugins
● Scenarios
● Dynamic pieces
● Stub Runner Boot
● JUnit rule
● Spring Cloud integration
● Pact support
What else
28
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Messaging
29
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
MockMvc
30
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Maven & Gradle
31
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Scenarios
32
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Dynamic Pieces
33
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Dynamic Pieces
34
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
NodeJs app
35
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Doesn’t work
36
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Stub Runner Boot
37
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Run Stub Runner Boot (java -jar)
38
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Run Stub Runner Boot (Spring Cloud Cli)
39
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Run Stub Runner Boot (Spring Cloud Cli)
40
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
NodeJs works
41
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Not a Spring app? JUnit Rule FTW!
42
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Spring Cloud integration
43
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Pact support
44
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
45
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Learn More. Stay Connected.
▪ Read the docs
http://cloud.spring.io/spring-cloud-contract/
▪ Talk to us on Gitter
https://gitter.im/spring-cloud/spring-cloud-contract
Twitter: twitter.com/springcentral
YouTube: spring.io/video
LinkedIn: spring.io/linkedin
Google Plus: spring.io/gplus
46
Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons
Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/
Disclaimer Statement
47
asaikali
mgrzejszczak

More Related Content

What's hot (20)

PDF
Secrets of Successful Digital Transformers
VMware Tanzu
 
PDF
12 Factor, or Cloud Native Apps - What EXACTLY Does that Mean for Spring Deve...
VMware Tanzu
 
PPTX
Consumer-driven contracts: avoid microservices integration hell! (LondonCD - ...
Pierre Vincent
 
PDF
Continuous Delivery: Fly the Friendly CI in Pivotal Cloud Foundry with Concourse
VMware Tanzu
 
PDF
The 36th Chamber of Shaolin - Improve Your Microservices Kung Fu in 36 Easy S...
Stefan Richter
 
PDF
Deploy Code into Production Faster on Kubernetes
VMware Tanzu
 
PPTX
Mule ESB- Data Validation- Best Practices
Coforge (Erstwhile WHISHWORKS)
 
PPTX
Concourse in the Real World: A Case Study in CI/CD and DevOps
VMware Tanzu
 
PDF
Cloud Native Testing, 2020 Edition: A Modern Blueprint for Pre-production Tes...
OlyaSurits
 
PDF
Transporting Data at Warp Speed: How to Connect Spring Boot Apps Quickly, Pow...
VMware Tanzu
 
PDF
Flux is incubating + the road ahead
LibbySchulze
 
PDF
APIOps: Automated Processes for Even Better APIs
OlyaSurits
 
PDF
Salesforce CLI
Keir Bowden
 
PDF
Salesforce CI/CD - A strategy for success
Yassine ELQANDILI ☁
 
PPTX
DOES14 - Gary Gruver - Macy's - Transforming Traditional Enterprise Software ...
Gene Kim
 
PPTX
Kubernetes Controller for Pull Request Based Environment
Vishal Banthia
 
PDF
Crossing the Streams! Rollout Strategies to Keep Your Users Happy!
VMware Tanzu
 
ODP
CICD Mule
Naveen kumar Kavartapu
 
PDF
DevOpsDays Openstack Toolchains
DevOpsDays Austin 2014
 
PPTX
Securing microservices continuous delivery using grafeas and kritis
Vishal Banthia
 
Secrets of Successful Digital Transformers
VMware Tanzu
 
12 Factor, or Cloud Native Apps - What EXACTLY Does that Mean for Spring Deve...
VMware Tanzu
 
Consumer-driven contracts: avoid microservices integration hell! (LondonCD - ...
Pierre Vincent
 
Continuous Delivery: Fly the Friendly CI in Pivotal Cloud Foundry with Concourse
VMware Tanzu
 
The 36th Chamber of Shaolin - Improve Your Microservices Kung Fu in 36 Easy S...
Stefan Richter
 
Deploy Code into Production Faster on Kubernetes
VMware Tanzu
 
Mule ESB- Data Validation- Best Practices
Coforge (Erstwhile WHISHWORKS)
 
Concourse in the Real World: A Case Study in CI/CD and DevOps
VMware Tanzu
 
Cloud Native Testing, 2020 Edition: A Modern Blueprint for Pre-production Tes...
OlyaSurits
 
Transporting Data at Warp Speed: How to Connect Spring Boot Apps Quickly, Pow...
VMware Tanzu
 
Flux is incubating + the road ahead
LibbySchulze
 
APIOps: Automated Processes for Even Better APIs
OlyaSurits
 
Salesforce CLI
Keir Bowden
 
Salesforce CI/CD - A strategy for success
Yassine ELQANDILI ☁
 
DOES14 - Gary Gruver - Macy's - Transforming Traditional Enterprise Software ...
Gene Kim
 
Kubernetes Controller for Pull Request Based Environment
Vishal Banthia
 
Crossing the Streams! Rollout Strategies to Keep Your Users Happy!
VMware Tanzu
 
DevOpsDays Openstack Toolchains
DevOpsDays Austin 2014
 
Securing microservices continuous delivery using grafeas and kritis
Vishal Banthia
 

Similar to Consumer Driven Contracts and Your Microservice Architecture (20)

PPTX
Consumer Driven Contracts and Your Microservice Architecture
VMware Tanzu
 
PDF
Marcin Grzejszczak - Contract Tests in the Enterprise
SegFaultConf
 
PDF
Extending the Platform with Spring Boot and Cloud Foundry
Kenny Bastani
 
PDF
Extending the Platform
VMware Tanzu
 
PDF
Cloud Foundry Services on PKS with No Extra Code, "We Bosh So You Don’t Have ...
VMware Tanzu
 
PDF
Under the Hood of Reactive Data Access (2/2)
VMware Tanzu
 
PDF
Managing the Complexity of Microservices Deployments
VMware Tanzu
 
PPTX
Latency analysis for your microservices using Spring Cloud & Zipkin
VMware Tanzu
 
PPTX
Deploying Spring Boot apps on Kubernetes
VMware Tanzu
 
PDF
Enable SQL/JDBC Access to Apache Geode/GemFire Using Apache Calcite
Christian Tzolov
 
PPTX
Chaos Engineering for PCF
VMware Tanzu
 
PDF
P to V to C: The Value of Bringing “Everything” to Containers
VMware Tanzu
 
PPTX
How to Build More Secure Service Brokers
VMware Tanzu
 
PDF
Consumer Driven Contracts and Your Microservice Architecture
Marcin Grzejszczak
 
PDF
The Beginner’s Guide To Spring Cloud
VMware Tanzu
 
PDF
Cloud Native Java with Spring Cloud Services
VMware Tanzu
 
PPTX
Simple Data Movement Patterns: Legacy Application to Cloud-Native Environment...
VMware Tanzu
 
PPTX
Designing, Implementing, and Using Reactive APIs
VMware Tanzu
 
PDF
Lattice: A Cloud-Native Platform for Your Spring Applications
Matt Stine
 
PDF
Cassandra and DataStax Enterprise on PCF
VMware Tanzu
 
Consumer Driven Contracts and Your Microservice Architecture
VMware Tanzu
 
Marcin Grzejszczak - Contract Tests in the Enterprise
SegFaultConf
 
Extending the Platform with Spring Boot and Cloud Foundry
Kenny Bastani
 
Extending the Platform
VMware Tanzu
 
Cloud Foundry Services on PKS with No Extra Code, "We Bosh So You Don’t Have ...
VMware Tanzu
 
Under the Hood of Reactive Data Access (2/2)
VMware Tanzu
 
Managing the Complexity of Microservices Deployments
VMware Tanzu
 
Latency analysis for your microservices using Spring Cloud & Zipkin
VMware Tanzu
 
Deploying Spring Boot apps on Kubernetes
VMware Tanzu
 
Enable SQL/JDBC Access to Apache Geode/GemFire Using Apache Calcite
Christian Tzolov
 
Chaos Engineering for PCF
VMware Tanzu
 
P to V to C: The Value of Bringing “Everything” to Containers
VMware Tanzu
 
How to Build More Secure Service Brokers
VMware Tanzu
 
Consumer Driven Contracts and Your Microservice Architecture
Marcin Grzejszczak
 
The Beginner’s Guide To Spring Cloud
VMware Tanzu
 
Cloud Native Java with Spring Cloud Services
VMware Tanzu
 
Simple Data Movement Patterns: Legacy Application to Cloud-Native Environment...
VMware Tanzu
 
Designing, Implementing, and Using Reactive APIs
VMware Tanzu
 
Lattice: A Cloud-Native Platform for Your Spring Applications
Matt Stine
 
Cassandra and DataStax Enterprise on PCF
VMware Tanzu
 
Ad

More from Marcin Grzejszczak (13)

PDF
Continuous Deployment of your Application @jSession#5
Marcin Grzejszczak
 
PDF
Continuous Deployment of your Application @JUGtoberfest
Marcin Grzejszczak
 
PDF
Continuous Deployment To The Cloud @DevoxxPL 2017
Marcin Grzejszczak
 
PDF
Consumer Driven Contracts To Enable API Evolution @Geecon
Marcin Grzejszczak
 
PDF
Microservices Tracing With Spring Cloud and Zipkin @Szczecin JUG
Marcin Grzejszczak
 
PDF
Consumer Driven Contracts and Your Microservice Architecture
Marcin Grzejszczak
 
PDF
Microservices Tracing with Spring Cloud and Zipkin (devoxx)
Marcin Grzejszczak
 
PDF
Microservices Tracing With Spring Cloud and Zipkin @CybercomDEV
Marcin Grzejszczak
 
PDF
Microservices Tracing with Spring Cloud and Zipkin
Marcin Grzejszczak
 
PDF
Spring Cloud’s Groovy
Marcin Grzejszczak
 
PDF
Microservices - enough with theory, let's do some code @Geecon Prague 2015
Marcin Grzejszczak
 
PDF
Stick to the rules - Consumer Driven Contracts. 2015.07 Confitura
Marcin Grzejszczak
 
PDF
Introduction to Groovy runtime metaprogramming and AST transforms
Marcin Grzejszczak
 
Continuous Deployment of your Application @jSession#5
Marcin Grzejszczak
 
Continuous Deployment of your Application @JUGtoberfest
Marcin Grzejszczak
 
Continuous Deployment To The Cloud @DevoxxPL 2017
Marcin Grzejszczak
 
Consumer Driven Contracts To Enable API Evolution @Geecon
Marcin Grzejszczak
 
Microservices Tracing With Spring Cloud and Zipkin @Szczecin JUG
Marcin Grzejszczak
 
Consumer Driven Contracts and Your Microservice Architecture
Marcin Grzejszczak
 
Microservices Tracing with Spring Cloud and Zipkin (devoxx)
Marcin Grzejszczak
 
Microservices Tracing With Spring Cloud and Zipkin @CybercomDEV
Marcin Grzejszczak
 
Microservices Tracing with Spring Cloud and Zipkin
Marcin Grzejszczak
 
Spring Cloud’s Groovy
Marcin Grzejszczak
 
Microservices - enough with theory, let's do some code @Geecon Prague 2015
Marcin Grzejszczak
 
Stick to the rules - Consumer Driven Contracts. 2015.07 Confitura
Marcin Grzejszczak
 
Introduction to Groovy runtime metaprogramming and AST transforms
Marcin Grzejszczak
 
Ad

Recently uploaded (20)

PDF
Responsible AI and AI Ethics - By Sylvester Ebhonu
Sylvester Ebhonu
 
PDF
TrustArc Webinar - Navigating Data Privacy in LATAM: Laws, Trends, and Compli...
TrustArc
 
PDF
Trying to figure out MCP by actually building an app from scratch with open s...
Julien SIMON
 
PPTX
Agile Chennai 18-19 July 2025 | Emerging patterns in Agentic AI by Bharani Su...
AgileNetwork
 
PDF
The Future of Artificial Intelligence (AI)
Mukul
 
PPTX
Introduction to Flutter by Ayush Desai.pptx
ayushdesai204
 
PPTX
IT Runs Better with ThousandEyes AI-driven Assurance
ThousandEyes
 
PDF
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
PDF
Build with AI and GDG Cloud Bydgoszcz- ADK .pdf
jaroslawgajewski1
 
PDF
How ETL Control Logic Keeps Your Pipelines Safe and Reliable.pdf
Stryv Solutions Pvt. Ltd.
 
PDF
RAT Builders - How to Catch Them All [DeepSec 2024]
malmoeb
 
PPTX
Agile Chennai 18-19 July 2025 Ideathon | AI Powered Microfinance Literacy Gui...
AgileNetwork
 
PDF
CIFDAQ's Market Wrap : Bears Back in Control?
CIFDAQ
 
PDF
The Future of Mobile Is Context-Aware—Are You Ready?
iProgrammer Solutions Private Limited
 
PDF
Per Axbom: The spectacular lies of maps
Nexer Digital
 
PDF
Economic Impact of Data Centres to the Malaysian Economy
flintglobalapac
 
PPTX
OA presentation.pptx OA presentation.pptx
pateldhruv002338
 
PPTX
AVL ( audio, visuals or led ), technology.
Rajeshwri Panchal
 
PDF
NewMind AI Weekly Chronicles – July’25, Week III
NewMind AI
 
PDF
Market Insight : ETH Dominance Returns
CIFDAQ
 
Responsible AI and AI Ethics - By Sylvester Ebhonu
Sylvester Ebhonu
 
TrustArc Webinar - Navigating Data Privacy in LATAM: Laws, Trends, and Compli...
TrustArc
 
Trying to figure out MCP by actually building an app from scratch with open s...
Julien SIMON
 
Agile Chennai 18-19 July 2025 | Emerging patterns in Agentic AI by Bharani Su...
AgileNetwork
 
The Future of Artificial Intelligence (AI)
Mukul
 
Introduction to Flutter by Ayush Desai.pptx
ayushdesai204
 
IT Runs Better with ThousandEyes AI-driven Assurance
ThousandEyes
 
Data_Analytics_vs_Data_Science_vs_BI_by_CA_Suvidha_Chaplot.pdf
CA Suvidha Chaplot
 
Build with AI and GDG Cloud Bydgoszcz- ADK .pdf
jaroslawgajewski1
 
How ETL Control Logic Keeps Your Pipelines Safe and Reliable.pdf
Stryv Solutions Pvt. Ltd.
 
RAT Builders - How to Catch Them All [DeepSec 2024]
malmoeb
 
Agile Chennai 18-19 July 2025 Ideathon | AI Powered Microfinance Literacy Gui...
AgileNetwork
 
CIFDAQ's Market Wrap : Bears Back in Control?
CIFDAQ
 
The Future of Mobile Is Context-Aware—Are You Ready?
iProgrammer Solutions Private Limited
 
Per Axbom: The spectacular lies of maps
Nexer Digital
 
Economic Impact of Data Centres to the Malaysian Economy
flintglobalapac
 
OA presentation.pptx OA presentation.pptx
pateldhruv002338
 
AVL ( audio, visuals or led ), technology.
Rajeshwri Panchal
 
NewMind AI Weekly Chronicles – July’25, Week III
NewMind AI
 
Market Insight : ETH Dominance Returns
CIFDAQ
 

Consumer Driven Contracts and Your Microservice Architecture

  • 1. Consumer Driven Contracts and Your Microservice Architecture Marcin Grzejszczak Adib Saikali @mgrzejszczak @asaikali 1
  • 2. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ About Marcin Spring Cloud developer at Pivotal working mostly on ● Spring Cloud Sleuth ● Spring Cloud Contract ● Spring Cloud Pipelines Connect with me ● Twitter: @mgrzejszczak ● Blog: http://toomuchcoding.com 2
  • 3. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Advisory Platform Architect at Pivotal helping customers ● Adopt cloud native application architecture patterns ● Define strategy for modernizing legacy monolithic apps ● Succeed with PCF Connect with me ● Twitter: @asaikali About Adib 3
  • 4. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Just Another Day at Work 4
  • 5. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ How the code is currently organized 5
  • 6. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Application Architecture 6 Legacy service Customer Rental History Service Payment processor Mainframe Audit service Insurance service ● Interservice calls are over http ● Legacy service that is hard to test due the dependencies it has on other downstream services
  • 7. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Testing Strategy - Hard Coded Object Stubs 7 Legacy service Customer Rental History Service Payment processor Mainframe Audit service insurance service Hard coded Customer Rental History Service Stub
  • 8. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Problems with hand coding stubs 8 ● 1225 line JSON response ● Hard to keep hard coded stub in sync with the api being stubbed ● Stub does not test that requests are made correctly to the remote service
  • 9. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Let’s see some code https://github.com/marcingrzejszczak/the-legacy-app 9
  • 10. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Generating Stubs From Contracts 10 Contract.make { description """ should return a list of a charges """ request { urlPath("/v1/charges") { queryParameters { parameter("limit", 25) } } method GET() } response { status 200 body($(consumer(file("charges.json")), producer(execute('assertResponse($it)')))) } } Spring Cloud Contract Maven/Gradle Plugin Wiremock stub definition stored in -stubs.jar OutputsReads Stub jar files are published to a maven repo
  • 11. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Testing Strategy - Auto Generated Remote Stub 11 Legacy service Customer Rental History Service Payment processor Mainframe Audit service insurance service Auto-generated Customer Rental History Service Stub Stubs can be launched on specified a port number using the @AutoConfigureStubRunner annotation on test classesAudit Service integration test
  • 12. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Spring Cloud Contract Auto-Generated Stub Workflow 12 01 02 03 04 Developer codes a contract defining the interaction between a consumer and the API using the Spring Cloud Contract Groovy DSL Spring Cloud Contract Maven/gradle plugin generates wiremock stubs from contract definitions packaged in -stubs.jar published in a maven repository CI/CD Server runs tests Spring Cloud Contract starts wiremock during the test execution and configures it with the scenario specified by the contract Developer writes an integration test and annotates it with @AutoConfigureStubRunner specifying the port number for the stub to run on
  • 13. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ How to involve other teams? https://github.com/marcingrzejszczak/2017-s1p-external-contracts 13
  • 14. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Spring Cloud Contract plugin does more than that... 14
  • 15. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Generating Stubs & Tests From Contracts 15 Contract.make { description """ should return a list of a charges """ request { urlPath("/v1/charges") { queryParameters { parameter("limit", 25) } } method GET() } response { status 200 body($(consumer(file("charges.json")), producer(execute('assertResponse($it)')))) } } Spring Cloud Contract Maven Plugin Generates Wiremock stub definition stored in -stubs.jar Reads Stub jar files are published to a maven repo junit integration tests that execute the contract against the api
  • 16. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Testing Strategy - Auto Generated tests & stubs 16 Legacy service Customer Rental History Service Payment processor Mainframe Audit service Insurance service Auto-generated Legacy Service Stub Stubs can be launched on specified a port number using the @AutoConfigureStubRunner annotation on test classes Auto-generated junit integration tests Auto-generated Legacy Service Stub Auto-generated stubs
  • 17. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Producer of an API ● Accept pull requests from consumers containing contract definitions ● Add spring cloud contract maven/gradle plugin to the build file ● Run generated contract integration tests against api ● Publish generated -stubs.jar files to the maven repo Spring Cloud Contract Workflow Consumer of an API ● Write a contract that defines the interaction with the API ● Send a pull request to the producer to contribute the consumer contract ● Write integration tests that uses the generated wiremock stubs ● Run integration tests as part of CD pipeline 17
  • 18. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Hard Problems ● How can something be added to a service without breaking the clients? ● How can something be removed from a service without breaking the clients? ● How can a service developer find out how clients are using their service? ● How to enable short release cycles and continuous delivery of services? 18
  • 19. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Service Evolution Patterns ● Single Message Argument ● Dataset Amendment ● Tolerant Reader ● Schema Versioning ● Extension Points ● Consumer-Driven Contracts 19
  • 20. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Provider Contract • The implementer of a service defines the interface of the service everyone uses the same interface 20 Service Client A Client B
  • 21. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Consumer Contract ● The consumer of a service defines their interface to the service within the conventions / spirit of provider contract 21 Service Client A Client B
  • 22. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Consumer Driven Contracts Workflow ● Every consumer of a service must write an executable integration test that defines how the consumer uses the service ● Each test must only test what the client cares about ● Consumer tests are sent as pull requests to the service producer 22
  • 23. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Consumer Driven Contracts 23 Source: http://martinfowler.com/articles/consumerDrivenContracts.html
  • 24. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Consumer Driven Contracts 24 http://www.servicedesignpatterns.com/WebServiceEvolution/ConsumerDrivenContracts
  • 25. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Benefits of Consumer Driven Contracts ● Align service providers with the business goals of their consumer through the consumer driven contracts ● Provide insights into how a service is being used by its consumers ● Make evolving services easier by reducing the amount of co-ordination required to evolve interfaces ● Help in the configuration of continuous delivery pipelines ○ Spring Cloud Pipelines - https://cloud.spring.io/spring-cloud-pipelines/ 25
  • 26. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Generating Stubs & Tests From Contracts 26 Contract.make { description """ should return a list of a charges """ request { urlPath("/v1/charges") { queryParameters { parameter("limit", 25) } } method GET() } response { status 200 body($(consumer(file("charges.json")), producer(execute('assertResponse($it)')))) } } Spring Cloud Contract Maven Plugin Generates Wiremock stub definition stored in -stubs.jar Reads Stub jar files are published to a maven repo junit integration tests that execute the contract against the api
  • 27. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ @RunWith(SpringRunner.class) @SpringBootTest(classes = TheLegacyApp.class, properties = "api.url=http://localhost:8765", webEnvironment = NONE) @AutoConfigureStubRunner( ids = "com.example:the-legacy-app-stubs:+:stubs:8765" , workOffline = true ) public class CustomerWithStubRunnerTests { @Autowired CustomerRentalHistoryManager manager; @Test public void should_return_charge_collection() { Charges charges = manager.listAllCharges("foo"); BDDAssertions.then(charges.getCharges()) .hasSize(25); } } Using Stubs on the Client Side 27 Stub Runner Automatically runs a WireMock server and feeds it with stubs downloads the JAR with the stubs or uses classpath to find them
  • 28. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ ● Messaging (Spring Integration / Stream / Apache Camel) ● Integration with Spring Mock MVC ● Maven and Gradle plugins ● Scenarios ● Dynamic pieces ● Stub Runner Boot ● JUnit rule ● Spring Cloud integration ● Pact support What else 28
  • 29. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Messaging 29
  • 30. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ MockMvc 30
  • 31. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Maven & Gradle 31
  • 32. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Scenarios 32
  • 33. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Dynamic Pieces 33
  • 34. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Dynamic Pieces 34
  • 35. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ NodeJs app 35
  • 36. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Doesn’t work 36
  • 37. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Stub Runner Boot 37
  • 38. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Run Stub Runner Boot (java -jar) 38
  • 39. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Run Stub Runner Boot (Spring Cloud Cli) 39
  • 40. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Run Stub Runner Boot (Spring Cloud Cli) 40
  • 41. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ NodeJs works 41
  • 42. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Not a Spring app? JUnit Rule FTW! 42
  • 43. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Spring Cloud integration 43
  • 44. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Pact support 44
  • 45. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ 45
  • 46. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Learn More. Stay Connected. ▪ Read the docs http://cloud.spring.io/spring-cloud-contract/ ▪ Talk to us on Gitter https://gitter.im/spring-cloud/spring-cloud-contract Twitter: twitter.com/springcentral YouTube: spring.io/video LinkedIn: spring.io/linkedin Google Plus: spring.io/gplus 46
  • 47. Unless otherwise indicated, these slides are © 2013-2017 Pivotal Software, Inc. and licensed under a Creative Commons Attribution-NonCommercial license: http://creativecommons.org/licenses/by-nc/3.0/ Disclaimer Statement 47