SlideShare a Scribd company logo
Continuous Integration!
The Virtuous Cycle!
Ozan Seymen – Apigee Principal Architect
Diego Zuluaga – Apigee Principal Architect
The ultimate goal of CI is faster time to market
©2015 Apigee. All Rights Reserved.
Reality check: code that doesn’t go to production ...
©2015 Apigee. All Rights Reserved.
Why is it so hard?
Execute Functional Tests
Clean API Bundle Files and Folders
Copy Artifacts
Deactivate last revision
Import and deploy API bundle
Deploy and Test Documentation on CMS
Execute Unit Tests
Execute Performance Tests
Any other manual tasks…
Configure DEV, QA, STG, PROD, etc.
Package Artifacts (zip)
There must be a way to automate all this tedious work!
Let’s take a look at the tasks required:
©2015 Apigee. All Rights Reserved.
How do we solve this?
©2015 Apigee. All Rights Reserved.
A common reaction is...
©2015 Apigee. All Rights Reserved.
Fortunately, there’s a solution for that
©2015 Apigee. All Rights Reserved.
Who’s doing it, and Why?
•  Experience has taught us that developers and API teams prefer:
–  Short development iterations and fast feedback
–  Battle-tested frameworks embraced by open communities
–  Developer-friendly scripting languages
–  Frameworks that easily integrate with CI infrastructure
©2015 Apigee. All Rights Reserved.
Who’s doing it? and Why?
Customers: BBC WorldWide, Telefonica Chile, AT&T, T-Mobile, Everything
Everywhere, Autodesk, Intralinks, L.L.Bean, FX Networks, Morrisons, Equinix,
Cambia, Waitrose, Millicom (Tigo), GLH Hotels, and others.
Trivia…
•  How many weeks in average would take to pump code to prod? "
For API teams under Apigee Blueprint Program 
Apigee has enabled companies releasing code to prod on a daily basis instead of
every six months without losing any traffic!
©2015 Apigee. All Rights Reserved.
Enter the virtuous cycle
Newman
©2015 Apigee. All Rights Reserved.
Version Control
Version control: You need a winning branching model!
Gitflow
©2015 Apigee. All Rights Reserved.
Code Quality Analysis
Static code quality analysis
•  We have the functionality to attach custom code to any flow within Apigee. "
These can be written in Java, JS, Python and Node.js 
•  Recommendation is to run static code analysis for these custom code in Apigee proxy
•  Promote consistency and follow best practices for the language you are using
©2015 Apigee. All Rights Reserved.
Static code quality analysis
AUTOMATE!
•  Integrate with your editor
•  Hooks for source control
•  Grunt/gulp watcher
•  Continuous integration/build systems
©2015 Apigee. All Rights Reserved.
Static code quality analysis
LINT4J
©2015 Apigee. All Rights Reserved.
Static code quality analysis
©2015 Apigee. All Rights Reserved.
Static code quality analysis
©2015 Apigee. All Rights Reserved.
Static code quality analysis
©2015 Apigee. All Rights Reserved.
Static code quality analysis
©2015 Apigee. All Rights Reserved.
Deployment
Management API is part the secret sauce
All tools leverage, Apigee Management API
Get it here: 
https://github.com/apigee/apigee-management-api-
postman
Get it here: 
http://apigee.com/docs/management/apis 
©2015 Apigee. All Rights Reserved.
Deployment through build tools
Apigeetool
Apigee Grunt
Generator/Plugin
Coming soon 
Apigee Maven Plugin
©2015 Apigee. All Rights Reserved.
Deployment through build tools
•  Get Apigee Grunt plugin now! https://github.com/apigeecs/apigee-deploy-grunt-plugin 
•  Yeoman as proxy generator. Fork it and customize it to your needs!
©2015 Apigee. All Rights Reserved.
Deployment through build tools - Apigee Grunt
grunt.registerTask('buildApiBundle',	
  
	
  	
  	
  	
  'Build	
  zip	
  without	
  importing	
  to	
  Edge',	
  
	
  	
  	
  	
  	
  	
  	
  	
  ['apigeeGruntPluginBanner',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'prompt',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'clean',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'saveGitRevision',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'shell:apigee_npm_node_modules',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'mkdir',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'copy',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'xmlpoke',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'string-­‐replace',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'jshint',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'eslint',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'complexity',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'compressAlias',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
   	
  'istambul_coverage',]);	
  
	
  
//3.	
  import	
  revision	
  and	
  run	
  seamless	
  deployment	
  
	
  	
  grunt.registerTask('DEPLOY_IMPORT_BUMP_SEAMLESS_REVISION',	
  
	
  	
  	
  	
  [	
  'buildApiBundle',	
  
	
  	
  	
  	
  	
  	
  	
  	
  'getDeployedApiRevisions',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'apigee_import_api_bundle',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'installNpmRevisionAlias',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'deployApiRevisionAlias',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'executeTests',	
  	
  
	
  	
  	
  	
  	
  'shell:run_mocha_tests',	
  
	
  	
  	
  	
  	
  	
   	
  'shell:run_jmeter_tests',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
   	
   	
  'notify:ApiDeployed']);	
  
	
  
//	
  importKVM	
  at	
  Organization	
  and	
  Environment	
  level.	
  See	
  apigee_kvm	
  task	
  above	
  
grunt.registerTask('importKVMs',	
  
	
  	
  	
  	
  ['apigee_kvm:'	
  +	
  grunt.config.get("apigee_profiles")[grunt.option('env')].org	
  +	
  '-­‐'	
  +	
  grunt.option("env"),	
  
	
  	
  	
  	
  	
  	
  	
  	
  'apigee_kvm:'	
  +	
  grunt.config.get("apigee_profiles")[grunt.option('env')].org]);	
  

 ©2015 Apigee. All Rights Reserved.
