SlideShare uma empresa Scribd logo
1 de 34
Baixar para ler offline
#WISSENTEILEN
@_openKnowledge
API-First
Design mit
Web-API Design
mit Java
BRANCHENNEUTRALE SOFTWAREENTWICKLUNG UND IT-BERATUNG
ÜBER OPEN KNOWLEDGE
ÜBER UNS
Wer bin ich - und wenn ja, wie viele?
• Enterprise Architect
• Enterprise & mehr
• Autor, Speaker, Berater, Coach
• Tauch & Ski Enthusiast
• Grillmeister & Hobbygärtner ;)
STEPHAN MÜLLER
SM
#WISSENTEILEN
“API design should not be constrained by
what can be done giving existing limitations,
but rather by what should be done.”
Jennifer Riggins, ProgrammableWeb
#WISSENTEILEN
„Das* API ist das
UI des Entwicklers.“
(*wer möchte, darf auch “die API“ sagen)
#WISSENTEILEN
„Entscheidend ist, dass das API aus
Sicht des Entwicklers konsistent und
leicht anwendbar ist.
#WISSENTEILEN
Event-Feed
WebSocket
Server-SentEvents
GraphQL
REST
Web-APIs
#WISSENTEILEN
Beispielanwendung: Todo-Liste
#WISSENTEILEN
Todo App
SPA
Todo Service
JEE
REST
GraphQL
Event-Feed
WebSocket
Server-Sent Events
Web-APIs
#WISSENTEILEN
REST
Web-APIs
- REpresentational State Transfer
- Architekturstil definiert von Roy Fielding
- Ausnutzung „aller“ HTTP Methoden & Hypermedia
- „beliebige“ Mediatypes / Datenformate
Hypermedia
URI
HTTP
#WISSENTEILEN
GraphQL
Web-APIs
- SQL-Like Query Language
- von Facebook als Alternative zu REST entwickelt
- komplexe Abfragen via Objekt-Graph möglich
- liefert Abfrageergebnis in einem einzigen Round-Trip
- mehr Flexibilität für Clients
#WISSENTEILEN
Server-SentEvents
Web-APIs
- W3C Standard für Server-Push
- Sendet UTF-8 Daten vom Server zum Client
- definierte Datenstruktur & Media-Type für Event
- initialer Verbindungsaufbau durch Client
- built-in Support für reconnect (Timeout)
- aber Anzahl paralleler Verbindungen begrenzt
#WISSENTEILEN
WebSocket
Web-APIs
- W3C Standard für Full-Duplex Kommunikation
- Socket-Verbindung über TCP
- lediglich EINE Connection (up/down)
- extrem leichtgewichtig dank HTTP Upgrade
- Low-Level Protokoll ohne Header, Statuscodes, etc.
#WISSENTEILEN
Event-Feed
Web-APIs
- API zur Bereitstellung von Events
- ermöglicht Clients Ereignisse zu verarbeiten
- Anwendung u.a. beim Event-Sourcing
- Atom, Kafka Streams (nur mit Apache Kafka)
#WISSENTEILEN
Web-APIs
NewTodo
- title: string
- description: string
- dueDate: date-time
- done: boolean
ModifiedTodo
- title: string
- description: string
- dueDate: date-time
- done: boolean
TodoList
- id: int64
- title: string
- dueDate: date-time
- done: boolean
TodoFull
- id: int64
- title: string
- description: string
- dueDate: date-time
- done: boolean
TodoEvent
- changeType: enum
- changeDate: date-time
- todo: TodoFull
Write-Modell Read-Modell Event-Modell Feed-Modell
Feed (ASF)
- id: URI
- title: string
- subtitle: string
- …
#WISSENTEILEN
Web-APIs - Dokumentation
ü Aufrufe und Abfragen sind dokumentiert
ü Beispiele für die erwartete und zu erwartende Payload
→ OpenAPI Specification (fka Swagger)
→ GraphQL Schema
#WISSENTEILEN
Web-APIs - Dokumentation
#WISSENTEILEN
Web-APIs - Payload
ü effizient, kompakt & schnell
ü breiter Language/Framework Support
ü Developer/IDE friendly
→ JSON == Native Web Format
→ binäres Format (Protocol Buffers, Apache Avro) wenn notwendig
#WISSENTEILEN
Web-APIs - Payload
REST GraphQL
#WISSENTEILEN
Web-APIs - Fehlerhandling
☹ Stacktraces
☹ falsche Statuscodes
☹ unerwartete Content-Types
☹ komplexe Datenstrukturen
☹ Textanalyse
#WISSENTEILEN
Web-APIs - Fehlerhandling
ü Fehler als alternative Antwort berücksichtigen
ü Fehlercode für client-spezifische Fehlermeldungen
ü Fehlernachricht für Entwickler & Operator
ü Fehlerart kenntlich machen (Statuscode, Fehlertyp)
→ einfache Fehlerdatenstruktur
→ in GraphQL über Extensions
#WISSENTEILEN
Web-APIs - Fehlerhandling
REST GraphQL
#WISSENTEILEN
Web-APIs - Validierung
ü transparente Prüfung der Anfragedaten
ü syntaktische Validierung (Pflichtfeld, Eingabelänge & -format)
ü semantische Validierung (mit Einschränkung)
ü individuelle Fehlercodes & verständliche Fehlermeldungen
→ Bean Validation
→ Custom Constraints für Crossfield & semantische Validierung
→ Payload für individuelle Fehlercodes
#WISSENTEILEN
Web-APIs - Validierung
#WISSENTEILEN
Web-APIs - Validierung
REST
GraphQL
#WISSENTEILEN
Web-APIs - Security
☹ Password wird bei jeder Anfrage übertragen (Basic Auth)
☹ Jeder Service muss Benutzer & Credentials kennen
☹ Benutzersession als State auf dem Server (Skalierbarkeit ⚡)
→ SSO Server als Identity Provider nutzen
→ Token based Security (OAuth2, OpenID_Connect)
#WISSENTEILEN
Web-APIs - Security
ü jeder Request wird einzeln autorisiert
ü rollen-basierte Zugriffskontrolle je Anfrage
ü Token liefert zusätzliche Informationen über Nutzer
→ JSON Web Token nutzen
#WISSENTEILEN
Web-APIs - Security
#WISSENTEILEN
Web-APIs - Versionierung
- Versionierung über URI
Variante 1: http://host/todo-service/api/todos-v2
Variante 2: http://host/todo-service/api/v2/todos
Variante 3: http://host-v2/todo-service/api/todos
- Versionierung über Accept-Header / custom Media-Type
z.B. application/vnd.ok.todo.v1+json
#WISSENTEILEN
http://apistylebook.com/design/guidelines/
#WISSENTEILEN
http://zalando.github.io/restful-api-guidelines/
#WISSENTEILEN
FRAGEN
? ? ?
Kontakt
STEPHAN MÜLLER
ENTERPRISE ARCHITECT
stephan.mueller@openknowledge.de
+49 (0)441 4082 – 0
@_openknowledge
OFFENKUNDIGGUT
#WISSENTEILEN
Bildnachweise
#01: © dzone.com
All other pictures inside this presentation orginate
from pixabay.com or were created by my own.
#WISSENTEILEN

