SlideShare a Scribd company logo
1 of 47
Download to read offline
(HOW TO) USE SWAGGER TO
DEVELOP REST APPLICATIONS
@johannes_fiala - JCON 2017
About me…
 Swagger-CodegenContributor
 Javascript, Jaxrs-CXF, BeanValidation for Java*,
Jaxrs-Resteasy
 Other contributions
 Spring REST / Swagger-Springfox
 BeanValidation support
 Swagger2Markup
 BeanValidation support
Agenda
 Generate based on contract
 Extend using code first
 Freeze the contract
 Use the RESTAPI
 Generate client code (Java/Javascript)
 Access with a browser using a UI
 View/Share as HTML/PDF
 Customize the code generator
Toolchain
 ApacheCXF 3
 + SwaggerFeature
 + Spring integration/Spring Boot integration
 Swagger-Tools
 Swagger-Editor / Eclipse KaiZen Plugin
 Swagger-Codegen
 Swagger-UI
 Swagger2Markup
Contract first, then code,
then contract …
Complete Process flow
Contract spec. formats
 WADL (XML-based)
 By w3c, Last update 2009
 Swagger (Json/Yaml-based)
 By Linux foundation
 Version 1.0 – 2011 (Wordnik)
 Version 1.2 - 2014
 Version 2.0 – 2015 / transferred to Linux foundation /
Open-API initiative
 Version: 3.0 (released 2017-07)
 Others: Blueprint, RAML, …
Open API / Swagger
 A language-agnostic interface to RESTAPIs
 allows to discover and understand the
capabilities of a service
 Supported Formats: JSON/YAML
https://github.com/OAI/OpenAPI-Specification
Contract editors
 Swagger Editor
 by SmartBear
 Eclipse SwagEdit
 By RepreZen API Studio
 Neu: KaiZen – für OpenAPI 2 + 3
 Templates nur fürYaml, nicht für Json
 CommercialTools:
 Restlet Studio
 RepreZenAPI Studio
Swagger-Editor (Json)
Eclipse + KaiZen Plugin
 Open Source
 https://github.com/RepreZen/KaiZen-OpenAPI-Editor
 Swagger 2 + 3
 Supports onlyYAML format
 Navigation
 Outline
 + Navigate using Ctrl+Click
 Templates
 Scope-specific
 Completely Customizable!
Eclipse + KaiZen Plugin
Eclipse + KaiZen Plugin
Templates
Eclipse + KaiZen Plugin
 Demo
Swagger-Codegen
 by SmartBear (Apache License)
 Version 2.2.3
 Java program
 + Mustache templating
 Generates server + client code
 Currently supports OpenAPI v2 !
 Support for 3.0 in progress…, see #6517
https://github.com/swagger-api/swagger-codegen
Swagger-Codegen
Supported Languages
 Client and/or Server available for:
 Android,Asp.net, AsyncScala, Bash, Clojure,ConfluenceWiki,
C++, C#, Dart, Elixir, Erlang, Finch, Flash, FlaskConnexion, Go,
Groovy, Haskell, Java,CXF, JavaInflector, Jaxrs-Spec, Jersey,
JavaMSF4J, Resteasy, Javascript,AngularJS, Jmeter, Lumen,
NancyFX, NodeJS, ObjC, Perl, Php, Python,Qt5C++, Rails,
Ruby, Scala, Scalatra, Silex, Sinatra, Slim (PHP), Spring, Static
Html, Swagger,Yaml, Swift,Tizen,TypescriptAngular,
Undertow, …
 And many more libraries (e.g. Java Jersey1, ok-http-gson, …)
Generate the server stub
Swagger-Codegen
 Supported server stubs for Java:
 Java JAX RS
 2.0 spec
 Jersey
 CXF (Spring/CDI)
 Resteasy
 Spring MVC
 Spring Boot