Deployment through build tools
•  Get it now! https://github.com/apigee/apigee-deploy-maven-plugin 
<project	
  xmlns="http://maven.apache.org/POM/4.0.0"	
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-­‐instance"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0	
  http://maven.apache.org/xsd/maven-­‐4.0.0.xsd">	
  
	
  	
  	
  	
  <modelVersion>4.0.0</modelVersion>	
  
	
  	
  	
  	
  <groupId>apigee</groupId>	
  
	
  	
  	
  	
  <artifactId>parent-­‐pom</artifactId>	
  
	
  	
  	
  	
  <packaging>pom</packaging>	
  
	
  	
  	
  	
  <version>1.0</version>	
  
	
  	
  	
  	
  <build>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <plugins>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <plugin>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <artifactId>maven-­‐clean-­‐plugin</artifactId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <version>2.5</version>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </plugin>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <plugin>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <groupId>io.apigee.build-­‐tools.enterprise4g</groupId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <artifactId>apigee-­‐edge-­‐maven-­‐plugin</artifactId>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <version>1.0.0</version>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <executions>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <execution>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <id>configure-­‐bundle</id>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <phase>package</phase>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <goals>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <goal>configure</goal>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </goals>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </execution>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <execution>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <id>deploy-­‐bundle</id>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <phase>install</phase>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <goals>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <goal>deploy</goal>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </goals>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </execution>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </executions>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </plugin>	
  
	
  	
  	
  	
  	
  	
  	
  	
  </plugins>	
  
	
  
	
  
©2015 Apigee. All Rights Reserved.
Deployment through build tools
•  Get it now! https://github.com/apigee/apigee-deploy-maven-plugin 
<project	
  xmlns="http://maven.apache.org/POM/4.0.0"	
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-­‐instance"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0	
  http://maven.apache.org/xsd/maven-­‐4.0.0.xsd">	
  
	
  	
  	
  	
  <modelVersion>4.0.0</modelVersion>	
  
	
  	
  	
  	
  <groupId>apigee</groupId>	
  
	
  	
  	
  	
  <artifactId>parent-­‐pom</artifactId>	
  
	
  	
  	
  	
  <packaging>pom</packaging>	
  
	
  	
  	
  	
  <version>1.0</version>	
  
<!-­‐-­‐	
  This	
  is	
  where	
  you	
  add	
  the	
  environment	
  specific	
  properties	
  under	
  various	
  profile	
  names	
  -­‐-­‐>	
  
	
  <profiles>	
  
	
  	
  	
  	
  	
  	
  	
  	
  <profile>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <id>test</id>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <properties>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <org>testmyapi</org>	
  	
  <!-­‐-­‐	
  default	
  org,	
  replace	
  with	
  default	
  org	
  to	
  avoid	
  passing	
  parameter	
  e.g.	
  -­‐Dorg	
  testmyapi	
  -­‐-­‐>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <options>validate</options>	
  	
  <!-­‐-­‐	
  default	
  org,	
  replace	
  with	
  default	
  org	
  to	
  avoid	
  passing	
  parameter	
  e.g.	
  -­‐Dorg	
  testmyapi	
  -­‐-­‐>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <apigee.profile>test</apigee.profile>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <apigee.env>test</apigee.env>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <apigee.hosturl>https://api.enterprise.apigee.com</apigee.hosturl>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <apigee.apiversion>v1</apigee.apiversion>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <apigee.org>${org}</apigee.org>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <apigee.username>${username}</apigee.username>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <apigee.password>${password}</apigee.password>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <apigee.options>${options}</apigee.options>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <!-­‐-­‐apigee.override.delay>10</apigee.override.delay-­‐-­‐>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  <!-­‐-­‐apigee.delay>1000</apigee.delay-­‐-­‐>	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  </properties>	
  
	
  	
  	
  	
  	
  	
  	
  	
  </profile>	
  
	
  	
  	
  	
  </profiles>	
  
</project>	
  
	
  
©2015 Apigee. All Rights Reserved.
Integration Testing
Integration testing
“Most obvious important type of testing for APIs”
Mobile
Point of Sale
Partner
Web
API
©2015 Apigee. All Rights Reserved.
Integration testing – what to test?
User/App
 Apigee
 Target Systems
3rd Party
©2015 Apigee. All Rights Reserved.
Integration testing – what to test?
Test Runner
 Apigee
 Target Systems
3rd Party
Behavior
Data
1
 2
3
variables
©2015 Apigee. All Rights Reserved.
Integration testing – consistent data
PAIN!!!
•  Can we mock responses at specific points?
•  Can we do string matching/regex in tests?
•  Can we recreate data in target systems?
DATA
©2015 Apigee. All Rights Reserved.
Integration testing – behavior
•  Asserting functional is easier than consistent data!!
–  Normal API operations
–  OAuth handshake (esp. authorization code grant)
•  What about unexpected error conditions?
–  Timeouts
–  500 Server unavailable
•  What about non-functional?
–  Caching
–  Traffic management (quota, spike)
–  Security (JSON/XML threat protection)
©2015 Apigee. All Rights Reserved.
Integration testing – From UI?
“WE DON’T INTEGRATION TEST APIs FROM CLIENT APPs UI”
•  This only tests the application—not APIs
•  Can’t sufficiently verify all functional paths for the entire API resource space
•  Test needs to change when UI changes; which is much more frequent than API changes
•  API team needs to be responsible for API testing
•  There are a lot of API clients
©2015 Apigee. All Rights Reserved.
Integration testing – disadvantages
•  Deployment to Apigee is required. Other option – OPDK if you have access to it but need
to keep configurations in sync. 
•  It will be “SLOW” – especially compared to unit testing
–  deployment time, network time, data sizes
©2015 Apigee. All Rights Reserved.
Integration testing – tooling
APICLI
YADDA
©2015 Apigee. All Rights Reserved.
Unit Testing
API proxy testing
Do you think it is possible to test an Apigee proxy 
fully with integration testing?

No…
©2015 Apigee. All Rights Reserved.
API proxy testing – integration test enough?
Test Runner
 Apigee
 Target Systems
3rd Party
Service Callouts?
Async?
©2015 Apigee. All Rights Reserved.
API proxy testing – integration test enough?
Isolation/Coverage
©2015 Apigee. All Rights Reserved.
Unit testing – other benefits 
•  Code can be tested locally without deployment to Apigee first
•  Can create hooks to enforce testing during commit
•  Much faster than integration testing
©2015 Apigee. All Rights Reserved.
Unit testing – boundary principle
Test within your boundaries – don’t test libraries you
don’t control
©2015 Apigee. All Rights Reserved.
Unit testing – types of policies
©2015 Apigee. All Rights Reserved.
Unit testing – tooling
©2015 Apigee. All Rights Reserved.
Integration testing – end-to-end testing session
Oct 14 – 11:40AM