Mais conteúdo relacionado

Semelhante a Web-API-Design in Java

iOS Apps mit Webtechnologien erstellen
iOS Apps mit Webtechnologien erstelleniOS Apps mit Webtechnologien erstellen
iOS Apps mit Webtechnologien erstellen
Michael Kühnel
 

Semelhante a Web-API-Design in Java (20)

JavaScript und trotzdem Softwerker
JavaScript und trotzdem SoftwerkerJavaScript und trotzdem Softwerker
JavaScript und trotzdem Softwerker
 
API-Design, Microarchitecture und Testing
API-Design, Microarchitecture und TestingAPI-Design, Microarchitecture und Testing
API-Design, Microarchitecture und Testing
 
2007 - Basta!: Nach soa kommt soc
2007 - Basta!: Nach soa kommt soc2007 - Basta!: Nach soa kommt soc
2007 - Basta!: Nach soa kommt soc
 
iOS Apps mit Webtechnologien erstellen
iOS Apps mit Webtechnologien erstelleniOS Apps mit Webtechnologien erstellen
iOS Apps mit Webtechnologien erstellen
 
API Design Strategy
API Design StrategyAPI Design Strategy
API Design Strategy
 
Api Platform: the ultimate API Platform
Api Platform: the ultimate API PlatformApi Platform: the ultimate API Platform
Api Platform: the ultimate API Platform
 
AngularJs
AngularJsAngularJs
AngularJs
 
Icinga 2009 at Nagios Workshop
Icinga 2009 at Nagios WorkshopIcinga 2009 at Nagios Workshop
Icinga 2009 at Nagios Workshop
 
Eine Stunde was mit Api First!
Eine Stunde was mit Api First!Eine Stunde was mit Api First!
Eine Stunde was mit Api First!
 
Schwachstellen In Sap Web Anwendungen (OWASP Germany 2009)
Schwachstellen In Sap Web Anwendungen (OWASP Germany 2009)Schwachstellen In Sap Web Anwendungen (OWASP Germany 2009)
Schwachstellen In Sap Web Anwendungen (OWASP Germany 2009)
 
