SlideShare ist ein Scribd-Unternehmen logo
Eine Stunde was mit API FirstEine Stunde was mit API First
Microservices bauen mit OpenAPI, Vert.x und Kotlin
Jan Weinschenker • Holisticon AG
@janweinschenker
1
AgendaAgenda
1. Wie entstand dieser Talk?
2. Wir wollen produktiv arbeiten™
3. API First! — Warum ist das eine gute Idee?
4. Wir unterstützen das™ vert.x und Kotlin
5. Fazit
2
Holisticon AG — About usHolisticon AG — About us
• @holisticon
Die Holisticon AG ist eine Management- und IT-Beratung mit
Niederlassungen in Hannover und Hamburg. Wir entwickeln beste
Individualsoftware, Webplattformen und Apps. Geschäftsprozesse
durchdringen wir und automatisieren sie. Große Datenmengen machen
wir mit Smart-Data-Ansätzen beherrschbar.
... und das alles agil.
www.holisticon.de
3 . 1
Holisticon AG — About usHolisticon AG — About us
3 . 2
1. Wie entstand dieser Talk?1. Wie entstand dieser Talk?
Ein Projekt mit > 70 Menschen
Viele Teams
Microservice-Architektur
Java, Scala, Kotlin, JavaScript, Typescript, ...
4 . 1
1. Wie entstand dieser Talk?1. Wie entstand dieser Talk?
Vergleichsweise wenige Entwickler bauen Software für viele andereVergleichsweise wenige Entwickler bauen Software für viele andere
Entwickler.Entwickler.
Häufig disruptive Änderungen an Code und Schnittstellen
(APIs).
4 . 2
1. Wie entstand dieser Talk?1. Wie entstand dieser Talk?
Andere Entwicklerteams treten als Kunden (i.S.v. Scrum)
auf
Wenig Zeit für Support und das Schreiben von Doku
Großer und steigender Bedarf an guter Dokumentation
und Entwickler-Support
4 . 3
1. Wie entstand dieser Talk?1. Wie entstand dieser Talk?
Über Sinn und Unsinn geschriebener Doku ...
4 . 4
Sigberg’s First Law of DocumentationSigberg’s First Law of Documentation
In order for someone to read a document they must first:In order for someone to read a document they must first:
Know that it exists
Know where to find it
Care enough about the subject to actually take the time
out of their life to look it up
https://medium.com/@thorbjorn.sigberg/sigbergs-laws-of-documentation-fab155b2415b
4 . 5
Arnold's Laws of DocumentationArnold's Laws of Documentation
1. If it should exist, it doesn’t
2. If it does exist, it’s out of date
3. Only documentation for useless programs transcends
the first two laws
aus: Murphy's Law von Arthur Bloch
4 . 6
aus:aus: Extreme ProgrammingExtreme Programming
Josh Susser, devchat.tv Podcast
Kent Beck
“a comment is a lie waiting to happen”
“A comment is the code’s way of asking to be more clear”.
4 . 7
1. Wie entstand dieser Talk?1. Wie entstand dieser Talk?
Durch die Erkenntnis, dass es sehr schwierig und gleichzeitig
sehr notwendig ist, gute Doku zu haben.
Wissenstransfer zwischen Entwicklern ist essentiell.
4 . 8
1. Wie entstand dieser Talk?1. Wie entstand dieser Talk?
ZusammenfassungZusammenfassung
Doku und Implementierung entwickeln sich auseinander
Wie kann man diese Divergenz vermeiden?
4 . 9
2. Wir wollen produktiv arbeiten™.2. Wir wollen produktiv arbeiten™.
Dafür sind wir auf das Wissen anderer Entwickler*innen
angewiesen.
Funktionierender Code ist das beste Medium für diesen
Wissenstransfer.
5 . 1
2. Wir wollen produktiv arbeiten™.2. Wir wollen produktiv arbeiten™.
WunschzustandWunschzustand
APIs müssen ohne große Hürden anfassbar sein
Anstatt sich in Doku einzulesen, APIs einfach
ausprobieren
z.B. API-Spielwiese im Webbrowser
□ mehr dazu später ...
5 . 2
2. Kein Appell gegen geschriebene Doku!2. Kein Appell gegen geschriebene Doku!
Für dasFür das Big PictureBig Picture::
Geschriebene Doku, Schaubilder und Diagramme
Entwicklerdoku:Entwicklerdoku:
Funktionierender, intuitiver Code
Tools und UI, die einfach anzuwenden sind
5 . 3
3. API First!3. API First!
Alles steht und fällt mit der Güte der Schnittstelle!
API muss konsistent und intuitv sein
Nachträgliche Änderungen an API sind teuer
6 . 1
3. API First!3. API First!
Ergo:Ergo:
API als First-Class-Citizen im Entwicklungsprozess
Schnittstellenbeschreibung (API Spec)
Entwurf vor der Implementierung :
□ Ressourcen, Operationen, Datenobjekte, Statuscodes
6 . 2
3. API First!3. API First!
Frühere Ansätze für API Specs:Frühere Ansätze für API Specs:
CORBA IDL (1991 bis 2011*)
WSDL (2000 bis 2007*)
Apache Thrift (2011 bis 2017*)
*Letztes Release
7 . 1
3. API First!3. API First!
Alternativen im REST-ZeitalterAlternativen im REST-Zeitalter
RAML — RESTful API Modeling Language
API Blueprint (Markdown)
Swagger / OpenAPI
7 . 2
3. API First!3. API First!
Alternativen im REST-ZeitalterAlternativen im REST-Zeitalter
RAML — RESTful API Modeling Language
API Blueprint (Markdown)
Swagger / OpenAPI
7 . 2
3. Swagger / OpenAPI3. Swagger / OpenAPI
Entscheidung für OpenAPI, weil:Entscheidung für OpenAPI, weil:
Sehr gutes Tooling
Unterstützung für alle gängigen Sprachen
Einbindung in bestehende CI/CD-Prozesse leicht möglich
7 . 3
3. Swagger / OpenAPI3. Swagger / OpenAPI
API Spec basierend auf YAML
Hieß Swagger seit 2011
2016 umbenannt in OpenAPI
Umfangreiches Tooling
□ Gradle, Maven, Swagger UI, etc
□ Generatoren für Testdaten
7 . 4
3. Swagger / OpenAPI3. Swagger / OpenAPI
Generator für Client- und Server-Code, SDKs, ...
Java (Jersey1.x, Jersey2.x, OkHttp, Retrofit1.x, Retrofit2.x, Feign, RestTemplate, RESTEasy,
Vertx, Google API Client Library for Java, Rest-assured, Spring 5 Web Client)
Scala, Kotlin, Dart, Ada, JavaScript, Typescript-Angular,
Clojure, C#, C++, Swift, Ruby, Python, Rust, Haskell, Elm, ...
Swagger UI
7 . 5
3. Swagger / OpenAPI3. Swagger / OpenAPI
API Spec für das REST-Zeitalter
paths:
/apod: # https://www.my-cool-service/apod
post:
summary: create an apod with the specified date
requestBody:
required: true
description: The rating you want to set
content:
application/json:
schema:
$ref: '#/components/schemas/ApodRequest'
responses:
'201':
description: Apod entry created
headers:
location:
schema:
type: string
description: The location of the created resource.
7 . 6
3. Swagger / OpenAPI3. Swagger / OpenAPI
API Spec für das REST-Zeitalter
paths:
/apod: # https://www.my-cool-service/apod
get:
summary: get all apods
responses:
'200':
description: An array of apods or an empty array, if no data is availab
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Apod'
'500':
description: Server side error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
7 . 7
3. Swagger / OpenAPI3. Swagger / OpenAPI
API Spec für das REST-Zeitalter
components:
schemas:
Apod:
description: the apod data object
required:
- id
properties:
id:
readOnly: true
type: string
dateString:
readOnly: true
type: string
title:
readOnly: true
type: string
imageUriHd:
readOnly: true
type: string
nullable: true
7 . 8
3. Wir wollen produktiv arbeiten™3. Wir wollen produktiv arbeiten™
API Spec, kann ...API Spec, kann ...
den Medienbruch beim Implementieren vermeiden
über Repositories im Projekt verteilt und versioniert
werden
Kann uns und anderen Entwicklern das Leben erleichtern
7 . 9
4. Wir unterstützen das™:4. Wir unterstützen das™: KotlinKotlin..
Schlauer Compiler
Statische Typisierung
Wenig Boilerplate
Excellente IDE Unterstützung, zumindest wenn der
Hersteller Jetbrains heißt
8 . 1
4. Wir unterstützen das™:4. Wir unterstützen das™: KotlinKotlin..
OpenAPI generiert u.a. Kotlin Data classes
8 . 2
4. Wir unterstützen das ™:4. Wir unterstützen das ™: Vert.xVert.x
Reactive Streams: Observable, Single, Maybe,
Completable, ...
Multi-Reactor-Pattern, ähnlich Node.js.
Unabhängige Komponenten (Verticles) kommunizieren
über einen Eventbus.
Single Threaded, Non-Blocking
8 . 3
4. Wir unterstützen das ™:4. Wir unterstützen das ™: Vert.xVert.x``
8 . 4
4. Wir unterstützen das ™:4. Wir unterstützen das ™: Vert.xVert.x
Vert.x verwendet die API-Spec für das Request-Routing und
die Request-Validierung.
OpenAPI3RouterFactory
.rxCreate(vertx, "swagger.yaml")
.map { routerFactory -> routerFactory.mountServicesFromExtensions() }
.flatMap { httpServer -> httpServer.rxListen(port) }
.subscribe()
8 . 5
4. Unser Beispiel: Astronomy Picture of the Day4. Unser Beispiel: Astronomy Picture of the Day
https://apod.nasa.gov
https://api.nasa.gov
8 . 6
4. Wir unterstützen das ™:4. Wir unterstützen das ™: Vert.xVert.x
/apod/{apodId}:
x-vertx-event-bus:
address: apod_query_service.apod # >>> Mapping auf implementierende Klasse
get:
summary: get an apod for the specified date
operationId: getApodForDate # >>> ID dieser Operations
x-vertx-event-bus:
method: getApodForDate # >>> Mapping auf implementierende Method
parameters:
- name: apodId
in: path
required: true
description: the id of the picture
schema:
type: string
pattern: '^d+$'
8 . 7
DemoDemo
1. OpenAPI Spec
2. Swagger UI
3. Einen weiteren Endpunkt implementieren
8 . 8
FazitFazit
API First! kann den Projektalltag erheblich vereinfachen
Ideal für Microservices
Tooling ist wichtig
9
Vielen DankVielen Dank
CreditsCredits
Icons von Eucalp. https://www.flaticon.com/authors/eucalyp
10
MoreMore
LinksLinks
□
□
□
□
Sourcecode des Beispiels bei Github
https://github.com/holisticon/vertx-kotlin-example
Swagger.io
https://swagger.io
Swagger editor
https://editor.swagger.io
vert.x
https://vertx.io
11