END TO END TESTING: BUG SQUASHING
FOR API DEVELOPERS
©2015 Apigee. All Rights Reserved.
Documentation
Programmable documentation with SmartDocs
API Modeling
Describe an API structure
SmartDocs
Generate interactive documentation
API-based
Integrate with any portal / CMS
Apigee Edge Developer Services
gh-pages
Other CMS
©2015 Apigee. All Rights Reserved.
Programmable API documentation with SmartDocs
Get it now! https://github.com/dzuluaga/apigee-tutorials/tree/master/apiproxies/sample-api-smartdocs
©2015 Apigee. All Rights Reserved.
In Conclusion
•  CI doesn’t happen in a vacuum. So, enable the whole organization.
•  Don’t reinvent the wheel. Leverage frameworks and community.
•  Don’t let tools get in your way. They must be easy to adopt and maintain.
•  It’s not a silver bullet, but if done right, it can make a huge difference.
•  It won’t happen overnight. Master it with practice.
•  Keep improving it.
©2015 Apigee. All Rights Reserved.
Questions?

More Related Content

What's hot

Why your APIs should fly first class
Why your APIs should fly first classWhy your APIs should fly first class
Why your APIs should fly first class
LibbySchulze
 
Meet the Forge Runtime
Meet the Forge RuntimeMeet the Forge Runtime
Meet the Forge Runtime
Atlassian
 
Declaring Server App Components in Pure Java
Declaring Server App Components in Pure JavaDeclaring Server App Components in Pure Java
Declaring Server App Components in Pure Java
Atlassian
 
Building Faster With Your Team's UI Kit
Building Faster With Your Team's UI KitBuilding Faster With Your Team's UI Kit
Building Faster With Your Team's UI Kit
Atlassian
 
Designing APIs with OpenAPI Spec
Designing APIs with OpenAPI SpecDesigning APIs with OpenAPI Spec
Designing APIs with OpenAPI Spec
Adam Paxton
 
Mule ESB- Data Validation- Best Practices
Mule ESB-  Data Validation- Best PracticesMule ESB-  Data Validation- Best Practices
Mule ESB- Data Validation- Best Practices
Coforge (Erstwhile WHISHWORKS)
 
A Starters Guide to Building APIs with Javascript
A Starters Guide to Building APIs with JavascriptA Starters Guide to Building APIs with Javascript
A Starters Guide to Building APIs with Javascript
All Things Open
 
API 101 - Understanding APIs
API 101 - Understanding APIsAPI 101 - Understanding APIs
API 101 - Understanding APIs
3scale
 
Swagger for-your-api
Swagger for-your-apiSwagger for-your-api
Swagger for-your-api
Tony Tam
 
Introducing Swagger
Introducing SwaggerIntroducing Swagger
Introducing Swagger
Tony Tam
 
OpenAPI Spec at Google (Open API Initiative Meetup on 2016-09-15)
OpenAPI Spec at Google (Open API Initiative Meetup on 2016-09-15)OpenAPI Spec at Google (Open API Initiative Meetup on 2016-09-15)
OpenAPI Spec at Google (Open API Initiative Meetup on 2016-09-15)
Open API Initiative (OAI)
 
Swagger in the API Lifecycle
Swagger in the API LifecycleSwagger in the API Lifecycle
Swagger in the API Lifecycle
Ole Lensmar
 
DevOps Architecture Design
DevOps Architecture DesignDevOps Architecture Design
DevOps Architecture Design
Agile Testing Alliance
 
Implement Web API with Swagger
Implement Web API with SwaggerImplement Web API with Swagger
Implement Web API with Swagger
Jiang Wu
 
Rest API with Swagger and NodeJS
Rest API with Swagger and NodeJSRest API with Swagger and NodeJS
Rest API with Swagger and NodeJS
Luigi Saetta
 
Operational API design anti-patterns (Jason Harmon)
Operational API design anti-patterns (Jason Harmon)Operational API design anti-patterns (Jason Harmon)
Operational API design anti-patterns (Jason Harmon)
Nordic APIs
 
Streamlining API with Swagger.io
Streamlining API with Swagger.ioStreamlining API with Swagger.io
Streamlining API with Swagger.io
Victor Augusteo
 

What's hot (17)

Why your APIs should fly first class
Why your APIs should fly first classWhy your APIs should fly first class
Why your APIs should fly first class
 
Meet the Forge Runtime
Meet the Forge RuntimeMeet the Forge Runtime
Meet the Forge Runtime
 
Declaring Server App Components in Pure Java
Declaring Server App Components in Pure JavaDeclaring Server App Components in Pure Java
Declaring Server App Components in Pure Java
 
Building Faster With Your Team's UI Kit
Building Faster With Your Team's UI KitBuilding Faster With Your Team's UI Kit
Building Faster With Your Team's UI Kit
 
Designing APIs with OpenAPI Spec
Designing APIs with OpenAPI SpecDesigning APIs with OpenAPI Spec
Designing APIs with OpenAPI Spec
 
Mule ESB- Data Validation- Best Practices
Mule ESB-  Data Validation- Best PracticesMule ESB-  Data Validation- Best Practices
Mule ESB- Data Validation- Best Practices
 
A Starters Guide to Building APIs with Javascript
A Starters Guide to Building APIs with JavascriptA Starters Guide to Building APIs with Javascript
A Starters Guide to Building APIs with Javascript
 
API 101 - Understanding APIs
API 101 - Understanding APIsAPI 101 - Understanding APIs
API 101 - Understanding APIs
 
Swagger for-your-api
Swagger for-your-apiSwagger for-your-api
Swagger for-your-api
 
Introducing Swagger
Introducing SwaggerIntroducing Swagger
Introducing Swagger
 