Offline-first Architekturen: Wer bitte braucht schon Internet
Offline-first Architekturen: Wer bitte braucht schon InternetOffline-first Architekturen: Wer bitte braucht schon Internet
Offline-first Architekturen: Wer bitte braucht schon Internet
 
Cloud APIs - Wettbewerbsvorteile durch Einbindung externer Services
Cloud APIs - Wettbewerbsvorteile durch Einbindung externer ServicesCloud APIs - Wettbewerbsvorteile durch Einbindung externer Services
Cloud APIs - Wettbewerbsvorteile durch Einbindung externer Services
 
Ruby on Rails SS09 02
Ruby on Rails SS09 02Ruby on Rails SS09 02
Ruby on Rails SS09 02
 
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
 
Client side webdevelopment with jet
Client side webdevelopment with jetClient side webdevelopment with jet
Client side webdevelopment with jet
 
Agile Softwareentwicklung mit Rails
Agile Softwareentwicklung mit RailsAgile Softwareentwicklung mit Rails
Agile Softwareentwicklung mit Rails
 
Java in the Cloud - am Beispiel der Google App Engineg
Java in the Cloud - am Beispiel der Google App EnginegJava in the Cloud - am Beispiel der Google App Engineg
Java in the Cloud - am Beispiel der Google App Engineg
 
Automatisierung mit grunt
Automatisierung mit gruntAutomatisierung mit grunt
Automatisierung mit grunt
 
AngularJS
AngularJSAngularJS
AngularJS
 
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
CodeTalks Vortrag: Automatisierung mit Ansible & Jenkins @ LeanIX Enterprise ...
 

Mais de OPEN KNOWLEDGE GmbH

Mais de OPEN KNOWLEDGE GmbH (20)

Warum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AI
Warum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AIWarum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AI
Warum der Computer "Nein" sagt - Mehr Nachvollziehbarkeit dank Explainable AI
 
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
Machine Learning? Ja gerne! Aber was und wie? Eine Kurzanleitung für den erfo...
 
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die CloudFrom Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
From Zero to still Zero: Die schönsten Fehler auf dem Weg in die Cloud
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data ImputationFEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
FEHLENDE DATEN? (K)EIN PROBLEM!: Die Kunst der Data Imputation
 
Nie wieder Log-Files!
Nie wieder Log-Files!Nie wieder Log-Files!
Nie wieder Log-Files!
 
Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!Cloud-native and Enterprise Java? Hold my beer!
Cloud-native and Enterprise Java? Hold my beer!
 
From Zero to still Zero: The most beautiful mistakes going into the cloud.
From Zero to still Zero: The most beautiful mistakes going into the cloud. From Zero to still Zero: The most beautiful mistakes going into the cloud.
From Zero to still Zero: The most beautiful mistakes going into the cloud.
 
API Expand Contract
API Expand ContractAPI Expand Contract
API Expand Contract
 
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & Co
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & CoReady for the Future: Jakarta EE in Zeiten von Cloud Native & Co
Ready for the Future: Jakarta EE in Zeiten von Cloud Native & Co
 
Shared Data in verteilten Architekturen
Shared Data in verteilten ArchitekturenShared Data in verteilten Architekturen
Shared Data in verteilten Architekturen
 
Machine Learning mit TensorFlow.js
Machine Learning mit TensorFlow.jsMachine Learning mit TensorFlow.js
Machine Learning mit TensorFlow.js
 
KI und Architektur
KI und ArchitekturKI und Architektur
KI und Architektur
 
It's not Rocket Science: Neuronale Netze
It's not Rocket Science: Neuronale NetzeIt's not Rocket Science: Neuronale Netze
It's not Rocket Science: Neuronale Netze
 
Shared Data in verteilten Systemen
Shared Data in verteilten SystemenShared Data in verteilten Systemen
Shared Data in verteilten Systemen
 
Business-Mehrwert durch KI
Business-Mehrwert durch KIBusiness-Mehrwert durch KI
Business-Mehrwert durch KI
 
Mehr Sicherheit durch Automatisierung
Mehr Sicherheit durch AutomatisierungMehr Sicherheit durch Automatisierung
Mehr Sicherheit durch Automatisierung
 
Supersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: QuarkusSupersonic Java für die Cloud: Quarkus
Supersonic Java für die Cloud: Quarkus
 
Hilfe, ich will meinen Monolithen zurück!
Hilfe, ich will meinen Monolithen zurück!Hilfe, ich will meinen Monolithen zurück!
Hilfe, ich will meinen Monolithen zurück!
 
Das ist doch alles nur Frontend - Wer braucht da schon Architektur?
Das ist doch alles nur Frontend - Wer braucht da schon Architektur?Das ist doch alles nur Frontend - Wer braucht da schon Architektur?
Das ist doch alles nur Frontend - Wer braucht da schon Architektur?
 

Web-API-Design in Java