Weitere ähnliche Inhalte

Was ist angesagt?

PHP Deployment mit Ansible
PHP Deployment mit AnsiblePHP Deployment mit Ansible
PHP Deployment mit Ansible
Michael Döhler
 
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und AusblickTaugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Philipp Burgmer
 
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesVerteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
Gregor Biswanger
 
Quarkus, GraalVM und co. Java in der Cloud-Native Welt
Quarkus, GraalVM und co. Java in der Cloud-Native WeltQuarkus, GraalVM und co. Java in der Cloud-Native Welt
Quarkus, GraalVM und co. Java in der Cloud-Native Welt
Michael Frembs
 
EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedRené Winkelmeyer
 
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET CoreElectron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Gregor Biswanger
 
Versionskontrolle mit Subversion und Git
Versionskontrolle mit Subversion und GitVersionskontrolle mit Subversion und Git
Versionskontrolle mit Subversion und Git
paultcochrane
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Gregor Biswanger
 
Technische Gründe für schlechte Entwicklungsperformance
Technische Gründe für schlechte EntwicklungsperformanceTechnische Gründe für schlechte Entwicklungsperformance
Technische Gründe für schlechte Entwicklungsperformance
OPEN KNOWLEDGE GmbH
 
iOS: Continuous Integration and One Click Deployments
iOS: Continuous Integration and One Click DeploymentsiOS: Continuous Integration and One Click Deployments
iOS: Continuous Integration and One Click DeploymentsSven Günther
 