OpenAPI Spec at Google (Open API Initiative Meetup on 2016-09-15)
OpenAPI Spec at Google (Open API Initiative Meetup on 2016-09-15)OpenAPI Spec at Google (Open API Initiative Meetup on 2016-09-15)
OpenAPI Spec at Google (Open API Initiative Meetup on 2016-09-15)
 
Swagger in the API Lifecycle
Swagger in the API LifecycleSwagger in the API Lifecycle
Swagger in the API Lifecycle
 
DevOps Architecture Design
DevOps Architecture DesignDevOps Architecture Design
DevOps Architecture Design
 
Implement Web API with Swagger
Implement Web API with SwaggerImplement Web API with Swagger
Implement Web API with Swagger
 
Rest API with Swagger and NodeJS
Rest API with Swagger and NodeJSRest API with Swagger and NodeJS
Rest API with Swagger and NodeJS
 
Operational API design anti-patterns (Jason Harmon)
Operational API design anti-patterns (Jason Harmon)Operational API design anti-patterns (Jason Harmon)
Operational API design anti-patterns (Jason Harmon)
 
Streamlining API with Swagger.io
Streamlining API with Swagger.ioStreamlining API with Swagger.io
Streamlining API with Swagger.io
 

Similar to I Love APIs 2015: Continuous Integration the Virtuous Cycle

Gradle - time for a new build
Gradle - time for a new buildGradle - time for a new build
Gradle - time for a new buildIgor Khotin
 
From Dev to DevOps - Apache Barcamp Spain 2011
From Dev to DevOps - Apache Barcamp Spain 2011From Dev to DevOps - Apache Barcamp Spain 2011
From Dev to DevOps - Apache Barcamp Spain 2011
Carlos Sanchez
 
Angular Intermediate
Angular IntermediateAngular Intermediate
Angular Intermediate
LinkMe Srl
 
Azure from scratch part 4
Azure from scratch part 4Azure from scratch part 4
Azure from scratch part 4
Girish Kalamati
 
Symfony tips and tricks
Symfony tips and tricksSymfony tips and tricks
Symfony tips and tricks
Javier Eguiluz
 
Pyramid Deployment and Maintenance
Pyramid Deployment and MaintenancePyramid Deployment and Maintenance
Pyramid Deployment and Maintenance
Jazkarta, Inc.
 
Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websites
Lindsay Holmwood
 
Using Maven to build Java & Android program
Using Maven to build Java & Android programUsing Maven to build Java & Android program
Using Maven to build Java & Android programMu Chun Wang
 
Let's play with adf 3.0
Let's play with adf 3.0Let's play with adf 3.0
Let's play with adf 3.0
Eugenio Romano
 
Gradle - time for another build
Gradle - time for another buildGradle - time for another build
Gradle - time for another build
Igor Khotin
 
A re introduction to webpack - reactfoo - mumbai
A re introduction to webpack - reactfoo - mumbaiA re introduction to webpack - reactfoo - mumbai
A re introduction to webpack - reactfoo - mumbai
Praveen Puglia
 
TLS303 How to Deploy Python Applications on AWS Elastic Beanstalk - AWS re:In...
TLS303 How to Deploy Python Applications on AWS Elastic Beanstalk - AWS re:In...TLS303 How to Deploy Python Applications on AWS Elastic Beanstalk - AWS re:In...
TLS303 How to Deploy Python Applications on AWS Elastic Beanstalk - AWS re:In...Amazon Web Services
 
CQ Maven Methods
CQ Maven MethodsCQ Maven Methods
CQ Maven Methods
connectwebex
 
CQCON CQ Maven Methods
CQCON CQ Maven MethodsCQCON CQ Maven Methods
CQCON CQ Maven Methods
Andrew Savory
 
Jazoon12 355 aleksandra_gavrilovska-1
Jazoon12 355 aleksandra_gavrilovska-1Jazoon12 355 aleksandra_gavrilovska-1
Jazoon12 355 aleksandra_gavrilovska-1Netcetera
 
Towards Continuous Deployment with Django
Towards Continuous Deployment with DjangoTowards Continuous Deployment with Django
Towards Continuous Deployment with Django
Roger Barnes
 
React django
React djangoReact django
React django
Heber Silva
 
StHack 2014 - Mario "@0x6D6172696F" Heiderich - JSMVCOMFG
StHack 2014 - Mario "@0x6D6172696F" Heiderich - JSMVCOMFGStHack 2014 - Mario "@0x6D6172696F" Heiderich - JSMVCOMFG
StHack 2014 - Mario "@0x6D6172696F" Heiderich - JSMVCOMFG
StHack
 

Similar to I Love APIs 2015: Continuous Integration the Virtuous Cycle (20)

Gradle - time for a new build
Gradle - time for a new buildGradle - time for a new build
Gradle - time for a new build
 
From Dev to DevOps - Apache Barcamp Spain 2011
From Dev to DevOps - Apache Barcamp Spain 2011From Dev to DevOps - Apache Barcamp Spain 2011
From Dev to DevOps - Apache Barcamp Spain 2011
 
Angular Intermediate
Angular IntermediateAngular Intermediate
Angular Intermediate
 
Azure from scratch part 4
Azure from scratch part 4Azure from scratch part 4
Azure from scratch part 4
 
Symfony tips and tricks
Symfony tips and tricksSymfony tips and tricks
Symfony tips and tricks
 
Pyramid Deployment and Maintenance
Pyramid Deployment and MaintenancePyramid Deployment and Maintenance
Pyramid Deployment and Maintenance
 
Burn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websitesBurn down the silos! Helping dev and ops gel on high availability websites
Burn down the silos! Helping dev and ops gel on high availability websites
 
Using Maven to build Java & Android program
Using Maven to build Java & Android programUsing Maven to build Java & Android program
Using Maven to build Java & Android program
 
Let's play with adf 3.0
Let's play with adf 3.0Let's play with adf 3.0
Let's play with adf 3.0
 
Using Maven2
Using Maven2Using Maven2
Using Maven2
 
Gradle - time for another build
Gradle - time for another buildGradle - time for another build
Gradle - time for another build
 
A re introduction to webpack - reactfoo - mumbai
A re introduction to webpack - reactfoo - mumbaiA re introduction to webpack - reactfoo - mumbai
A re introduction to webpack - reactfoo - mumbai
 
