SlideShare ist ein Scribd-Unternehmen logo
1 von 132
Downloaden Sie, um offline zu lesen
Web APIs
Jenseits von REST & Request/Response
Lars Röwekamp
CIO New Technologies
@mobileLarson
@_openknowledge
#WISSENTEILEN
Branchenneutrale Softwareentwicklung und IT-Beratung
ÜBER OPEN KNOWLEDGE
#WISSENTEILEN
Lars Röwekamp (a.k.a. @mobileLarson)
ÜBER MICH
LR
#WISSENTEILEN
Wer bin ich - und wen ja, wie viele?
• CIO New Technologies
• Enterprise & Mobile
• Author, Speaker, Coach & Mentor
• Snowboard & MTB Enthusiast
• mehrfacher Vater, einfacher Ehemann
Das kleine
REST 1x1
Das kleine REST 1x1
#WISSENTEILEN
REpresentational State Transfer is about ...
• Architectural Design Style
• Client-Server
• Stateless
• Cache
• Uniform Interface
• Layered System
Das kleine REST 1x1
#WISSENTEILEN
REpresentational State Transfer
• Identifikation durch URL
• Manipulation durch Representation
• Selbstbeschreibende Messages
• Hypermedia
/orders/123JSON/XML
GET, POST, PUT, DELETE
Media Types, Headers, ...References
Das kleine REST 1x1
#WISSENTEILEN
...	/orders/ ... /orders/123
Liste	aller	Bestellungen einzelne Bestellung	123
erzeuge	neuen Bestellung ERROR
ändere	„Liste“	von	
Bestellung
ändere	Bestellung 123	sonst	ERROR
lösche	alle	Bestellungen lösche	Bestellung 123
Nomen
GET
POST
PUT
DELETE
Single Item URIList URI
Plural
Das kleine REST 1x1
#WISSENTEILEN
Golden rules of REST
• „We only need two URLs“
• „Verbs are bad, nouns are good“
• „Plurals are even better“
• „The web is your friend“
• „There is always a root (associations)“
• „There is always a parameter (complex stuff)“
Das kleine REST 1x1
#WISSENTEILEN
„There is always a root“
• GET /orders/123/ingredients
• GET /orders/123/ingredients/456
• GET /orders/123/ingredients/milk
• PUT /orders/123/ingredients/milk
• POST /orders/123/ingredients/milk
• DELETE /orders/123/ingredients/milk
Das kleine REST 1x1
#WISSENTEILEN
„There is always a parameter“
• Path für Ressource Identifier
• Query für Abfrageparameter, Filter, etc.
• Body für Ressource-spezifische Logik
• Header für globale, plattformweite Parameter
#WISSENTEILEN
Das kleine REST 1x1
#WISSENTEILEN
Headers? Pro Tipp: Use them!
• Version-Header
• Location-Header
• Accept-Header
• Content-Type
• Link-Header
• X-Custom-Header (Override Method, Limit, ...)
Das kleine REST 1x1
#WISSENTEILEN
Status Codes? Pro Tipp: Use them!
• 1xx: Hold on ...
• 2xx: Here you go!
• 3xx: Go away!
• 4xx: You f#!?ed up!
• 5xx: I f#!?ed up!
Das kleine REST 1x1
#WISSENTEILEN
Status Codes? Pro Tipp: Use them!
• 1xx: Hold on ...
• 2xx: Here you go!
• 3xx: Go away!
• 4xx: You f#!?ed up!
• 5xx: I f#!?ed up!
(http://restlet.com/http-status-codes-map)
Das kleine REST 1x1
#WISSENTEILEN
HATEOAS? Pro Tipp: ... WAIT!
• What the heck is Hateoas?
REST & Evolution
#WISSENTEILEN
REST & Hateoas
„If the engine of application state (and
hence the API) is not driven by hypertext,
then it cannot be RESTful and cannot be a
REST API.“
Roy	Fielding
#WISSENTEILEN
#WISSENTEILEN
REST & Hateoas
„A REST API should be entered with no
prior knowledge beyond the initial URI ...
From that point on, all application state
transitions must be driven by the client
selection of server-provides choices ...“
Roy	Fielding
#WISSENTEILEN
REST & Hateoas
Entrypoint:
/orders
#WISSENTEILEN
REST & Hateoas
// Response with link header for HYPERMEDIA navigation
// after calling „POST .../orders/ <order ... />“
HTTP/1.1. 201 Created
[various other headers]
Link: <.../orders/1234>; rel=„cancel“
<.../orders/1234>; rel=„update“,
<.../orders/1234>; rel=„delete“,
<.../payment/1234>; rel=„pay“
#WISSENTEILEN
REST & Hateoas
// Response with link header for HYPERMEDIA navigation
// after calling „GET .../orders?page=10“
HTTP/1.1. 206 Partial Content
[various other headers]
Link: <.../orders?page=1>; rel=„first“
<.../orders?page=9>; rel=„next“,
<.../orders?page=11>; rel=„prev“,
<.../orders?page=17>; rel=„last“
#WISSENTEILEN
demo$ rest 1x1
demo$ |
#WISSENTEILEN
REST & Hateoas
// Response with link header for HYPERMEDIA navigation
// after calling „GET .../orders?page=10“
HTTP/1.1. 206 Partial Content
[various other headers]
Link: <.../orders?page=1>; rel=„first“
<.../orders?page=9>; rel=„next“,
<.../orders?page=11>; rel=„prev“,
<.../orders?page=17>; rel=„last“
Wait, does this
make sense?
REST & Pagination
REST & Pagination
#WISSENTEILEN
Wie navigiere ich durch Ressourcen?
• Path Parameter?
• Query Parameter?
• Client Side Calculation?
• Server Side Calculation?
#WISSENTEILEN
REST & Pagination
// List page 4 of offers
// Is page a query parameter?
GET /offers?page=4 HTTP/1.1
// Or is page a „virtual“ resource?
GET /offers/page/4 HTTP/1.1
BTW: what does
„page 4“ mean?
#WISSENTEILEN
REST & Pagination
// List next 5 offers starting from offer 10
// Or is page x a result of offset and limit?
GET /offers?offset=10&limit=5 HTTP/1.1
// Response with success code and link header for
// navigation purpose
HTTP/1.1. 206 Partial content
Link: <.../orders?offset=0&limit=5>; rel=„first“
<.../orders?offset=5&limit=5>; rel=„prev“,
<.../orders?offset=15&limit=5>; rel=„next“,
<.../orders?offset=40&limit=2>; rel=„last“
BTW: What‘s about
filtering, sorting, ....
REST & Queries
REST & Queries
#WISSENTEILEN
Was ist eigentlich mit ...
• komplex(er)en Anfragen?
• eingeschränkten Rückgabeobjekten?
• (alternativen) Sortierungen?
• alternativen Rückgabeformat?
Und wie sieht es mit „allgemeiner“ Suche aus?
#WISSENTEILEN
REST & Queries
// FILTERING: List of paid orders (2015-12-20)
// Common Style
GET /orders?date=20151220&status=payed HTTP/1.1
[various other headers]
#WISSENTEILEN
REST & Queries
// FILTERING: Details of order 3: product, date & status
// Facebook Style
GET /orders/3?fields=product,date,status HTTP/1.1
[various other headers]
GET /orders/3?fields=item.product,date,status HTTP/1.1
[various other headers]
// LinkedIn Style
GET /orders/3:(product, date, status) HTTP/1.1
[various other headers]
#WISSENTEILEN
REST & Queries
// FILTERING: Details of order 3
// without date, status
GET /orders/3?exclude=date,status HTTP/1.1
[various other headers]
// predefined payload (compact = product, date, status)
GET /orders/3?style=compact HTTP/1.1
[various other headers]
BTW: what does
„compact“ mean?
#WISSENTEILEN
REST & Queries
// FILTERING: Details of order 3
// using PREFER HEADER for response payload definition
GET /orders/3 HTTP/1.1
Content-Type: application/json
Prefer: return=compact-format
HTTP 1.1 200 OK
Content-Type: application/json; charset=utf-8
Preference-Applied: return=compact
#WISSENTEILEN
REST & Queries
// SORTING: List of 10 orders sorted by date and item
// SQL Style
GET /orders?sort=date+DESC,item+ASC&count=10 HTTP/1.1
// Sort and asc/desc combination, ascending as default
GET /orders?sort=date,item&desc=date&count=10 HTTP/1.1
// use prefix „-“ for descending, ascending as default
GET /orders?sort=-date,item&count=10 HTTP/1.1
#WISSENTEILEN
REST & Queries
// FORMATS: List of orders in alternative format xml
// Google style
GET /orders?alt=xml HTTP/1.1
// Foursquare style (v1)
GET /orders.xml HTTP/1.1
// Digg style
GET /orders?type=xml HTTP/1.1
Accept: application/xml
#WISSENTEILEN
REST & Queries
// FULL TEXT SEARCH: Fulltext search for „coffee“
// Global style
GET /search?q=coffee HTTP/1.1
// Scoped style
GET /orders/search?q=coffee HTTP/1.1
GET /orders?q=coffee HTTP/1.1
// Formatted style
GET /search.xml?q=coffee HTTP/1.1
GET /orders/search.xml?q=coffee HTTP/1.1
#WISSENTEILEN
REST & Queries
// ADVANCED SEARCH: „coffee with milk for 2 €“
// Query for ...
GET /orders?type=coffee&ingredient=milk&price=2 HTTP/1.1
BTW: AND or OR or
AND/OR?
#WISSENTEILEN
REST & Queries
// ADVANCED SEARCH: „coffee WITH milk for LESS THAN 2 €“
// Query for ...
GET /orders?
query=type=coffee+ingredient=milk+price<=2
Build your own
„Query Language“?
RQL
RQL
#WISSENTEILEN
Resource Query Language
• Object-Style Query Language
• FIQL Superset (erweiterbar)
• Spezifikation & JS Parser (Client & Server)
• JS Array, SQL, MongoDB, Elastic Search
• Java Parser + JPA Criteria Builder
#WISSENTEILEN
RQL
// ADVANCED SEARCH: „coffee WITH milk for LESS THAN 2 €“
// RQL query ... (must possibly be encoded!)
GET /orders?query=
and(eq(type,coffee),
or(eq(ingredients,MILK),lt(price,2))
// RQL alternative query – FIQL (URI friendly) - ...
GET /orders?query=
type==coff*;(ingredients==MILK,price=lt=2)
#WISSENTEILEN
demo$ reql
demo$ |
#WISSENTEILEN
GraphQL
#WISSENTEILEN
GraphQL
#WISSENTEILEN
GraphQL
GraphQL
#WISSENTEILEN
Wer genau ist eigentlich dieser „Luke“?
• GET .../people/1
GraphQL
#WISSENTEILEN
Wer genau ist eigentlich dieser „Luke“ und in
welchen Filmen hat er mitgespielt?
• GET .../film/1
• GET .../film/2
• GET .../film/3
• GET .../people/1/films (if offered via Endpoint)
GraphQL
#WISSENTEILEN
Wer genau ist eigentlich dieser „Luke“ und in
welchen Filmen hat er mitgespielt und auf
welchen Schiffen ist er gefahren?
• GET .../starship/12
• GET .../starship/22
• GET .../peolple/1/starship (if offered)
GraphQL
#WISSENTEILEN
Wie alt ist Luke und welche Haarfarbe hat er?
Mit welchem “Spruch“ wurden die Filme
eröffnet in denen er mitgespielt hat?
Und wie teuer waren überhaupt die Schiffe auf
denen er gefahren ist?
• GET .../#1?F#CKING/detail (n+1 problem?)
• GET .../#1?F#CKING/all (job problem)
#WISSENTEILEN
GraphQL
Umdenken du musst!
GraphQL
#WISSENTEILEN
GraphQL Motivation
„ We see a conflict between the desire to load
all information in a single round trip while
keeping REST resources well isolated.”
(Facebook,	2012)
GraphQL
#WISSENTEILEN
GraphQL Idee
• Beliebige Abfragen via Objekt-Graph
auf dem ich navigieren kann.
• Lieferung des Abfrage-Results in einem
einzigen Round-Trip.
#WISSENTEILEN
GraphQL
#WISSENTEILEN
GraphQL
#WISSENTEILEN
GraphQL
GraphQL
#WISSENTEILEN
GraphQL Charakteristika
• hierarchicial
• product centric
• strongly typed & instrospective
• client specific queries
• application-layer protokol
#WISSENTEILEN
GraphQL
Fragen, was du willst,
du musst!
GraphQL
#WISSENTEILEN
Wie alt ist Luke und welche Haarfarbe hat er?
Mit welchem “Spruch“ wurden die Filme
eröffnet in denen er mitgespielt hat?
Und wie teuer waren überhaupt die Schiffe auf
denen er gefahren ist?
#WISSENTEILEN
GraphQL
#WISSENTEILEN
GraphQL
Wie alt ist Luke und welche
Haarfarbe hat er?
Mit welchem “Spruch“ wurden
die Filme eröffnet in denen er
mitgespielt hat?
Und wie teuer waren
überhaupt die Schiffe auf
denen er gefahren ist?
#WISSENTEILEN
GraphQL
Wie alt ist Luke und welche
Haarfarbe hat er?
Mit welchem “Spruch“ wurden
die Filme eröffnet in denen er
mitgespielt hat?
Und wie teuer waren
überhaupt die Schiffe auf
denen er gefahren ist?
#WISSENTEILEN
GraphQL
Wie alt ist Luke und welche
Haarfarbe hat er?
Mit welchem “Spruch“ wurden
die Filme eröffnet in denen er
mitgespielt hat?
Und wie teuer waren
überhaupt die Schiffe auf
denen er gefahren ist?
{
person(name:„Luke“) {
haircolor,
age
films {
name,
openiningCrawl
}
starships {
name,
price
}
}
}
#WISSENTEILEN
GraphQL
Wie alt ist Luke und welche
Haarfarbe hat er?
Mit welchem “Spruch“ wurden
die Filme eröffnet in denen er
mitgespielt hat?
Und wie teuer waren
überhaupt die Schiffe auf
denen er gefahren ist?
{
person(name:„Luke“) {
haircolor,
age
films {
name,
openiningCrawl
}
starships {
name,
price
}
}
}
#WISSENTEILEN
GraphQL
Wie alt ist Luke und welche
Haarfarbe hat er?
Mit welchem “Spruch“ wurden
die Filme eröffnet in denen er
mitgespielt hat?
Und wie teuer waren
überhaupt die Schiffe auf
denen er gefahren ist?
{
person(name:„Luke“) {
haircolor,
age
films {
name,
openiningCrawl
}
starships {
name,
price
}
}
}
#WISSENTEILEN
GraphQL
Wie alt ist Luke und welche
Haarfarbe hat er?
Mit welchem “Spruch“ wurden
die Filme eröffnet in denen er
mitgespielt hat?
Und wie teuer waren
überhaupt die Schiffe auf
denen er gefahren ist?
{
person(name=„Luke“) {
haircolor,
age
films {
name,
openiningCrawl
}
starships {
name,
price
}
}
}
#WISSENTEILEN
GraphQL
Wie alt ist Luke und welche
Haarfarbe hat er?
Mit welchem “Spruch“ wurden
die Filme eröffnet in denen er
mitgespielt hat?
Und wie teuer waren
überhaupt die Schiffe auf
denen er gefahren ist?
{
person(name:„Luke“) {
haircolor,
age
films {
name,
openiningCrawl
}
starships {
name,
price
}
}
}
#WISSENTEILEN
GraphQL
Wie alt ist Luke und welche
Haarfarbe hat er?
Mit welchem “Spruch“ wurden
die Filme eröffnet in denen er
mitgespielt hat?
Und wie teuer waren
überhaupt die Schiffe auf
denen er gefahren ist?
{
person(name:„Luke“) {
haircolor,
age
films {
name,
openiningCrawl
}
starships {
name,
price
}
}
}
#WISSENTEILEN
GraphQL
Wie alt ist Luke und welche
Haarfarbe hat er?
Mit welchem “Spruch“ wurden
die Filme eröffnet in denen er
mitgespielt hat?
Und wie teuer waren
überhaupt die Schiffe auf
denen er gefahren ist?
{
person(name:„Luke“) {
haircolor,
age
films {
name,
openiningCrawl
}
starships {
name,
price
}
}
}
#WISSENTEILEN
GraphQL
Wie alt ist Luke und welche
Haarfarbe hat er?
Mit welchem “Spruch“ wurden
die Filme eröffnet in denen er
mitgespielt hat?
Und wie teuer waren
überhaupt die Schiffe auf
denen er gefahren ist?
{
person(name:„Luke“) {
haircolor,
age
films {
name,
openiningCrawl
}
starships {
name,
price
}
}
}
#WISSENTEILEN
GraphQL
Wie alt ist Luke und welche
Haarfarbe hat er?
Mit welchem “Spruch“ wurden
die Filme eröffnet in denen er
mitgespielt hat?
Und wie teuer waren
überhaupt die Schiffe auf
denen er gefahren ist?
{
person(name:„Luke“) {
haircolor,
age
films {
name,
openiningCrawl
}
starships {
name,
price
}
}
}
#WISSENTEILEN
GraphQL
Wie alt ist Luke und welche
Haarfarbe hat er?
Mit welchem “Spruch“ wurden
die Filme eröffnet in denen er
mitgespielt hat?
Und wie teuer waren
überhaupt die Schiffe auf
denen er gefahren ist?
{
person(name:„Luke“) {
haircolor,
age
films {
name,
openiningCrawl
}
starships {
name,
price
}
}
}
#WISSENTEILEN
GraphQL
Wie alt ist Luke und welche
Haarfarbe hat er?
Mit welchem “Spruch“ wurden
die Filme eröffnet in denen er
mitgespielt hat?
Und wie teuer waren
überhaupt die Schiffe auf
denen er gefahren ist?
{
person(name:„Luke“) {
haircolor,
age
films {
name,
openiningCrawl
}
starships {
name,
price
}
}
}
#WISSENTEILEN
demo$ graphQL
demo$ |
#WISSENTEILEN
GraphiQL
#WISSENTEILEN
GraphiQL
(http://graphql-swapi.parseapp.com)
GraphQL
#WISSENTEILEN
Woher weiß das Backend was ich will?
• API Schema als gemeinsame Basis
• Query als Anfrage vom Client
• Step 1: parse (Query into AST)
• Step 2: validate (against Schema)
• Step 3: execute (Resolve Functions)
#WISSENTEILEN
GraphQL
// A very simple GraphQL schema example
type Character {
name: String! // non nullable
appearsIn: [Episode]! // array of ..., non nullable
}
type Starship {
id: ID! // unique ID
name: String!
length(unit: LengthUnit = METER): Float // parameter
}
#WISSENTEILEN
GraphQL
Aggregation?
Aggregation?
Aggregation?
#WISSENTEILEN
GraphQL
Aggregation!
GraphQL
#WISSENTEILEN
GraphQL Server
• Query Parser
• Data Fetcher
• Data Aggregator
• Caching von Result Graphs
• Aktualisierung von Result Graphs
GraphQL
#WISSENTEILEN
Muss ich das alles selber „bauen“?
• Nein! Es gibt ...
• Clients, Server, DB, Libraries, Tools ...
für Java, JavaScript, Python, Ruby, PHP,
C/C++, GO, Scala, .Net, SQL, ...
> http://graphql.org
> https://github.com/chentsulin/awesome-graphql
GraphQL
#WISSENTEILEN
Ist das wirklich so einfach?
• relative neue Technologie (im Fluss)
• Chaching?
• Dupletten?
• Information Hiding?
• Versionierung (vs. deprecated)
Async
Sync
vs.
#WISSENTEILEN
Sync vs. Async
A: POST /orders <order …>
B: ...
#WISSENTEILEN
Sync vs. Async
B: OK 201 <order 1234 …
<link „status“ … />
<link „update“ … />
<link „cancel“ … />
<link „pay“ … />
/>
A: POST /orders <order …>
#WISSENTEILEN
Sync vs. Async
A: POST /orders <order …>
B: Berlin, we have a problem (?)
#WISSENTEILEN
Sync vs. Async
REST und ...	
• Verbindungsproblem?
• Bearbeitungsfehler?
• Call	wiederholen?	
• Seiteneffekte!
• HTTP	Status	Codes
• Error	Payload
#WISSENTEILEN
Sync vs. Async
REST und ...	
• Fire &	Forget?
• Async Communication
• Passt	nicht	so	richtig	ins	
REST-Konzept,	oder?
Sync vs. Async
#WISSENTEILEN
Asyn Kommunikation
• via Messaging und Events
• lose Kopplung durch Queues & Topics
oder durch Event Observer
• ein Sender, 0 is N Receiver
• garantierte Auslieferung möglich
• garantierte Auslieferung erzeugt Overhead
#WISSENTEILEN
Sync vs. Async
#WISSENTEILEN
Sync vs. Async
#WISSENTEILEN
Sync vs. Async
#WISSENTEILEN
Sync vs. Async
Messaging	und ...	
• Senderprobleme?
• Falsches	Format
• Retry durch	Sender
• Reliable Messages	(ACK)
• evtl.	Duplicate
#WISSENTEILEN
Sync vs. Async
Messaging	und ...	
• Syncrone Kommunikation?
• 2x	Async =	Sync ;-)
• Correlation ID	
• Latenz	beachten
#WISSENTEILEN
Sync vs. Async
#WISSENTEILEN
Sync vs. Async
#WISSENTEILEN
Sync vs. Async
#WISSENTEILEN
Sync vs. Async
#WISSENTEILEN
Sync vs. Async
#WISSENTEILEN
Sync vs. Async
#WISSENTEILEN
demo$ messaging
demo$ |
#WISSENTEILEN
Sync vs. Async
#WISSENTEILEN
Sync vs. Async
#WISSENTEILEN
Sync vs. Async
#WISSENTEILEN
Sync vs. Async
#WISSENTEILEN
Sync vs. Async
#WISSENTEILEN
Sync vs. Async
BTW: still sync!
#WISSENTEILEN
Sync vs. Async
#WISSENTEILEN
Sync vs. Async
#WISSENTEILEN
Sync vs. Async
#WISSENTEILEN
Sync vs. Async
Web Sockets
#WISSENTEILEN
Web Sockets 1x1
• Paradigmenwechsel in der Kommunikation
• Abkehr vom klassischen Request/Response
• Client meldet sich am Server an
• Full duplex „real time“ Kommunikation
• Session kann durch beide beendet werden
#WISSENTEILEN
Web Sockets
#WISSENTEILEN
Web Sockets
#WISSENTEILEN
Web Sockets
#WISSENTEILEN
Web Sockets
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: ...
Origin: http://example.com
Sec-WebSocket-Protocol: chat, ...
Sec-WebSocket-Version: 13
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: ...
Web Sockets
#WISSENTEILEN
WebSocket „Alternativen“
• Polling (e.g. via Ajax)
• Long Polling
• Piggy Back
#WISSENTEILEN
Web Sockets
#WISSENTEILEN
Web Sockets
Web Sockets
#WISSENTEILEN
Can i use Web Sockets ... (Server Side)
• Java EE 7
• Spring
• Apache ActiveMQ, Caucho Resin,
Jetty, Netty, vert.x, jWebsocket
and many more ...
(see also	https://dzone.com/asset/download/253)
#WISSENTEILEN
demo$ websockets
demo$ |
#WISSENTEILEN
Sync vs. Async
WebSocket!
#WISSENTEILEN
#WISSENTEILEN
If you use REST,
use it at it‘s best.
FAZIT
#WISSENTEILEN
It‘s not REST
if it‘s not pragmatic.
FAZIT
#WISSENTEILEN
If it‘s not pragmatic
don‘t use REST!
FAZIT
#WISSENTEILEN
#WISSENTEILEN
? # !
LARS RÖWEKAMP
CIO NEW TECHNOLOGIES
lars.roewekamp@openknowledge.de
+49 (0) 441 4082 – 0
@mobileLarson
@_openknowledge
OFFENKUNDIGGUT
KOTAKT
#WISSENTEILEN
#1: © mantinov– shutterstock.com
#16: © Ollyy – shutterstock.com
#40: © pathdoc – shutterstock.com
#52: TODO: iStock_000059091620_Large.jpg
#119: © marekuliasz– shutterstock.com
#4, #23, #25, #29: #44: pixabay.com
Icons in this presentation designed by “Freepik”,
BILDNACHWEISE
#WISSENTEILEN

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (20)

The Day after – nach dem Release ist vor dem Release
The Day after – nach dem Release ist vor dem ReleaseThe Day after – nach dem Release ist vor dem Release
The Day after – nach dem Release ist vor dem Release
 
Java EE goes Microservices. Are you serious?
Java EE goes Microservices. Are you serious?Java EE goes Microservices. Are you serious?
Java EE goes Microservices. Are you serious?
 
Aus der Rubrik "Spaß mit Microservices": Transaktionen
Aus der Rubrik "Spaß mit Microservices": TransaktionenAus der Rubrik "Spaß mit Microservices": Transaktionen
Aus der Rubrik "Spaß mit Microservices": Transaktionen
 
App war gestern: Mobile Engagement als Teil der Enterprise-Strategie
App war gestern: Mobile Engagement als Teil der Enterprise-StrategieApp war gestern: Mobile Engagement als Teil der Enterprise-Strategie
App war gestern: Mobile Engagement als Teil der Enterprise-Strategie
 
Shared Data in verteilten Systemen
Shared Data in verteilten SystemenShared Data in verteilten Systemen
Shared Data in verteilten Systemen
 
Microservices mit dem MicroProfile
Microservices mit dem MicroProfileMicroservices mit dem MicroProfile
Microservices mit dem MicroProfile
 
Die Matrix: Enterprise-Architekturen jenseits von Microservices
Die Matrix: Enterprise-Architekturen jenseits von MicroservicesDie Matrix: Enterprise-Architekturen jenseits von Microservices
Die Matrix: Enterprise-Architekturen jenseits von Microservices
 
iOS: einheitliche Oberflächen mit Auto Layout
iOS: einheitliche Oberflächen mit Auto LayoutiOS: einheitliche Oberflächen mit Auto Layout
iOS: einheitliche Oberflächen mit Auto Layout
 
Zukunftssichere Architekturen mit Microservices
Zukunftssichere Architekturen mit MicroservicesZukunftssichere Architekturen mit Microservices
Zukunftssichere Architekturen mit Microservices
 
Java EE meets Microservices
Java EE meets MicroservicesJava EE meets Microservices
Java EE meets Microservices
 
Spaß mit Microservices: Transaktionen
Spaß mit Microservices: TransaktionenSpaß mit Microservices: Transaktionen
Spaß mit Microservices: Transaktionen
 
Cloud Architekturen - von "less Server" zu Serverless
Cloud Architekturen - von "less Server" zu ServerlessCloud Architekturen - von "less Server" zu Serverless
Cloud Architekturen - von "less Server" zu Serverless
 
Enterprise Java auf Diät
Enterprise Java auf DiätEnterprise Java auf Diät
Enterprise Java auf Diät
 
Web-API-Design in Java
Web-API-Design in JavaWeb-API-Design in Java
Web-API-Design in Java
 
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!
 
Mehr Sicherheit durch Automatisierung
Mehr Sicherheit durch AutomatisierungMehr Sicherheit durch Automatisierung
Mehr Sicherheit durch Automatisierung
 
Von „less Server“ bis „Serverless“: Wie viel Cloud soll es sein?
Von „less Server“ bis „Serverless“: Wie viel Cloud soll es sein?Von „less Server“ bis „Serverless“: Wie viel Cloud soll es sein?
Von „less Server“ bis „Serverless“: Wie viel Cloud soll es sein?
 
Der Enterprise-Java-Architekt – eine aussterbende Gattung!?
Der Enterprise-Java-Architekt – eine aussterbende Gattung!?Der Enterprise-Java-Architekt – eine aussterbende Gattung!?
Der Enterprise-Java-Architekt – eine aussterbende Gattung!?
 
Api services
Api servicesApi services
Api services
 
Mobile- & Offline-First: Mehr als nur Buzzword-Bingo
Mobile- & Offline-First: Mehr als nur Buzzword-BingoMobile- & Offline-First: Mehr als nur Buzzword-Bingo
Mobile- & Offline-First: Mehr als nur Buzzword-Bingo
 

Ähnlich wie Web APIs jenseits von REST & Request/Response

HTML5 Offline - Fallstricke für mobile Webseiten und WebApps
HTML5 Offline - Fallstricke für mobile Webseiten und WebAppsHTML5 Offline - Fallstricke für mobile Webseiten und WebApps
HTML5 Offline - Fallstricke für mobile Webseiten und WebApps
Ulrich Schmidt
 
Apache Solr vs. Elasticsearch - And The Winner Is...! Ein Vergleich der Shoot...
Apache Solr vs. Elasticsearch - And The Winner Is...! Ein Vergleich der Shoot...Apache Solr vs. Elasticsearch - And The Winner Is...! Ein Vergleich der Shoot...
Apache Solr vs. Elasticsearch - And The Winner Is...! Ein Vergleich der Shoot...
SHI Search | Analytics | Big Data
 
Fanstatic pycon.de 2012
Fanstatic pycon.de 2012Fanstatic pycon.de 2012
Fanstatic pycon.de 2012
Daniel Havlik
 

Ähnlich wie Web APIs jenseits von REST & Request/Response (20)

Web-API Design in Java
Web-API Design in JavaWeb-API Design in Java
Web-API Design in Java
 
Microservices Architecture: Architektur und Patterns
Microservices Architecture: Architektur und PatternsMicroservices Architecture: Architektur und Patterns
Microservices Architecture: Architektur und Patterns
 
PrettyFaces: RESTful URLs für JSF
PrettyFaces: RESTful URLs für JSFPrettyFaces: RESTful URLs für JSF
PrettyFaces: RESTful URLs für JSF
 
Ist GraphQL das bessere REST
Ist GraphQL das bessere RESTIst GraphQL das bessere REST
Ist GraphQL das bessere REST
 
REST: Versprechen, Wirklichkeit & Alternativen: GraphQL, GRPC, JSON RPC...
REST: Versprechen, Wirklichkeit & Alternativen: GraphQL, GRPC, JSON RPC...REST: Versprechen, Wirklichkeit & Alternativen: GraphQL, GRPC, JSON RPC...
REST: Versprechen, Wirklichkeit & Alternativen: GraphQL, GRPC, JSON RPC...
 
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
 
HTML5 Offline - Fallstricke für mobile Webseiten und WebApps
HTML5 Offline - Fallstricke für mobile Webseiten und WebAppsHTML5 Offline - Fallstricke für mobile Webseiten und WebApps
HTML5 Offline - Fallstricke für mobile Webseiten und WebApps
 
PHP Sucks?!
PHP Sucks?!PHP Sucks?!
PHP Sucks?!
 
Setting-up Elasticsearch, Logstash, Kibana für agile Datenanalyse
Setting-up Elasticsearch, Logstash, Kibana für agile DatenanalyseSetting-up Elasticsearch, Logstash, Kibana für agile Datenanalyse
Setting-up Elasticsearch, Logstash, Kibana für agile Datenanalyse
 
Apache Solr vs. Elasticsearch - And The Winner Is...! Ein Vergleich der Shoot...
Apache Solr vs. Elasticsearch - And The Winner Is...! Ein Vergleich der Shoot...Apache Solr vs. Elasticsearch - And The Winner Is...! Ein Vergleich der Shoot...
Apache Solr vs. Elasticsearch - And The Winner Is...! Ein Vergleich der Shoot...
 
Elasticsearch Cluster Management mit Marvel
Elasticsearch Cluster Management mit MarvelElasticsearch Cluster Management mit Marvel
Elasticsearch Cluster Management mit Marvel
 
Shared Data in verteilten Architekturen
Shared Data in verteilten ArchitekturenShared Data in verteilten Architekturen
Shared Data in verteilten Architekturen
 
Chefkoch goes Drupal8
Chefkoch goes Drupal8Chefkoch goes Drupal8
Chefkoch goes Drupal8
 
1&1 Frontend Workshop
1&1 Frontend Workshop1&1 Frontend Workshop
1&1 Frontend Workshop
 
201903 seo campixx ur ls komprimieren - slideshare
201903 seo campixx   ur ls komprimieren - slideshare201903 seo campixx   ur ls komprimieren - slideshare
201903 seo campixx ur ls komprimieren - slideshare
 
Räume deine Webseite auf! | Dominik Wojcik | SEOkomm 2016
Räume deine Webseite auf! | Dominik Wojcik | SEOkomm 2016Räume deine Webseite auf! | Dominik Wojcik | SEOkomm 2016
Räume deine Webseite auf! | Dominik Wojcik | SEOkomm 2016
 
Fanstatic pycon.de 2012
Fanstatic pycon.de 2012Fanstatic pycon.de 2012
Fanstatic pycon.de 2012
 
Enterprise Java on Steroids
Enterprise Java on SteroidsEnterprise Java on Steroids
Enterprise Java on Steroids
 
Agile Softwareentwicklung mit Rails
Agile Softwareentwicklung mit RailsAgile Softwareentwicklung mit Rails
Agile Softwareentwicklung mit Rails
 
Webinar - Boost your ABAP
Webinar - Boost your ABAPWebinar - Boost your ABAP
Webinar - Boost your ABAP
 

Mehr von OPEN KNOWLEDGE GmbH

Mehr von 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
 
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
 
Business-Mehrwert durch KI
Business-Mehrwert durch KIBusiness-Mehrwert durch KI
Business-Mehrwert durch KI
 
API-Design, Microarchitecture und Testing
API-Design, Microarchitecture und TestingAPI-Design, Microarchitecture und Testing
API-Design, Microarchitecture und Testing
 
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
 
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?
 
Auf geht‘s in die Cloud: „Das kann doch nicht so schwer sein!“
Auf geht‘s in die Cloud: „Das kann doch nicht so schwer sein!“Auf geht‘s in die Cloud: „Das kann doch nicht so schwer sein!“
Auf geht‘s in die Cloud: „Das kann doch nicht so schwer sein!“
 
Das Product Goal oder "Ohne Ziele laufen eben alle in die Richtung, die ihnen...
Das Product Goal oder "Ohne Ziele laufen eben alle in die Richtung, die ihnen...Das Product Goal oder "Ohne Ziele laufen eben alle in die Richtung, die ihnen...
Das Product Goal oder "Ohne Ziele laufen eben alle in die Richtung, die ihnen...
 
Serverless Survival Guide
Serverless Survival GuideServerless Survival Guide
Serverless Survival Guide
 

Web APIs jenseits von REST & Request/Response