Gitlab
GitlabGitlab
Gitlab
heiglandreas
 
Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang Barth
Nagios Conference 2007 |  Pluginprogrammierung in Perl by Wolfgang BarthNagios Conference 2007 |  Pluginprogrammierung in Perl by Wolfgang Barth
Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang Barth
NETWAYS
 
Deployment pipeline mit maven, chef und jenkins
Deployment pipeline mit maven, chef und jenkinsDeployment pipeline mit maven, chef und jenkins
Deployment pipeline mit maven, chef und jenkins
Bild GmbH & Co. KG
 
Punkt.de – Layout-Testing: was geht, was bringt´s, wer braucht´s?
Punkt.de – Layout-Testing: was geht, was bringt´s, wer braucht´s?Punkt.de – Layout-Testing: was geht, was bringt´s, wer braucht´s?
Punkt.de – Layout-Testing: was geht, was bringt´s, wer braucht´s?
punkt.de GmbH
 
Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...
Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...
Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...
Informatik Aktuell
 
Continuous Delivery für Infrastrukturdienste in Container-Umgebungen
Continuous Delivery für Infrastrukturdienste in Container-UmgebungenContinuous Delivery für Infrastrukturdienste in Container-Umgebungen
Continuous Delivery für Infrastrukturdienste in Container-Umgebungen
Nicholas Dille
 
Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1
Gregor Biswanger
 
Fix & fertig: Best Practises für "XPages-Migranten"
Fix & fertig: Best Practises für "XPages-Migranten"Fix & fertig: Best Practises für "XPages-Migranten"
Fix & fertig: Best Practises für "XPages-Migranten"
Oliver Busse
 
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
Christian Mücke
 
Was ist Docker ?
Was ist Docker ?Was ist Docker ?
Was ist Docker ?
Ulrich Gerkmann-Bartels
 

Was ist angesagt? (20)