CXF server stub
Features
 Since 2.2.2 (released 2017-03-01)
 Generates Interface/Implementation/Models
 Generate a complete web application
 Context.xml / ApplicationContext.xml
 Web.xml
 Jboss: jboss-web.xml
 Spring Boot support
 Run as Spring-Boot Application
 Run using Spring Integrationtests using random
ports
CXF server stub
Supported Features
 Spring application
 Swagger generator
 WADL generator
 BeanValidation annotations
 Activate automatic BeanValidation (1.1)
 Compression (gzip)
 Logging
 Integration-Tests (Spring Boot)
Swagger-Codegen CLI
 io.swagger.codegen.Codegen
-i hello_world.json
-l jaxrs-cxf
-o c:hello_world_project
-c hello_world_config.json
Demo
 Create hello world service
 GenerateCXF server stub (with Spring
support enabled)
 Run using Spring Boot
 Run Junit-Tests
 Deploy to application server (Jboss EAP 7)
Swagger-Codegen CLI
Display all language options
 io.swagger.codegen.SwaggerCodegen
config-help -l jaxrs-cxf
or
 java -jar modules/swagger-codegen-
cli/target/swagger-codegen-cli.jar config-
help –l jaxrs-cxf
Generated Code – Hints
 Enum references supported (for models)
 Inheritance supported (but merged from
parent classes)
 BeanValidation