TLS303 How to Deploy Python Applications on AWS Elastic Beanstalk - AWS re:In...
TLS303 How to Deploy Python Applications on AWS Elastic Beanstalk - AWS re:In...TLS303 How to Deploy Python Applications on AWS Elastic Beanstalk - AWS re:In...
TLS303 How to Deploy Python Applications on AWS Elastic Beanstalk - AWS re:In...
 
CQ Maven Methods
CQ Maven MethodsCQ Maven Methods
CQ Maven Methods
 
CQCON CQ Maven Methods
CQCON CQ Maven MethodsCQCON CQ Maven Methods
CQCON CQ Maven Methods
 
Jazoon12 355 aleksandra_gavrilovska-1
Jazoon12 355 aleksandra_gavrilovska-1Jazoon12 355 aleksandra_gavrilovska-1
Jazoon12 355 aleksandra_gavrilovska-1
 
Towards Continuous Deployment with Django
Towards Continuous Deployment with DjangoTowards Continuous Deployment with Django
Towards Continuous Deployment with Django
 
React django
React djangoReact django
React django
 
StHack 2014 - Mario "@0x6D6172696F" Heiderich - JSMVCOMFG
StHack 2014 - Mario "@0x6D6172696F" Heiderich - JSMVCOMFGStHack 2014 - Mario "@0x6D6172696F" Heiderich - JSMVCOMFG
StHack 2014 - Mario "@0x6D6172696F" Heiderich - JSMVCOMFG
 
Pyramid deployment
Pyramid deploymentPyramid deployment
Pyramid deployment
 

More from Apigee | Google Cloud

How Secure Are Your APIs?
How Secure Are Your APIs?How Secure Are Your APIs?
How Secure Are Your APIs?
Apigee | Google Cloud
 
Magazine Luiza at a glance (1)
Magazine Luiza at a glance (1)Magazine Luiza at a glance (1)
Magazine Luiza at a glance (1)
Apigee | Google Cloud
 
Monetization: Unlock More Value from Your APIs
Monetization: Unlock More Value from Your APIs Monetization: Unlock More Value from Your APIs
Monetization: Unlock More Value from Your APIs
Apigee | Google Cloud
 
Apigee Demo: API Platform Overview
Apigee Demo: API Platform OverviewApigee Demo: API Platform Overview
Apigee Demo: API Platform Overview
Apigee | Google Cloud
 
Ticketmaster at a glance
Ticketmaster at a glanceTicketmaster at a glance
Ticketmaster at a glance
Apigee | Google Cloud
 
AccuWeather: Recasting API Experiences in a Developer-First World
AccuWeather: Recasting API Experiences in a Developer-First WorldAccuWeather: Recasting API Experiences in a Developer-First World
AccuWeather: Recasting API Experiences in a Developer-First World
Apigee | Google Cloud
 
Which Application Modernization Pattern Is Right For You?
Which Application Modernization Pattern Is Right For You?Which Application Modernization Pattern Is Right For You?
Which Application Modernization Pattern Is Right For You?
Apigee | Google Cloud
 
Apigee Product Roadmap Part 2
Apigee Product Roadmap Part 2Apigee Product Roadmap Part 2
Apigee Product Roadmap Part 2
Apigee | Google Cloud
 
The Four Transformative Forces of the API Management Market
The Four Transformative Forces of the API Management MarketThe Four Transformative Forces of the API Management Market
The Four Transformative Forces of the API Management Market
Apigee | Google Cloud
 
Walgreens at a glance
Walgreens at a glanceWalgreens at a glance
Walgreens at a glance
Apigee | Google Cloud
 
Apigee Edge: Intro to Microgateway
Apigee Edge: Intro to MicrogatewayApigee Edge: Intro to Microgateway
Apigee Edge: Intro to Microgateway
Apigee | Google Cloud
 
Managing the Complexity of Microservices Deployments
Managing the Complexity of Microservices DeploymentsManaging the Complexity of Microservices Deployments
Managing the Complexity of Microservices Deployments
Apigee | Google Cloud
 
Pitney Bowes at a glance
Pitney Bowes at a glancePitney Bowes at a glance
Pitney Bowes at a glance
Apigee | Google Cloud
 
Microservices Done Right: Key Ingredients for Microservices Success
Microservices Done Right: Key Ingredients for Microservices SuccessMicroservices Done Right: Key Ingredients for Microservices Success
Microservices Done Right: Key Ingredients for Microservices Success
Apigee | Google Cloud
 
Adapt or Die: Opening Keynote with Chet Kapoor
Adapt or Die: Opening Keynote with Chet KapoorAdapt or Die: Opening Keynote with Chet Kapoor
Adapt or Die: Opening Keynote with Chet Kapoor
Apigee | Google Cloud
 
Adapt or Die: Keynote with Greg Brail
Adapt or Die: Keynote with Greg BrailAdapt or Die: Keynote with Greg Brail
Adapt or Die: Keynote with Greg Brail
Apigee | Google Cloud
 
Adapt or Die: Keynote with Anant Jhingran
Adapt or Die: Keynote with Anant JhingranAdapt or Die: Keynote with Anant Jhingran
Adapt or Die: Keynote with Anant Jhingran
Apigee | Google Cloud
 
London Adapt or Die: Opening Keynot
London Adapt or Die: Opening KeynotLondon Adapt or Die: Opening Keynot
London Adapt or Die: Opening Keynot
Apigee | Google Cloud
 
London Adapt or Die: Lunch keynote
London Adapt or Die: Lunch keynoteLondon Adapt or Die: Lunch keynote
London Adapt or Die: Lunch keynote
Apigee | Google Cloud
 
London Adapt or Die: Closing Keynote — Adapt Now!
London Adapt or Die: Closing Keynote — Adapt Now!London Adapt or Die: Closing Keynote — Adapt Now!
London Adapt or Die: Closing Keynote — Adapt Now!
Apigee | Google Cloud
 

More from Apigee | Google Cloud (20)

How Secure Are Your APIs?
How Secure Are Your APIs?How Secure Are Your APIs?
How Secure Are Your APIs?
 