PHP Deployment mit Ansible
PHP Deployment mit AnsiblePHP Deployment mit Ansible
PHP Deployment mit Ansible
 
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und AusblickTaugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
Taugt AngularJS wirklich was? Erfahrungsbericht und Ausblick
 
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und KubernetesVerteilte Anwendungen bei Azure mit Docker und Kubernetes
Verteilte Anwendungen bei Azure mit Docker und Kubernetes
 
Quarkus, GraalVM und co. Java in der Cloud-Native Welt
Quarkus, GraalVM und co. Java in der Cloud-Native WeltQuarkus, GraalVM und co. Java in der Cloud-Native Welt
Quarkus, GraalVM und co. Java in der Cloud-Native Welt
 
EntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloadedEntwicklerCamp 2014 - DOTS reloaded
EntwicklerCamp 2014 - DOTS reloaded
 
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET CoreElectron.NET: Cross-Platform Desktop Software mit ASP.NET Core
Electron.NET: Cross-Platform Desktop Software mit ASP.NET Core
 
Versionskontrolle mit Subversion und Git
Versionskontrolle mit Subversion und GitVersionskontrolle mit Subversion und Git
Versionskontrolle mit Subversion und Git
 
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
Kuck mal, Node.js! Einstieg für .NET Entwickler mit Visual Studio Code und Ty...
 
Technische Gründe für schlechte Entwicklungsperformance
Technische Gründe für schlechte EntwicklungsperformanceTechnische Gründe für schlechte Entwicklungsperformance
Technische Gründe für schlechte Entwicklungsperformance
 
iOS: Continuous Integration and One Click Deployments
iOS: Continuous Integration and One Click DeploymentsiOS: Continuous Integration and One Click Deployments
iOS: Continuous Integration and One Click Deployments
 
Gitlab
GitlabGitlab
Gitlab
 
Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang Barth
Nagios Conference 2007 |  Pluginprogrammierung in Perl by Wolfgang BarthNagios Conference 2007 |  Pluginprogrammierung in Perl by Wolfgang Barth
Nagios Conference 2007 | Pluginprogrammierung in Perl by Wolfgang Barth
 
Deployment pipeline mit maven, chef und jenkins
Deployment pipeline mit maven, chef und jenkinsDeployment pipeline mit maven, chef und jenkins
Deployment pipeline mit maven, chef und jenkins
 
Punkt.de – Layout-Testing: was geht, was bringt´s, wer braucht´s?
Punkt.de – Layout-Testing: was geht, was bringt´s, wer braucht´s?Punkt.de – Layout-Testing: was geht, was bringt´s, wer braucht´s?
Punkt.de – Layout-Testing: was geht, was bringt´s, wer braucht´s?
 
Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...
Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...
Stephan Kaps – IT-Tage 2015 – Flyway vs. LiquiBase – Battle der Datenbankmigr...
 
Continuous Delivery für Infrastrukturdienste in Container-Umgebungen
Continuous Delivery für Infrastrukturdienste in Container-UmgebungenContinuous Delivery für Infrastrukturdienste in Container-Umgebungen
Continuous Delivery für Infrastrukturdienste in Container-Umgebungen
 
Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1Einführung in Clean Code mit .NET - Teil 1
Einführung in Clean Code mit .NET - Teil 1
 
Fix & fertig: Best Practises für "XPages-Migranten"
Fix & fertig: Best Practises für "XPages-Migranten"Fix & fertig: Best Practises für "XPages-Migranten"
Fix & fertig: Best Practises für "XPages-Migranten"
 
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
GitLab: CI-Pipelines | PHP Usergroup Hamburg 20.03.2018
 
Was ist Docker ?
Was ist Docker ?Was ist Docker ?
Was ist Docker ?
 

Ähnlich wie Eine Stunde was mit Api First!

Die Strategische Bedeutung Von Open Source FüR Das 3 D Internet V2
Die Strategische Bedeutung Von Open Source FüR Das 3 D Internet V2Die Strategische Bedeutung Von Open Source FüR Das 3 D Internet V2
Die Strategische Bedeutung Von Open Source FüR Das 3 D Internet V2
Andreas Mertens
 
Agiles Lernen und Software Entwicklung das OSGi Code Camp 2010
Agiles Lernen und Software Entwicklung das OSGi Code Camp 2010Agiles Lernen und Software Entwicklung das OSGi Code Camp 2010
Agiles Lernen und Software Entwicklung das OSGi Code Camp 2010Christian Baranowski
 
Open Source als Innovator und Treiber von De‐Facto Standards für das Internet...
Open Source als Innovator und Treiber von De‐Facto Standards für das Internet...Open Source als Innovator und Treiber von De‐Facto Standards für das Internet...
Open Source als Innovator und Treiber von De‐Facto Standards für das Internet...
Torsten Fink
 
Bernhard Wick - appserver.io - code.talks 2015
 Bernhard Wick - appserver.io - code.talks 2015 Bernhard Wick - appserver.io - code.talks 2015
Bernhard Wick - appserver.io - code.talks 2015
AboutYouGmbH
 