(@Min/@Max/@Size/@Pattern/@Valid)
 Builder pattern for models:
 return new Response().name(“Foo").first(“Test”);
 Optionally use JaxRs-Response instead of
return datatypes (useGenericResponse-flag)
Further development
life cycle
 Extend the API
 code first
 Freeze the contract
 Use theAPI
 Frontend development
Extend the application
 Modify your API:
 Add new services (use JAXRS-annotations)
 Use Swagger annotations
 Use BeanValidation annotations
 Generated Swagger spec gets updated
automatically
Extend the application
Swagger annotations
 Service:
 @Api – activate Swagger for api
 Operations:
 @ApiOperation - description
 @ApiResponse – error codes + return types
 Model:
 @ApiModel - description
 @ApiModelProperty - description
Freeze your API:
 Generate only interfaces/models
 Prevent accidential changes of theAPI
 Integrate in build job (Maven / Gradle)
 Specify which sources should NOT be
generated during build using .swagger-
codegen-ignore
 https://github.com/swagger-api/swagger-
codegen/tree/master/modules/swagger-codegen-maven-plugin
Freeze your API: maven
configuration
Demo
 Extend hello world service
(+ BeanValidation)
 Access updated specs
 Freeze the contract
Use your API
 Generate client stubs
 Swagger-Codegen
 Access your API using a browser
 Swagger-UI
 Generate HTML/PDF documentation
 Swagger2Markup
Why generate client code?
 No more manual api calls
 Ensure consistency of your client code with
theAPI!
 Makes code completion possible!
 Allows developers to read description for
your operations and models in the IDE
 You get compilation errors if the API breaks
with newer versions!
Swagger-UI
 By SmartBear
 Access your API with a browser
 Javascript application
 Can access the generated Swagger spec – always
consistent with your code
 Integration options:
 Copy into your webapp
 load asWeb-Jar
https://github.com/swagger-api/swagger-ui
Swagger-UI
Swagger2Markup
 By RobertWinkler (github)
 Render your API in HTML/PDFs
 Uses Markdown/Asciidoctor files
 Completely customizable
 Integration options:
 Run as Program/Unittest
 Maven
https://github.com/Swagger2Markup/swagger2markup
Swagger2Markup
Swagger
contract
Asciidoctor Html
PDF
Swagger2Markup
Improve the docs
 Automatically added:
 Since 1.0.1:Validation constraints are added
automatically to the properties
 Example values for Models are added as Example
HTTP responses
 „Polymorphism: Composition“ added for
inheriting models
 Manually: Add description to your models
and operations
Demo
 Client stub generator:
 Java
 Swagger-UI
 Swagger2Markup
Customize the generator
 Generator implemented in Java (one class for
each language)
 Mustache-files
 api.mustache
 apiServiceImpl.mustache
 pojo.mustache
 api_test.mustache
 …
Customize the generator
 Use –t flag for your own templates
 Customize only the templates you need
 Examples:
 Add Maven profile for deployment
 Add logger declaration
 Customize generated unit tests
 …
Customize the generator
 Customize Codegen Languages
 Extend Language class
 Add it to io.swagger.codegen.CodegenConfig
 swagger-codegensrcmainresourcesMETA-
INFservicesio.swagger.codegen.CodegenConfig
 Copy language templates
WADL?
From WADL to Swagger
 Use wadl2java to generate server stub
 BeanValidation: krasa-jaxb-tools
 Activate CXF3 SwaggerFeature
 Use generated Swagger-file
 Will include BeanValidation annotations for
models
Swagger-Codegen – What‘s
next for CXF
 Support for OpenAPI 3.0 (issue 6517)
 Follow/Generate schema references
(and external schema references…)
 And keep them in the generated sources…
 True Polymorphism/inheritance
(currently merged from parents)
 Dynamic merge of new methods for
implementation + tests
 ???
Wrapup
 Generate based on contract
 Swagger-Codegen server stubs
 Extend using code first
 CXF 3 Swagger Feature
 Freeze using contract
 Swagger-Codegen build integration (mvn/gradle/cmd)
 Use your application
 Generate client code (Swagger-Codegen)
 Use in browser (Swagger-UI)
 View/Share as HTML/PDF (Swagger2Markup)
 Customize the code generator
Contribute to the projects
 OpenAPI
 Join the technical developer community
 Swagger-Codegen
 Java / JMustache
 Swagger-UI
 Javascript
 Swagger-Editor
 Javascript
 RepreZen Eclipse KaiZen
 Java
 Swagger2Markup
 Java/Asciidoctor
Thank you for your
attention!
 Demo-Code:
http://github.com/jfiala/swagger-cxf-demo
 Contact:
 @johannes_fiala
Links & Resources
 Swagger Editor
 http://editor.swagger.io/
 RepreZen Eclipse KaiZen Plugin
 https://github.com/RepreZen/KaiZen-OpenAPI-Editor
 Swagger Codegen
 https://github.com/swagger-api/swagger-codegen
 Swagger UI
 https://github.com/swagger-api/swagger-ui
 CXF
 http://cxf.apache.org/

More Related Content

What's hot

Vagrant Binding JayDay 2013
Vagrant Binding JayDay 2013Vagrant Binding JayDay 2013
Vagrant Binding JayDay 2013
Hendrik Ebbers
 
Spring Dynamic Modules for OSGi by Example - Martin Lippert, Consultant
Spring Dynamic Modules for OSGi by Example - Martin Lippert, ConsultantSpring Dynamic Modules for OSGi by Example - Martin Lippert, Consultant
Spring Dynamic Modules for OSGi by Example - Martin Lippert, Consultant
mfrancis
 

What's hot (20)

Apache Big Data Europe 2015: Selected Talks
Apache Big Data Europe 2015: Selected TalksApache Big Data Europe 2015: Selected Talks
Apache Big Data Europe 2015: Selected Talks
 
Asp.Net Core MVC , Razor page , Entity Framework Core
Asp.Net Core MVC , Razor page , Entity Framework CoreAsp.Net Core MVC , Razor page , Entity Framework Core
Asp.Net Core MVC , Razor page , Entity Framework Core
 
Introduction to ASP.NET Core
Introduction to ASP.NET CoreIntroduction to ASP.NET Core
Introduction to ASP.NET Core
 
Vagrant Binding JayDay 2013
Vagrant Binding JayDay 2013Vagrant Binding JayDay 2013
Vagrant Binding JayDay 2013
 
Simple REST-APIs with Dropwizard and Swagger
Simple REST-APIs with Dropwizard and SwaggerSimple REST-APIs with Dropwizard and Swagger
Simple REST-APIs with Dropwizard and Swagger
 
Learning chef
Learning chefLearning chef
Learning chef
 
Swagger 2.0 and Model-driven APIs
Swagger 2.0 and Model-driven APIsSwagger 2.0 and Model-driven APIs
Swagger 2.0 and Model-driven APIs
 
Swagger for-your-api
Swagger for-your-apiSwagger for-your-api
Swagger for-your-api
 
Web Performance & Latest in React
Web Performance & Latest in ReactWeb Performance & Latest in React
Web Performance & Latest in React
 
Jenkins and AWS DevOps Tools
Jenkins and AWS DevOps ToolsJenkins and AWS DevOps Tools
Jenkins and AWS DevOps Tools
 
Node.js to the rescue
Node.js to the rescueNode.js to the rescue
Node.js to the rescue
 
Understanding how to use Swagger and its tools
Understanding how to use Swagger and its toolsUnderstanding how to use Swagger and its tools
Understanding how to use Swagger and its tools
 
Render-as-You-Fetch
Render-as-You-FetchRender-as-You-Fetch
Render-as-You-Fetch
 
Introducing ASP.NET Core 2.0
Introducing ASP.NET Core 2.0Introducing ASP.NET Core 2.0
Introducing ASP.NET Core 2.0
 
Drone Continuous Integration
Drone Continuous IntegrationDrone Continuous Integration
Drone Continuous Integration
 
Securing Legacy CFML Code
Securing Legacy CFML CodeSecuring Legacy CFML Code
Securing Legacy CFML Code
 
Spring Dynamic Modules for OSGi by Example - Martin Lippert, Consultant
Spring Dynamic Modules for OSGi by Example - Martin Lippert, ConsultantSpring Dynamic Modules for OSGi by Example - Martin Lippert, Consultant
Spring Dynamic Modules for OSGi by Example - Martin Lippert, Consultant
 
Getting started with spfx
Getting started with spfxGetting started with spfx
Getting started with spfx
 
Creating applications with Grails, Angular JS and Spring Security - G3 Summit...
Creating applications with Grails, Angular JS and Spring Security - G3 Summit...Creating applications with Grails, Angular JS and Spring Security - G3 Summit...
Creating applications with Grails, Angular JS and Spring Security - G3 Summit...
 
ASP.NET Core 1.0 Overview
ASP.NET Core 1.0 OverviewASP.NET Core 1.0 Overview
ASP.NET Core 1.0 Overview
 

Similar to Jcon 2017 How to use Swagger to develop REST applications

Similar to Jcon 2017 How to use Swagger to develop REST applications (20)

How to generate a rest application - DevFest Vienna 2016
How to generate a rest application - DevFest Vienna 2016How to generate a rest application - DevFest Vienna 2016
How to generate a rest application - DevFest Vienna 2016
 
Deep Dive on Serverless Stack
Deep Dive on Serverless StackDeep Dive on Serverless Stack
Deep Dive on Serverless Stack
 
Application Lifecycle Management in a Serverless World
Application Lifecycle Management in a Serverless WorldApplication Lifecycle Management in a Serverless World
Application Lifecycle Management in a Serverless World
 
Amazon API Gateway
Amazon API GatewayAmazon API Gateway
Amazon API Gateway
 
Google Web Toolkit Introduction - eXo Platform SEA
Google Web Toolkit Introduction - eXo Platform SEAGoogle Web Toolkit Introduction - eXo Platform SEA
Google Web Toolkit Introduction - eXo Platform SEA
 
Everybody loves Swagger (Massimo Crippa @ Integration Monday)
Everybody loves Swagger (Massimo Crippa @ Integration Monday)Everybody loves Swagger (Massimo Crippa @ Integration Monday)
Everybody loves Swagger (Massimo Crippa @ Integration Monday)
 
Gwt session
Gwt sessionGwt session
Gwt session
 
Gwt session
Gwt sessionGwt session
Gwt session
 
Vijay Oscon
Vijay OsconVijay Oscon
Vijay Oscon
 
Amazon API Gateway
Amazon API GatewayAmazon API Gateway
Amazon API Gateway
 
Serverless on Azure with Functions
Serverless on Azure with FunctionsServerless on Azure with Functions
Serverless on Azure with Functions
 
Spring Surf Development Tools
Spring Surf Development ToolsSpring Surf Development Tools
Spring Surf Development Tools
 
Consuming Restful APIs using Swagger v2.0
Consuming Restful APIs using Swagger v2.0Consuming Restful APIs using Swagger v2.0
Consuming Restful APIs using Swagger v2.0
 
Open API Specifications - formerly swagger
Open API Specifications - formerly swaggerOpen API Specifications - formerly swagger
Open API Specifications - formerly swagger
 
Introduction to Codenvy / JugSummerCamp 2014
Introduction to Codenvy / JugSummerCamp 2014Introduction to Codenvy / JugSummerCamp 2014
Introduction to Codenvy / JugSummerCamp 2014
 
Serverless API with Azure Functions
Serverless API with Azure FunctionsServerless API with Azure Functions
Serverless API with Azure Functions
 
Aws Lambda in Swift - NSLondon - 3rd December 2020
Aws Lambda in Swift - NSLondon - 3rd December 2020Aws Lambda in Swift - NSLondon - 3rd December 2020
Aws Lambda in Swift - NSLondon - 3rd December 2020
 
The Future of ASP.NET
The Future of ASP.NETThe Future of ASP.NET
The Future of ASP.NET
 
Part6 introducing the jas forge collaborative project
Part6   introducing the jas forge collaborative projectPart6   introducing the jas forge collaborative project
Part6 introducing the jas forge collaborative project
 
Rohit yadav cloud stack internals
Rohit yadav   cloud stack internalsRohit yadav   cloud stack internals
Rohit yadav cloud stack internals
 

Recently uploaded

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Recently uploaded (20)

How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 

Jcon 2017 How to use Swagger to develop REST applications

  • 1. (HOW TO) USE SWAGGER TO DEVELOP REST APPLICATIONS @johannes_fiala - JCON 2017
  • 2. About me…  Swagger-CodegenContributor  Javascript, Jaxrs-CXF, BeanValidation for Java*, Jaxrs-Resteasy  Other contributions  Spring REST / Swagger-Springfox  BeanValidation support  Swagger2Markup  BeanValidation support
  • 3. Agenda  Generate based on contract  Extend using code first  Freeze the contract  Use the RESTAPI  Generate client code (Java/Javascript)  Access with a browser using a UI  View/Share as HTML/PDF  Customize the code generator
  • 4. Toolchain  ApacheCXF 3  + SwaggerFeature  + Spring integration/Spring Boot integration  Swagger-Tools  Swagger-Editor / Eclipse KaiZen Plugin  Swagger-Codegen  Swagger-UI  Swagger2Markup
  • 5. Contract first, then code, then contract …
  • 7. Contract spec. formats  WADL (XML-based)  By w3c, Last update 2009  Swagger (Json/Yaml-based)  By Linux foundation  Version 1.0 – 2011 (Wordnik)  Version 1.2 - 2014  Version 2.0 – 2015 / transferred to Linux foundation / Open-API initiative  Version: 3.0 (released 2017-07)  Others: Blueprint, RAML, …
  • 8. Open API / Swagger  A language-agnostic interface to RESTAPIs  allows to discover and understand the capabilities of a service  Supported Formats: JSON/YAML https://github.com/OAI/OpenAPI-Specification
  • 9. Contract editors  Swagger Editor  by SmartBear  Eclipse SwagEdit  By RepreZen API Studio  Neu: KaiZen – für OpenAPI 2 + 3  Templates nur fürYaml, nicht für Json  CommercialTools:  Restlet Studio  RepreZenAPI Studio
  • 11. Eclipse + KaiZen Plugin  Open Source  https://github.com/RepreZen/KaiZen-OpenAPI-Editor  Swagger 2 + 3  Supports onlyYAML format  Navigation  Outline  + Navigate using Ctrl+Click  Templates  Scope-specific  Completely Customizable!
  • 13. Eclipse + KaiZen Plugin Templates
  • 14. Eclipse + KaiZen Plugin  Demo
  • 15. Swagger-Codegen  by SmartBear (Apache License)  Version 2.2.3  Java program  + Mustache templating  Generates server + client code  Currently supports OpenAPI v2 !  Support for 3.0 in progress…, see #6517 https://github.com/swagger-api/swagger-codegen
  • 16. Swagger-Codegen Supported Languages  Client and/or Server available for:  Android,Asp.net, AsyncScala, Bash, Clojure,ConfluenceWiki, C++, C#, Dart, Elixir, Erlang, Finch, Flash, FlaskConnexion, Go, Groovy, Haskell, Java,CXF, JavaInflector, Jaxrs-Spec, Jersey, JavaMSF4J, Resteasy, Javascript,AngularJS, Jmeter, Lumen, NancyFX, NodeJS, ObjC, Perl, Php, Python,Qt5C++, Rails, Ruby, Scala, Scalatra, Silex, Sinatra, Slim (PHP), Spring, Static Html, Swagger,Yaml, Swift,Tizen,TypescriptAngular, Undertow, …  And many more libraries (e.g. Java Jersey1, ok-http-gson, …)
  • 17.
  • 18. Generate the server stub Swagger-Codegen  Supported server stubs for Java:  Java JAX RS  2.0 spec  Jersey  CXF (Spring/CDI)  Resteasy  Spring MVC  Spring Boot
  • 19. CXF server stub Features  Since 2.2.2 (released 2017-03-01)  Generates Interface/Implementation/Models  Generate a complete web application  Context.xml / ApplicationContext.xml  Web.xml  Jboss: jboss-web.xml  Spring Boot support  Run as Spring-Boot Application  Run using Spring Integrationtests using random ports
  • 20. CXF server stub Supported Features  Spring application  Swagger generator  WADL generator  BeanValidation annotations  Activate automatic BeanValidation (1.1)  Compression (gzip)  Logging  Integration-Tests (Spring Boot)
  • 21. Swagger-Codegen CLI  io.swagger.codegen.Codegen -i hello_world.json -l jaxrs-cxf -o c:hello_world_project -c hello_world_config.json
  • 22. Demo  Create hello world service  GenerateCXF server stub (with Spring support enabled)  Run using Spring Boot  Run Junit-Tests  Deploy to application server (Jboss EAP 7)
  • 23. Swagger-Codegen CLI Display all language options  io.swagger.codegen.SwaggerCodegen config-help -l jaxrs-cxf or  java -jar modules/swagger-codegen- cli/target/swagger-codegen-cli.jar config- help –l jaxrs-cxf
  • 24. Generated Code – Hints  Enum references supported (for models)  Inheritance supported (but merged from parent classes)  BeanValidation (@Min/@Max/@Size/@Pattern/@Valid)  Builder pattern for models:  return new Response().name(“Foo").first(“Test”);  Optionally use JaxRs-Response instead of return datatypes (useGenericResponse-flag)
  • 25. Further development life cycle  Extend the API  code first  Freeze the contract  Use theAPI  Frontend development
  • 26. Extend the application  Modify your API:  Add new services (use JAXRS-annotations)  Use Swagger annotations  Use BeanValidation annotations  Generated Swagger spec gets updated automatically
  • 27. Extend the application Swagger annotations  Service:  @Api – activate Swagger for api  Operations:  @ApiOperation - description  @ApiResponse – error codes + return types  Model:  @ApiModel - description  @ApiModelProperty - description
  • 28. Freeze your API:  Generate only interfaces/models  Prevent accidential changes of theAPI  Integrate in build job (Maven / Gradle)  Specify which sources should NOT be generated during build using .swagger- codegen-ignore  https://github.com/swagger-api/swagger- codegen/tree/master/modules/swagger-codegen-maven-plugin
  • 29. Freeze your API: maven configuration
  • 30. Demo  Extend hello world service (+ BeanValidation)  Access updated specs  Freeze the contract
  • 31. Use your API  Generate client stubs  Swagger-Codegen  Access your API using a browser  Swagger-UI  Generate HTML/PDF documentation  Swagger2Markup
  • 32. Why generate client code?  No more manual api calls  Ensure consistency of your client code with theAPI!  Makes code completion possible!  Allows developers to read description for your operations and models in the IDE  You get compilation errors if the API breaks with newer versions!
  • 33. Swagger-UI  By SmartBear  Access your API with a browser  Javascript application  Can access the generated Swagger spec – always consistent with your code  Integration options:  Copy into your webapp  load asWeb-Jar https://github.com/swagger-api/swagger-ui
  • 35. Swagger2Markup  By RobertWinkler (github)  Render your API in HTML/PDFs  Uses Markdown/Asciidoctor files  Completely customizable  Integration options:  Run as Program/Unittest  Maven https://github.com/Swagger2Markup/swagger2markup
  • 37. Swagger2Markup Improve the docs  Automatically added:  Since 1.0.1:Validation constraints are added automatically to the properties  Example values for Models are added as Example HTTP responses  „Polymorphism: Composition“ added for inheriting models  Manually: Add description to your models and operations
  • 38. Demo  Client stub generator:  Java  Swagger-UI  Swagger2Markup
  • 39. Customize the generator  Generator implemented in Java (one class for each language)  Mustache-files  api.mustache  apiServiceImpl.mustache  pojo.mustache  api_test.mustache  …
  • 40. Customize the generator  Use –t flag for your own templates  Customize only the templates you need  Examples:  Add Maven profile for deployment  Add logger declaration  Customize generated unit tests  …
  • 41. Customize the generator  Customize Codegen Languages  Extend Language class  Add it to io.swagger.codegen.CodegenConfig  swagger-codegensrcmainresourcesMETA- INFservicesio.swagger.codegen.CodegenConfig  Copy language templates
  • 42. WADL? From WADL to Swagger  Use wadl2java to generate server stub  BeanValidation: krasa-jaxb-tools  Activate CXF3 SwaggerFeature  Use generated Swagger-file  Will include BeanValidation annotations for models
  • 43. Swagger-Codegen – What‘s next for CXF  Support for OpenAPI 3.0 (issue 6517)  Follow/Generate schema references (and external schema references…)  And keep them in the generated sources…  True Polymorphism/inheritance (currently merged from parents)  Dynamic merge of new methods for implementation + tests  ???
  • 44. Wrapup  Generate based on contract  Swagger-Codegen server stubs  Extend using code first  CXF 3 Swagger Feature  Freeze using contract  Swagger-Codegen build integration (mvn/gradle/cmd)  Use your application  Generate client code (Swagger-Codegen)  Use in browser (Swagger-UI)  View/Share as HTML/PDF (Swagger2Markup)  Customize the code generator
  • 45. Contribute to the projects  OpenAPI  Join the technical developer community  Swagger-Codegen  Java / JMustache  Swagger-UI  Javascript  Swagger-Editor  Javascript  RepreZen Eclipse KaiZen  Java  Swagger2Markup  Java/Asciidoctor
  • 46. Thank you for your attention!  Demo-Code: http://github.com/jfiala/swagger-cxf-demo  Contact:  @johannes_fiala
  • 47. Links & Resources  Swagger Editor  http://editor.swagger.io/  RepreZen Eclipse KaiZen Plugin  https://github.com/RepreZen/KaiZen-OpenAPI-Editor  Swagger Codegen  https://github.com/swagger-api/swagger-codegen  Swagger UI  https://github.com/swagger-api/swagger-ui  CXF  http://cxf.apache.org/