Magazine Luiza at a glance (1)
Magazine Luiza at a glance (1)Magazine Luiza at a glance (1)
Magazine Luiza at a glance (1)
 
Monetization: Unlock More Value from Your APIs
Monetization: Unlock More Value from Your APIs Monetization: Unlock More Value from Your APIs
Monetization: Unlock More Value from Your APIs
 
Apigee Demo: API Platform Overview
Apigee Demo: API Platform OverviewApigee Demo: API Platform Overview
Apigee Demo: API Platform Overview
 
Ticketmaster at a glance
Ticketmaster at a glanceTicketmaster at a glance
Ticketmaster at a glance
 
AccuWeather: Recasting API Experiences in a Developer-First World
AccuWeather: Recasting API Experiences in a Developer-First WorldAccuWeather: Recasting API Experiences in a Developer-First World
AccuWeather: Recasting API Experiences in a Developer-First World
 
Which Application Modernization Pattern Is Right For You?
Which Application Modernization Pattern Is Right For You?Which Application Modernization Pattern Is Right For You?
Which Application Modernization Pattern Is Right For You?
 
Apigee Product Roadmap Part 2
Apigee Product Roadmap Part 2Apigee Product Roadmap Part 2
Apigee Product Roadmap Part 2
 
The Four Transformative Forces of the API Management Market
The Four Transformative Forces of the API Management MarketThe Four Transformative Forces of the API Management Market
The Four Transformative Forces of the API Management Market
 
Walgreens at a glance
Walgreens at a glanceWalgreens at a glance
Walgreens at a glance
 
Apigee Edge: Intro to Microgateway
Apigee Edge: Intro to MicrogatewayApigee Edge: Intro to Microgateway
Apigee Edge: Intro to Microgateway
 
Managing the Complexity of Microservices Deployments
Managing the Complexity of Microservices DeploymentsManaging the Complexity of Microservices Deployments
Managing the Complexity of Microservices Deployments
 
Pitney Bowes at a glance
Pitney Bowes at a glancePitney Bowes at a glance
Pitney Bowes at a glance
 
Microservices Done Right: Key Ingredients for Microservices Success
Microservices Done Right: Key Ingredients for Microservices SuccessMicroservices Done Right: Key Ingredients for Microservices Success
Microservices Done Right: Key Ingredients for Microservices Success
 
Adapt or Die: Opening Keynote with Chet Kapoor
Adapt or Die: Opening Keynote with Chet KapoorAdapt or Die: Opening Keynote with Chet Kapoor
Adapt or Die: Opening Keynote with Chet Kapoor
 
Adapt or Die: Keynote with Greg Brail
Adapt or Die: Keynote with Greg BrailAdapt or Die: Keynote with Greg Brail
Adapt or Die: Keynote with Greg Brail
 
Adapt or Die: Keynote with Anant Jhingran
Adapt or Die: Keynote with Anant JhingranAdapt or Die: Keynote with Anant Jhingran
Adapt or Die: Keynote with Anant Jhingran
 
London Adapt or Die: Opening Keynot
London Adapt or Die: Opening KeynotLondon Adapt or Die: Opening Keynot
London Adapt or Die: Opening Keynot
 
London Adapt or Die: Lunch keynote
London Adapt or Die: Lunch keynoteLondon Adapt or Die: Lunch keynote
London Adapt or Die: Lunch keynote
 
London Adapt or Die: Closing Keynote — Adapt Now!
London Adapt or Die: Closing Keynote — Adapt Now!London Adapt or Die: Closing Keynote — Adapt Now!
London Adapt or Die: Closing Keynote — Adapt Now!
 

Recently uploaded

Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
UiPathCommunity
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
nkrafacyberclub
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Nexer Digital
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
James Anderson
 
Assure Contact Center Experiences for Your Customers With ThousandEyes
Assure Contact Center Experiences for Your Customers With ThousandEyesAssure Contact Center Experiences for Your Customers With ThousandEyes
Assure Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
The Metaverse and AI: how can decision-makers harness the Metaverse for their...
The Metaverse and AI: how can decision-makers harness the Metaverse for their...The Metaverse and AI: how can decision-makers harness the Metaverse for their...
The Metaverse and AI: how can decision-makers harness the Metaverse for their...
Jen Stirrup
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
Laura Byrne
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
91mobiles
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
Ana-Maria Mihalceanu
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
Ralf Eggert
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
Alex Pruden
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
OnBoard
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 

Recently uploaded (20)

Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?Elizabeth Buie - Older adults: Are we really designing for our future selves?
Elizabeth Buie - Older adults: Are we really designing for our future selves?
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
Alt. GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using ...
 
Assure Contact Center Experiences for Your Customers With ThousandEyes
Assure Contact Center Experiences for Your Customers With ThousandEyesAssure Contact Center Experiences for Your Customers With ThousandEyes
Assure Contact Center Experiences for Your Customers With ThousandEyes
 
The Metaverse and AI: how can decision-makers harness the Metaverse for their...
The Metaverse and AI: how can decision-makers harness the Metaverse for their...The Metaverse and AI: how can decision-makers harness the Metaverse for their...
The Metaverse and AI: how can decision-makers harness the Metaverse for their...
 
The Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and SalesThe Art of the Pitch: WordPress Relationships and Sales
The Art of the Pitch: WordPress Relationships and Sales
 
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdfSmart TV Buyer Insights Survey 2024 by 91mobiles.pdf
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf
 
Monitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR EventsMonitoring Java Application Security with JDK Tools and JFR Events
Monitoring Java Application Security with JDK Tools and JFR Events
 
PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)PHP Frameworks: I want to break free (IPC Berlin 2024)
PHP Frameworks: I want to break free (IPC Berlin 2024)
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
 
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdfFIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
FIDO Alliance Osaka Seminar: FIDO Security Aspects.pdf
 
Leading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdfLeading Change strategies and insights for effective change management pdf 1.pdf
Leading Change strategies and insights for effective change management pdf 1.pdf
 
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdfFIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
FIDO Alliance Osaka Seminar: Passkeys and the Road Ahead.pdf
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 