Microsoft und die Open Source Community - Leaving the death star behind
Microsoft und die Open Source Community - Leaving the death star behindMicrosoft und die Open Source Community - Leaving the death star behind
Microsoft und die Open Source Community - Leaving the death star behind
Christian Heilmann
 
Continuous Integration / Deployment mit Jenkins CI
Continuous Integration / Deployment mit Jenkins CI Continuous Integration / Deployment mit Jenkins CI
Continuous Integration / Deployment mit Jenkins CI
Florian Bosselmann
 
OpenRheinRuhr 2017 - Testgetriebene Entwicklung multimodaler Applikationen
OpenRheinRuhr 2017 - Testgetriebene Entwicklung multimodaler ApplikationenOpenRheinRuhr 2017 - Testgetriebene Entwicklung multimodaler Applikationen
OpenRheinRuhr 2017 - Testgetriebene Entwicklung multimodaler Applikationen
Raphael Groner
 
Stay calm & keep shipping - iOS DevCon 2013
Stay calm & keep shipping - iOS DevCon 2013Stay calm & keep shipping - iOS DevCon 2013
Stay calm & keep shipping - iOS DevCon 2013
superflomo
 
Top 10 Internet Trends 2005
Top 10 Internet Trends 2005Top 10 Internet Trends 2005
Top 10 Internet Trends 2005
Jürg Stuker
 
WhereGroup Firmenprofil
WhereGroup FirmenprofilWhereGroup Firmenprofil
WhereGroup Firmenprofil
Arnulf Christl
 
Dokumentation in agilen Projekten - WebMontag Edition
Dokumentation in agilen Projekten - WebMontag EditionDokumentation in agilen Projekten - WebMontag Edition
Dokumentation in agilen Projekten - WebMontag Edition
Simon Krackrügge
 
2008 - Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
2008 - Gewinnung von OPEN SOURCE Techniken für junge Unternehmen2008 - Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
2008 - Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
Bjoern Reinhold
 
Legacy php - Sanieren oder Ablösen?
Legacy php  - Sanieren oder Ablösen?Legacy php  - Sanieren oder Ablösen?
Legacy php - Sanieren oder Ablösen?
Johann-Peter Hartmann
 
Apache Solr Revisited 2015
Apache Solr Revisited 2015Apache Solr Revisited 2015
Apache Solr Revisited 2015
Olivier Dobberkau
 
WWruhr2018
WWruhr2018WWruhr2018
WWruhr2018
Nico Brünjes
 
Open Standards, Open Source, Open Data. Zuviel des Guten?
Open Standards, Open Source, Open Data. Zuviel des Guten?Open Standards, Open Source, Open Data. Zuviel des Guten?
Open Standards, Open Source, Open Data. Zuviel des Guten?
Arnulf Christl
 
Architectures for .Net Core Applications
Architectures for .Net Core ApplicationsArchitectures for .Net Core Applications
Architectures for .Net Core Applications
Robin Sedlaczek
 
20160229_ModernApplicationDevelopment_Python_KPatenge
20160229_ModernApplicationDevelopment_Python_KPatenge20160229_ModernApplicationDevelopment_Python_KPatenge
20160229_ModernApplicationDevelopment_Python_KPatenge
Karin Patenge
 
Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
Gewinnung von OPEN SOURCE Techniken für junge UnternehmenGewinnung von OPEN SOURCE Techniken für junge Unternehmen
Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
Bjoern Reinhold
 
Modernisierung in Zeiten wie diesen
Modernisierung in Zeiten wie diesenModernisierung in Zeiten wie diesen
Modernisierung in Zeiten wie diesen
enpit GmbH & Co. KG
 

Ähnlich wie Eine Stunde was mit Api First! (20)

Die Strategische Bedeutung Von Open Source FüR Das 3 D Internet V2
Die Strategische Bedeutung Von Open Source FüR Das 3 D Internet V2Die Strategische Bedeutung Von Open Source FüR Das 3 D Internet V2
Die Strategische Bedeutung Von Open Source FüR Das 3 D Internet V2
 
Agiles Lernen und Software Entwicklung das OSGi Code Camp 2010
Agiles Lernen und Software Entwicklung das OSGi Code Camp 2010Agiles Lernen und Software Entwicklung das OSGi Code Camp 2010
Agiles Lernen und Software Entwicklung das OSGi Code Camp 2010
 
Open Source als Innovator und Treiber von De‐Facto Standards für das Internet...
Open Source als Innovator und Treiber von De‐Facto Standards für das Internet...Open Source als Innovator und Treiber von De‐Facto Standards für das Internet...
Open Source als Innovator und Treiber von De‐Facto Standards für das Internet...
 
Bernhard Wick - appserver.io - code.talks 2015
 Bernhard Wick - appserver.io - code.talks 2015 Bernhard Wick - appserver.io - code.talks 2015
Bernhard Wick - appserver.io - code.talks 2015
 
Microsoft und die Open Source Community - Leaving the death star behind
Microsoft und die Open Source Community - Leaving the death star behindMicrosoft und die Open Source Community - Leaving the death star behind
Microsoft und die Open Source Community - Leaving the death star behind
 
Continuous Integration / Deployment mit Jenkins CI
Continuous Integration / Deployment mit Jenkins CI Continuous Integration / Deployment mit Jenkins CI
Continuous Integration / Deployment mit Jenkins CI
 
OpenRheinRuhr 2017 - Testgetriebene Entwicklung multimodaler Applikationen
OpenRheinRuhr 2017 - Testgetriebene Entwicklung multimodaler ApplikationenOpenRheinRuhr 2017 - Testgetriebene Entwicklung multimodaler Applikationen
OpenRheinRuhr 2017 - Testgetriebene Entwicklung multimodaler Applikationen
 
Stay calm & keep shipping - iOS DevCon 2013
Stay calm & keep shipping - iOS DevCon 2013Stay calm & keep shipping - iOS DevCon 2013
Stay calm & keep shipping - iOS DevCon 2013
 
Top 10 Internet Trends 2005
Top 10 Internet Trends 2005Top 10 Internet Trends 2005
Top 10 Internet Trends 2005
 
WhereGroup Firmenprofil
WhereGroup FirmenprofilWhereGroup Firmenprofil
WhereGroup Firmenprofil
 
Dokumentation in agilen Projekten - WebMontag Edition
Dokumentation in agilen Projekten - WebMontag EditionDokumentation in agilen Projekten - WebMontag Edition
Dokumentation in agilen Projekten - WebMontag Edition
 
2008 - Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
2008 - Gewinnung von OPEN SOURCE Techniken für junge Unternehmen2008 - Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
2008 - Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
 
Legacy php - Sanieren oder Ablösen?
Legacy php  - Sanieren oder Ablösen?Legacy php  - Sanieren oder Ablösen?
Legacy php - Sanieren oder Ablösen?
 
Apache Solr Revisited 2015
Apache Solr Revisited 2015Apache Solr Revisited 2015
Apache Solr Revisited 2015
 
WWruhr2018
WWruhr2018WWruhr2018
WWruhr2018
 
Open Standards, Open Source, Open Data. Zuviel des Guten?
Open Standards, Open Source, Open Data. Zuviel des Guten?Open Standards, Open Source, Open Data. Zuviel des Guten?
Open Standards, Open Source, Open Data. Zuviel des Guten?
 
Architectures for .Net Core Applications
Architectures for .Net Core ApplicationsArchitectures for .Net Core Applications
Architectures for .Net Core Applications
 
20160229_ModernApplicationDevelopment_Python_KPatenge
20160229_ModernApplicationDevelopment_Python_KPatenge20160229_ModernApplicationDevelopment_Python_KPatenge
20160229_ModernApplicationDevelopment_Python_KPatenge
 
Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
Gewinnung von OPEN SOURCE Techniken für junge UnternehmenGewinnung von OPEN SOURCE Techniken für junge Unternehmen
Gewinnung von OPEN SOURCE Techniken für junge Unternehmen
 
Modernisierung in Zeiten wie diesen
Modernisierung in Zeiten wie diesenModernisierung in Zeiten wie diesen
Modernisierung in Zeiten wie diesen
 