I Love APIs 2015: Continuous Integration the Virtuous Cycle

  • 1. Continuous Integration! The Virtuous Cycle! Ozan Seymen – Apigee Principal Architect Diego Zuluaga – Apigee Principal Architect
  • 2. The ultimate goal of CI is faster time to market ©2015 Apigee. All Rights Reserved.
  • 3. Reality check: code that doesn’t go to production ... ©2015 Apigee. All Rights Reserved.
  • 4. Why is it so hard? Execute Functional Tests Clean API Bundle Files and Folders Copy Artifacts Deactivate last revision Import and deploy API bundle Deploy and Test Documentation on CMS Execute Unit Tests Execute Performance Tests Any other manual tasks… Configure DEV, QA, STG, PROD, etc. Package Artifacts (zip) There must be a way to automate all this tedious work! Let’s take a look at the tasks required: ©2015 Apigee. All Rights Reserved.
  • 5. How do we solve this? ©2015 Apigee. All Rights Reserved.
  • 6. A common reaction is... ©2015 Apigee. All Rights Reserved.
  • 7. Fortunately, there’s a solution for that ©2015 Apigee. All Rights Reserved.
  • 8. Who’s doing it, and Why? •  Experience has taught us that developers and API teams prefer: –  Short development iterations and fast feedback –  Battle-tested frameworks embraced by open communities –  Developer-friendly scripting languages –  Frameworks that easily integrate with CI infrastructure ©2015 Apigee. All Rights Reserved.
  • 9. Who’s doing it? and Why? Customers: BBC WorldWide, Telefonica Chile, AT&T, T-Mobile, Everything Everywhere, Autodesk, Intralinks, L.L.Bean, FX Networks, Morrisons, Equinix, Cambia, Waitrose, Millicom (Tigo), GLH Hotels, and others. Trivia… •  How many weeks in average would take to pump code to prod? " For API teams under Apigee Blueprint Program Apigee has enabled companies releasing code to prod on a daily basis instead of every six months without losing any traffic! ©2015 Apigee. All Rights Reserved.
  • 10. Enter the virtuous cycle Newman ©2015 Apigee. All Rights Reserved.
  • 12. Version control: You need a winning branching model! Gitflow ©2015 Apigee. All Rights Reserved.
  • 14. Static code quality analysis •  We have the functionality to attach custom code to any flow within Apigee. " These can be written in Java, JS, Python and Node.js •  Recommendation is to run static code analysis for these custom code in Apigee proxy •  Promote consistency and follow best practices for the language you are using ©2015 Apigee. All Rights Reserved.
  • 15. Static code quality analysis AUTOMATE! •  Integrate with your editor •  Hooks for source control •  Grunt/gulp watcher •  Continuous integration/build systems ©2015 Apigee. All Rights Reserved.
  • 16. Static code quality analysis LINT4J ©2015 Apigee. All Rights Reserved.
  • 17. Static code quality analysis ©2015 Apigee. All Rights Reserved.
  • 18. Static code quality analysis ©2015 Apigee. All Rights Reserved.
  • 19. Static code quality analysis ©2015 Apigee. All Rights Reserved.
  • 20. Static code quality analysis ©2015 Apigee. All Rights Reserved.
  • 22. Management API is part the secret sauce All tools leverage, Apigee Management API Get it here: https://github.com/apigee/apigee-management-api- postman Get it here: http://apigee.com/docs/management/apis ©2015 Apigee. All Rights Reserved.
  • 23. Deployment through build tools Apigeetool Apigee Grunt Generator/Plugin Coming soon Apigee Maven Plugin ©2015 Apigee. All Rights Reserved.
  • 24. Deployment through build tools •  Get Apigee Grunt plugin now! https://github.com/apigeecs/apigee-deploy-grunt-plugin •  Yeoman as proxy generator. Fork it and customize it to your needs! ©2015 Apigee. All Rights Reserved.
  • 25. Deployment through build tools - Apigee Grunt grunt.registerTask('buildApiBundle',          'Build  zip  without  importing  to  Edge',                  ['apigeeGruntPluginBanner',                          'prompt',                                  'clean',                                          'saveGitRevision',                                                  'shell:apigee_npm_node_modules',                                                          'mkdir',                                                                  'copy',                                                                          'xmlpoke',                                                                                  'string-­‐replace',                                                                                          'jshint',                                                                                                  'eslint',                                                                                                          'complexity',                                                                                                                  'compressAlias',                                                                                                                      'istambul_coverage',]);     //3.  import  revision  and  run  seamless  deployment      grunt.registerTask('DEPLOY_IMPORT_BUMP_SEAMLESS_REVISION',          [  'buildApiBundle',                  'getDeployedApiRevisions',                          'apigee_import_api_bundle',                                  'installNpmRevisionAlias',                                          'deployApiRevisionAlias',                                                  'executeTests',              'shell:run_mocha_tests',                'shell:run_jmeter_tests',                          'notify:ApiDeployed']);     //  importKVM  at  Organization  and  Environment  level.  See  apigee_kvm  task  above   grunt.registerTask('importKVMs',          ['apigee_kvm:'  +  grunt.config.get("apigee_profiles")[grunt.option('env')].org  +  '-­‐'  +  grunt.option("env"),                  'apigee_kvm:'  +  grunt.config.get("apigee_profiles")[grunt.option('env')].org]);   ©2015 Apigee. All Rights Reserved.
  • 26. Deployment through build tools •  Get it now! https://github.com/apigee/apigee-deploy-maven-plugin <project  xmlns="http://maven.apache.org/POM/4.0.0"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-­‐instance"                    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  http://maven.apache.org/xsd/maven-­‐4.0.0.xsd">          <modelVersion>4.0.0</modelVersion>          <groupId>apigee</groupId>          <artifactId>parent-­‐pom</artifactId>          <packaging>pom</packaging>          <version>1.0</version>          <build>                  <plugins>                          <plugin>                                  <artifactId>maven-­‐clean-­‐plugin</artifactId>                                  <version>2.5</version>                          </plugin>                          <plugin>                                  <groupId>io.apigee.build-­‐tools.enterprise4g</groupId>                                  <artifactId>apigee-­‐edge-­‐maven-­‐plugin</artifactId>                                  <version>1.0.0</version>                                  <executions>                                          <execution>                                                  <id>configure-­‐bundle</id>                                                  <phase>package</phase>                                                  <goals>                                                          <goal>configure</goal>                                                  </goals>                                          </execution>                                          <execution>                                                  <id>deploy-­‐bundle</id>                                                  <phase>install</phase>                                                  <goals>                                                          <goal>deploy</goal>                                                  </goals>                                          </execution>                                  </executions>                          </plugin>                  </plugins>       ©2015 Apigee. All Rights Reserved.
  • 27. Deployment through build tools •  Get it now! https://github.com/apigee/apigee-deploy-maven-plugin <project  xmlns="http://maven.apache.org/POM/4.0.0"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-­‐instance"                    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  http://maven.apache.org/xsd/maven-­‐4.0.0.xsd">          <modelVersion>4.0.0</modelVersion>          <groupId>apigee</groupId>          <artifactId>parent-­‐pom</artifactId>          <packaging>pom</packaging>          <version>1.0</version>   <!-­‐-­‐  This  is  where  you  add  the  environment  specific  properties  under  various  profile  names  -­‐-­‐>    <profiles>                  <profile>                          <id>test</id>                          <properties>                                  <org>testmyapi</org>    <!-­‐-­‐  default  org,  replace  with  default  org  to  avoid  passing  parameter  e.g.  -­‐Dorg  testmyapi  -­‐-­‐>                                  <options>validate</options>    <!-­‐-­‐  default  org,  replace  with  default  org  to  avoid  passing  parameter  e.g.  -­‐Dorg  testmyapi  -­‐-­‐>                                  <apigee.profile>test</apigee.profile>                                  <apigee.env>test</apigee.env>                                  <apigee.hosturl>https://api.enterprise.apigee.com</apigee.hosturl>                                  <apigee.apiversion>v1</apigee.apiversion>                                  <apigee.org>${org}</apigee.org>                                  <apigee.username>${username}</apigee.username>                                  <apigee.password>${password}</apigee.password>                                  <apigee.options>${options}</apigee.options>                                  <!-­‐-­‐apigee.override.delay>10</apigee.override.delay-­‐-­‐>                                  <!-­‐-­‐apigee.delay>1000</apigee.delay-­‐-­‐>                          </properties>                  </profile>          </profiles>   </project>     ©2015 Apigee. All Rights Reserved.
  • 29. Integration testing “Most obvious important type of testing for APIs” Mobile Point of Sale Partner Web API ©2015 Apigee. All Rights Reserved.
  • 30. Integration testing – what to test? User/App Apigee Target Systems 3rd Party ©2015 Apigee. All Rights Reserved.
  • 31. Integration testing – what to test? Test Runner Apigee Target Systems 3rd Party Behavior Data 1 2 3 variables ©2015 Apigee. All Rights Reserved.
  • 32. Integration testing – consistent data PAIN!!! •  Can we mock responses at specific points? •  Can we do string matching/regex in tests? •  Can we recreate data in target systems? DATA ©2015 Apigee. All Rights Reserved.
  • 33. Integration testing – behavior •  Asserting functional is easier than consistent data!! –  Normal API operations –  OAuth handshake (esp. authorization code grant) •  What about unexpected error conditions? –  Timeouts –  500 Server unavailable •  What about non-functional? –  Caching –  Traffic management (quota, spike) –  Security (JSON/XML threat protection) ©2015 Apigee. All Rights Reserved.
  • 34. Integration testing – From UI? “WE DON’T INTEGRATION TEST APIs FROM CLIENT APPs UI” •  This only tests the application—not APIs •  Can’t sufficiently verify all functional paths for the entire API resource space •  Test needs to change when UI changes; which is much more frequent than API changes •  API team needs to be responsible for API testing •  There are a lot of API clients ©2015 Apigee. All Rights Reserved.
  • 35. Integration testing – disadvantages •  Deployment to Apigee is required. Other option – OPDK if you have access to it but need to keep configurations in sync. •  It will be “SLOW” – especially compared to unit testing –  deployment time, network time, data sizes ©2015 Apigee. All Rights Reserved.
  • 36. Integration testing – tooling APICLI YADDA ©2015 Apigee. All Rights Reserved.
  • 38. API proxy testing Do you think it is possible to test an Apigee proxy fully with integration testing? No… ©2015 Apigee. All Rights Reserved.
  • 39. API proxy testing – integration test enough? Test Runner Apigee Target Systems 3rd Party Service Callouts? Async? ©2015 Apigee. All Rights Reserved.
  • 40. API proxy testing – integration test enough? Isolation/Coverage ©2015 Apigee. All Rights Reserved.
  • 41. Unit testing – other benefits •  Code can be tested locally without deployment to Apigee first •  Can create hooks to enforce testing during commit •  Much faster than integration testing ©2015 Apigee. All Rights Reserved.
  • 42. Unit testing – boundary principle Test within your boundaries – don’t test libraries you don’t control ©2015 Apigee. All Rights Reserved.
  • 43. Unit testing – types of policies ©2015 Apigee. All Rights Reserved.
  • 44. Unit testing – tooling ©2015 Apigee. All Rights Reserved.
  • 45. Integration testing – end-to-end testing session Oct 14 – 11:40AM END TO END TESTING: BUG SQUASHING FOR API DEVELOPERS ©2015 Apigee. All Rights Reserved.
  • 47. Programmable documentation with SmartDocs API Modeling Describe an API structure SmartDocs Generate interactive documentation API-based Integrate with any portal / CMS Apigee Edge Developer Services gh-pages Other CMS ©2015 Apigee. All Rights Reserved.
  • 48. Programmable API documentation with SmartDocs Get it now! https://github.com/dzuluaga/apigee-tutorials/tree/master/apiproxies/sample-api-smartdocs ©2015 Apigee. All Rights Reserved.
  • 49. In Conclusion •  CI doesn’t happen in a vacuum. So, enable the whole organization. •  Don’t reinvent the wheel. Leverage frameworks and community. •  Don’t let tools get in your way. They must be easy to adopt and maintain. •  It’s not a silver bullet, but if done right, it can make a huge difference. •  It won’t happen overnight. Master it with practice. •  Keep improving it. ©2015 Apigee. All Rights Reserved.