Eine Stunde was mit Api First!

  • 1. Eine Stunde was mit API FirstEine Stunde was mit API First Microservices bauen mit OpenAPI, Vert.x und Kotlin Jan Weinschenker • Holisticon AG @janweinschenker 1
  • 2. AgendaAgenda 1. Wie entstand dieser Talk? 2. Wir wollen produktiv arbeiten™ 3. API First! — Warum ist das eine gute Idee? 4. Wir unterstützen das™ vert.x und Kotlin 5. Fazit 2
  • 3. Holisticon AG — About usHolisticon AG — About us • @holisticon Die Holisticon AG ist eine Management- und IT-Beratung mit Niederlassungen in Hannover und Hamburg. Wir entwickeln beste Individualsoftware, Webplattformen und Apps. Geschäftsprozesse durchdringen wir und automatisieren sie. Große Datenmengen machen wir mit Smart-Data-Ansätzen beherrschbar. ... und das alles agil. www.holisticon.de 3 . 1
  • 4. Holisticon AG — About usHolisticon AG — About us 3 . 2
  • 5. 1. Wie entstand dieser Talk?1. Wie entstand dieser Talk? Ein Projekt mit > 70 Menschen Viele Teams Microservice-Architektur Java, Scala, Kotlin, JavaScript, Typescript, ... 4 . 1
  • 6. 1. Wie entstand dieser Talk?1. Wie entstand dieser Talk? Vergleichsweise wenige Entwickler bauen Software für viele andereVergleichsweise wenige Entwickler bauen Software für viele andere Entwickler.Entwickler. Häufig disruptive Änderungen an Code und Schnittstellen (APIs). 4 . 2
  • 7. 1. Wie entstand dieser Talk?1. Wie entstand dieser Talk? Andere Entwicklerteams treten als Kunden (i.S.v. Scrum) auf Wenig Zeit für Support und das Schreiben von Doku Großer und steigender Bedarf an guter Dokumentation und Entwickler-Support 4 . 3
  • 8. 1. Wie entstand dieser Talk?1. Wie entstand dieser Talk? Über Sinn und Unsinn geschriebener Doku ... 4 . 4
  • 9. Sigberg’s First Law of DocumentationSigberg’s First Law of Documentation In order for someone to read a document they must first:In order for someone to read a document they must first: Know that it exists Know where to find it Care enough about the subject to actually take the time out of their life to look it up https://medium.com/@thorbjorn.sigberg/sigbergs-laws-of-documentation-fab155b2415b 4 . 5
  • 10. Arnold's Laws of DocumentationArnold's Laws of Documentation 1. If it should exist, it doesn’t 2. If it does exist, it’s out of date 3. Only documentation for useless programs transcends the first two laws aus: Murphy's Law von Arthur Bloch 4 . 6
  • 11. aus:aus: Extreme ProgrammingExtreme Programming Josh Susser, devchat.tv Podcast Kent Beck “a comment is a lie waiting to happen” “A comment is the code’s way of asking to be more clear”. 4 . 7
  • 12. 1. Wie entstand dieser Talk?1. Wie entstand dieser Talk? Durch die Erkenntnis, dass es sehr schwierig und gleichzeitig sehr notwendig ist, gute Doku zu haben. Wissenstransfer zwischen Entwicklern ist essentiell. 4 . 8
  • 13. 1. Wie entstand dieser Talk?1. Wie entstand dieser Talk? ZusammenfassungZusammenfassung Doku und Implementierung entwickeln sich auseinander Wie kann man diese Divergenz vermeiden? 4 . 9
  • 14. 2. Wir wollen produktiv arbeiten™.2. Wir wollen produktiv arbeiten™. Dafür sind wir auf das Wissen anderer Entwickler*innen angewiesen. Funktionierender Code ist das beste Medium für diesen Wissenstransfer. 5 . 1
  • 15. 2. Wir wollen produktiv arbeiten™.2. Wir wollen produktiv arbeiten™. WunschzustandWunschzustand APIs müssen ohne große Hürden anfassbar sein Anstatt sich in Doku einzulesen, APIs einfach ausprobieren z.B. API-Spielwiese im Webbrowser □ mehr dazu später ... 5 . 2
  • 16. 2. Kein Appell gegen geschriebene Doku!2. Kein Appell gegen geschriebene Doku! Für dasFür das Big PictureBig Picture:: Geschriebene Doku, Schaubilder und Diagramme Entwicklerdoku:Entwicklerdoku: Funktionierender, intuitiver Code Tools und UI, die einfach anzuwenden sind 5 . 3
  • 17. 3. API First!3. API First! Alles steht und fällt mit der Güte der Schnittstelle! API muss konsistent und intuitv sein Nachträgliche Änderungen an API sind teuer 6 . 1
  • 18. 3. API First!3. API First! Ergo:Ergo: API als First-Class-Citizen im Entwicklungsprozess Schnittstellenbeschreibung (API Spec) Entwurf vor der Implementierung : □ Ressourcen, Operationen, Datenobjekte, Statuscodes 6 . 2
  • 19. 3. API First!3. API First! Frühere Ansätze für API Specs:Frühere Ansätze für API Specs: CORBA IDL (1991 bis 2011*) WSDL (2000 bis 2007*) Apache Thrift (2011 bis 2017*) *Letztes Release 7 . 1
  • 20. 3. API First!3. API First! Alternativen im REST-ZeitalterAlternativen im REST-Zeitalter RAML — RESTful API Modeling Language API Blueprint (Markdown) Swagger / OpenAPI 7 . 2
  • 21. 3. API First!3. API First! Alternativen im REST-ZeitalterAlternativen im REST-Zeitalter RAML — RESTful API Modeling Language API Blueprint (Markdown) Swagger / OpenAPI 7 . 2
  • 22. 3. Swagger / OpenAPI3. Swagger / OpenAPI Entscheidung für OpenAPI, weil:Entscheidung für OpenAPI, weil: Sehr gutes Tooling Unterstützung für alle gängigen Sprachen Einbindung in bestehende CI/CD-Prozesse leicht möglich 7 . 3
  • 23. 3. Swagger / OpenAPI3. Swagger / OpenAPI API Spec basierend auf YAML Hieß Swagger seit 2011 2016 umbenannt in OpenAPI Umfangreiches Tooling □ Gradle, Maven, Swagger UI, etc □ Generatoren für Testdaten 7 . 4
  • 24. 3. Swagger / OpenAPI3. Swagger / OpenAPI Generator für Client- und Server-Code, SDKs, ... Java (Jersey1.x, Jersey2.x, OkHttp, Retrofit1.x, Retrofit2.x, Feign, RestTemplate, RESTEasy, Vertx, Google API Client Library for Java, Rest-assured, Spring 5 Web Client) Scala, Kotlin, Dart, Ada, JavaScript, Typescript-Angular, Clojure, C#, C++, Swift, Ruby, Python, Rust, Haskell, Elm, ... Swagger UI 7 . 5
  • 25. 3. Swagger / OpenAPI3. Swagger / OpenAPI API Spec für das REST-Zeitalter paths: /apod: # https://www.my-cool-service/apod post: summary: create an apod with the specified date requestBody: required: true description: The rating you want to set content: application/json: schema: $ref: '#/components/schemas/ApodRequest' responses: '201': description: Apod entry created headers: location: schema: type: string description: The location of the created resource. 7 . 6
  • 26. 3. Swagger / OpenAPI3. Swagger / OpenAPI API Spec für das REST-Zeitalter paths: /apod: # https://www.my-cool-service/apod get: summary: get all apods responses: '200': description: An array of apods or an empty array, if no data is availab content: application/json: schema: type: array items: $ref: '#/components/schemas/Apod' '500': description: Server side error content: application/json: schema: $ref: '#/components/schemas/Error' 7 . 7
  • 27. 3. Swagger / OpenAPI3. Swagger / OpenAPI API Spec für das REST-Zeitalter components: schemas: Apod: description: the apod data object required: - id properties: id: readOnly: true type: string dateString: readOnly: true type: string title: readOnly: true type: string imageUriHd: readOnly: true type: string nullable: true 7 . 8
  • 28. 3. Wir wollen produktiv arbeiten™3. Wir wollen produktiv arbeiten™ API Spec, kann ...API Spec, kann ... den Medienbruch beim Implementieren vermeiden über Repositories im Projekt verteilt und versioniert werden Kann uns und anderen Entwicklern das Leben erleichtern 7 . 9
  • 29. 4. Wir unterstützen das™:4. Wir unterstützen das™: KotlinKotlin.. Schlauer Compiler Statische Typisierung Wenig Boilerplate Excellente IDE Unterstützung, zumindest wenn der Hersteller Jetbrains heißt 8 . 1
  • 30. 4. Wir unterstützen das™:4. Wir unterstützen das™: KotlinKotlin.. OpenAPI generiert u.a. Kotlin Data classes 8 . 2
  • 31. 4. Wir unterstützen das ™:4. Wir unterstützen das ™: Vert.xVert.x Reactive Streams: Observable, Single, Maybe, Completable, ... Multi-Reactor-Pattern, ähnlich Node.js. Unabhängige Komponenten (Verticles) kommunizieren über einen Eventbus. Single Threaded, Non-Blocking 8 . 3
  • 32. 4. Wir unterstützen das ™:4. Wir unterstützen das ™: Vert.xVert.x`` 8 . 4
  • 33. 4. Wir unterstützen das ™:4. Wir unterstützen das ™: Vert.xVert.x Vert.x verwendet die API-Spec für das Request-Routing und die Request-Validierung. OpenAPI3RouterFactory .rxCreate(vertx, "swagger.yaml") .map { routerFactory -> routerFactory.mountServicesFromExtensions() } .flatMap { httpServer -> httpServer.rxListen(port) } .subscribe() 8 . 5
  • 34. 4. Unser Beispiel: Astronomy Picture of the Day4. Unser Beispiel: Astronomy Picture of the Day https://apod.nasa.gov https://api.nasa.gov 8 . 6
  • 35. 4. Wir unterstützen das ™:4. Wir unterstützen das ™: Vert.xVert.x /apod/{apodId}: x-vertx-event-bus: address: apod_query_service.apod # >>> Mapping auf implementierende Klasse get: summary: get an apod for the specified date operationId: getApodForDate # >>> ID dieser Operations x-vertx-event-bus: method: getApodForDate # >>> Mapping auf implementierende Method parameters: - name: apodId in: path required: true description: the id of the picture schema: type: string pattern: '^d+$' 8 . 7
  • 36. DemoDemo 1. OpenAPI Spec 2. Swagger UI 3. Einen weiteren Endpunkt implementieren 8 . 8
  • 37. FazitFazit API First! kann den Projektalltag erheblich vereinfachen Ideal für Microservices Tooling ist wichtig 9
  • 38. Vielen DankVielen Dank CreditsCredits Icons von Eucalp. https://www.flaticon.com/authors/eucalyp 10
  • 39. MoreMore LinksLinks □ □ □ □ Sourcecode des Beispiels bei Github https://github.com/holisticon/vertx-kotlin-example Swagger.io https://swagger.io Swagger editor https://editor.swagger.io vert.x https://vertx.io 11