microservices-schnitt jetzt mit graphql! · graphql-java interessant wegen migration von java...

39
Zuhören. Analysieren. Beraten. MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! 05.07.2018 Matthias Koch

Upload: others

Post on 20-Jul-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

MICROSERVICES-SCHNITT – JETZT MIT GRAPHQL!

05.07.2018

Matthias Koch

Page 2: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Agenda

1. Überblick über das Framework

2. GraphQL vs. REST

3. GraphQL als API-Gateway?

Microservices-Schnitt - Jetzt mit GraphQL!2

Page 3: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Agenda

1. Überblick über das Framework

2. GraphQL vs. REST

3. GraphQL als API-Gateway?

Microservices-Schnitt - Jetzt mit GraphQL!3

Page 4: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Was ist GraphQL?

Graph Query Language

Ursprünglich von Facebook als proprietäre API-Technologie entwickelt

2015 in Open-Source Projekt umgewandelt

Lizenziert seit 2017 über Open Web Foundation Agreement (OWFa)

Tritt Patentrechte ab

Im Kern eine Spezifikation

Referenzimplementierung in JavaScript

Mittlerweile in vielen Sprachen verfügbar

Überblick über das Framework

Microservices-Schnitt - Jetzt mit GraphQL!4

Page 5: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Wer benutzt alles GraphQL?

Überblick über das Framework

Microservices-Schnitt - Jetzt mit GraphQL!5

Quelle: https://www.howtographql.com/basics/0-introduction/

Page 6: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Was sind die Bestandteile von GraphQL?

GraphQL Schema Language

Typisierte Schema Definition Language

Definiert Daten und Methoden

Ermöglicht starke Entkopplung von Client und Endpoint

GraphQL Query Language

Deklarative Abfragesprache

GraphQL Runtime

Generische Implementierung des Basissets der GraphQL API

Transformation einer Query

Schema-Validierung

Transformation der Rückgabedaten

Beliebige Backends

Überblick über das Framework

Microservices-Schnitt - Jetzt mit GraphQL!6

Page 7: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Graph

Daten einer Applikation können durch einen Graphen beschrieben werden.

Abfrage der Daten durch Navigation in diesem Graphen.

In diesen Graphen können auch Zyklen auftreten.

Überblick über das Framework

Microservices-Schnitt - Jetzt mit GraphQL!7

Page 8: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Graph - Beispiel

Überblick über das Framework

Microservices-Schnitt - Jetzt mit GraphQL!8

Actor Film Critic

Queries können beliebig komplex werden.

Objekte können gegebenenfalls mehrfach in der selben Query evaluiert werden.

Page 9: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Root Types

Container für die durchzuführende Funktionen:

Queries

Mutators

Create

Update

Delete

Subscribers

Ohne Long Time Polling

Ohne Webhooks

Überblick über das Framework

Microservices-Schnitt - Jetzt mit GraphQL!9

Page 10: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

GraphQL-Java

Interessant wegen Migration von Java REST-Endpoints

Aktuell noch viele Versionssprünge

Niedrige Downloadzahlen

Noch nicht durchgängige Dokumentation

Subscription erst seit kurzem Bestandteil von GraphQL-Java

Überblick über das Framework

Microservices-Schnitt - Jetzt mit GraphQL!10

Page 11: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Beispiel: Movieking

Überblick über das Framework

Microservices-Schnitt - Jetzt mit GraphQL!11

Actor

Film

Critic

Query

Page 12: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Tool: GraphiQL

In-Browser IDE

Queries und Mutations können damit abgesetzt werden.

Schema kann damit untersucht werden.

Überblick über das Framework

Microservices-Schnitt - Jetzt mit GraphQL!12

Page 13: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Schema

Überblick über das Framework

Microservices-Schnitt - Jetzt mit GraphQL!13

schema {query: Querymutation: Mutation

}

type Query {actor(name: String!): Actorfilm(title: String): Film

}

type Mutation {setAge(name:String!, age: Int!) : Actor

}

type Actor {id: ID!name: String!age: Intfilms(title: String): [Film]pets: [String]

}

type Film {id: ID!title: String!critics: [Critic]

}

type Critic {id: ID!title: String!lazyBonesSummary: Stringscore: Float

}

Page 14: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Überblick über das Framework

14 Microservices-Schnitt - Jetzt mit GraphQL!

Tool: GraphiQL

Page 15: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Big Picture

Überblick über das Framework

Microservices-Schnitt - Jetzt mit GraphQL!15

Legacy System / Microservice

3rd Party API

Page 16: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

DataLoader

2010 von Facebook entwickelt

Referenzimplementierung wieder JavaScript

Implementierungen in vielen Sprachen auch in Java

Funktionalität für Batching und Caching

Simple, intuitive API

Apache Commons v2.0 Lizenz

Überblick über das Framework

Microservices-Schnitt - Jetzt mit GraphQL!16

Page 17: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

java-dataloader

Alle Felder in GraphQL werden unabhängig evaluiert.

Bei „naiver“ Implementierung wird die selbe Information ggf. mehrfach berechnet.

DataLoader hat per default Caching aktiviert.

Überblick über das Framework

Microservices-Schnitt - Jetzt mit GraphQL!17

Page 18: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

DataLoader - Simples Beispiel@Test

public void test_batch_loads() throws Exception {

BatchLoader<String, String> batchLoader = CompletableFuture::completedFuture;

DataLoader<String, String> loader = new DataLoader<>(BatchLoader);

loader.load("A");

loader.load("B");

loader.loadMany(asList("C", "D"));

loader.dispatch();

Statistics stats = loader.getStatistics();

assertEquals(stats.getLoadCount(), 4L);

assertEquals(stats.getBatchInvokeCount(), 1L);

assertEquals(stats.getBatchLoadCount(), 4L);

assertEquals(stats.getCacheHitCount(), 0L);

loader.load("A");

loader.load("B");

loader.dispatch();

stats = loader.getStatistics();

assertEquals(stats.getLoadCount(), 6L);

assertEquals(stats.getBatchInvokeCount(), 1L);

assertEquals(stats.getBatchLoadCount(), 4L);

assertEquals(stats.getCacheHitCount(), 2L);

}

Überblick über das Framework

Microservices-Schnitt - Jetzt mit GraphQL!18

Page 19: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Agenda

1. Überblick über das Framework

2. GraphQL vs. REST

3. GraphQL als API-Gateway?

Microservices-Schnitt - Jetzt mit GraphQL!19

Page 20: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Movieking RESTGET /movieking.com/actor/name/Buck%20Borris

{

"id": "123-123-123-888",

"name": "Buck Borris",

"age": 79,

"moreFilms": true,

"films": [

{

"title": "Missing the action",

"links": {

"rel": "film",

"href": "movieking.com/film/id/456-456-456-888„

}

},

{

"title": "Firetruck",

"links": {

"rel": "film",

"href": "movieking.com/film/id/456-456-456-999"

}

}, …

] ,

"pets": [

"stinky“, "winky"

]

}

GraphQL vs. REST

Microservices-Schnitt - Jetzt mit GraphQL!20

GET /movieking.com/film/id//456-456-456-888

{

"id": "456-456-456-888",

"title": "Missing the action",

"iinks": [

{

"rel": "critic",

"href": "movieking.com/critic/id/567-567-567-888"

},

{

"rel": "critic",

"href": "imovieking.com/critic/id/567-567-567-888"

}

]

}

GET /movieking.com/critic/id//567-567-567-888

{

“"id": "567-567-567-888",

"title": "Missing the action",

"lazyBonesSummary": "Masterpiece of pacifist film",

"score": 7.46

}

Page 21: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Overfetching/Underfetching

Overfetching

Daten werden übermittelt, weil die Ressource immer die gleiche Menge an Daten liefert.

Unnütze Daten (z.B. Actor‘s pets) werden immer mit übertragen.

Underfetching / n+1 Problem

Bei großer Menge Daten wird die Zahl der Datensätze begrenzt.

Möglicherweise sind die gesuchten Daten nicht enthalten.

Mehrere Requests werden ggf. benötigt, um an die gewünschten Daten zu kommen.

GraphQL vs. REST

Microservices-Schnitt - Jetzt mit GraphQL!21

Page 22: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Versionierung von GraphQL APIs

Versionierung wird nicht empfohlen.

In der Regel wird das Schema größer.

Macht bei GraphQL nichts, da beim „Declarative Data Fetching“ immer nur die explizit

angefragten Daten übermittelt werden.

GraphQL vs. REST

Microservices-Schnitt - Jetzt mit GraphQL!22

Page 23: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Direkter Vergleich

GraphQL vs. REST

Microservices-Schnitt - Jetzt mit GraphQL!23

Kriterium GraphQL REST

Spezifikation ja nein

Server-Roundtrips wenige viele

Fehlerbehandlung einfacher schwerer

Overfetching nein ja

Underfetching seltener häufiger

Zahl der Endpoints weniger mehr

Versionierung einfacher schwerer

Typisierung stark schwach

Schema ja nein

Service-Discovery nein ja

Query-Komplexität hoch einfach

Page 24: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Alternativen zu REST und GraphQL

GRPC

Falcor von Netflix

GraphQL vs. REST

Microservices-Schnitt - Jetzt mit GraphQL!24

Page 25: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Agenda

1. Überblick über das Framework

2. GraphQL vs. REST

3. GraphQL als API-Gateway?

Microservices-Schnitt - Jetzt mit GraphQL!25

Page 26: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

GraphQL als API-Gateway

Vorteile:

Alle Daten können mit einem Server-Roundtrip ermittelt werden.

einfaches Fehlerhandling

einfaches Transaktionshandling

Nachteil:

Absicherung gegen schadhafte Queries schwieriger/risikoreicher

GraphQL als API-Gateway?

Microservices-Schnitt - Jetzt mit GraphQL!26

Page 27: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Vertikaler Schnitt

GraphQL als API-Gateway?

Microservices-Schnitt - Jetzt mit GraphQL!27

Service

Discovery

Bezahlvorgang

UI Bestellvorgang

Bestellvorgang

UI Bezahlvorgang

Page 28: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Vertikaler Schnitt mit GraphQL

GraphQL als API-Gateway?

Microservices-Schnitt - Jetzt mit GraphQL!28

Bezahlvorgang

UI Bestellvorgang

Bestellvorgang

UI Bezahlvorgang

Page 29: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

GraphQL als API-Gateway

GraphQL als API-Gateway?

Microservices-Schnitt - Jetzt mit GraphQL!29

Bezahlvorgang

UI Bestellvorgang

Bestellvorgang

UI Bezahlvorgang

GraphQL

Gateway

Page 30: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

API-Gateway mit disjunkten Graphen

GraphQL als API-Gateway?

Microservices-Schnitt - Jetzt mit GraphQL!30

Bezahlvorgang

UI Bestellvorgang

Bestellvorgang

UI Bezahlvorgang

GraphQL Gateway mit 2

disjunkten Graphen

Page 31: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

API-Gateway – monolithische UI

GraphQL als API-Gateway?

Microservices-Schnitt - Jetzt mit GraphQL!31

BezahlvorgangBestellvorgang

Monolithische UI

Page 32: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Consumer-Driven Contracts

GraphQL als API-Gateway?

Microservices-Schnitt - Jetzt mit GraphQL!32

Quelle: https://martinfowler.com/articles/consumerDrivenContracts.html

Page 33: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Consumer-Driven Contracts GraphQL

Gibt es auch für GraphQL: GraphQL Contract Test

GraphQL als API-Gateway?

Microservices-Schnitt - Jetzt mit GraphQL!33

Page 34: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Consumer-Driven Contracts vertikaler Schnitt

GraphQL als API-Gateway?

Microservices-Schnitt - Jetzt mit GraphQL!34

Bezahlvorgang

UI Bestellvorgang

Bestellvorgang

UI Bezahlvorgang

Contracts Contracts

Page 35: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Consumer-Driven Contracts API-Gateway

GraphQL als API-Gateway?

Microservices-Schnitt - Jetzt mit GraphQL!35

Bezahlvorgang

UI Bestellvorgang

Bestellvorgang

UI Bezahlvorgang

GraphQL

Gateway

Contracts

Page 36: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Fazit

Microservices-Schnitt - Jetzt mit GraphQL!36

GraphQL ist noch eine vergleichsweise junge Technologie.

Formalisiertes Schema sorgt für starke Entkopplung der Schichten.

Versionierung der API wird wesentlich erleichtert.

GraphQL hat gute Konzepte um die Limitierungen von REST aufzulösen.

Page 37: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

FRAGEN?

Microservices-Schnitt - Jetzt mit GraphQL!37

DANKE!

Gerne stehe ich am sidion Stand noch für

Gespräche zur Verfügung.

Page 38: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

Referenzen

https://code.facebook.com/posts/121714468491809/relicensing-the-graphql-specification/

https://github.com/facebook/dataloader

https://github.com/graphql-java/java-dataloader

http://graphql.org/

GraphQL API Design (API-University Series Book 5) (English Edition) Kindle Edition

https://github.com/symm/graphql-contract-test

https://grpc.io/

https://github.com/Netflix/falcor

https://dev-blog.apollodata.com/the-graphql-stack-how-everything-fits-together-35f8bf34f841

Microservices-Schnitt - Jetzt mit GraphQL!38

Page 39: MICROSERVICES-SCHNITT JETZT MIT GRAPHQL! · GraphQL-Java Interessant wegen Migration von Java REST-Endpoints Aktuell noch viele Versionssprünge Niedrige Downloadzahlen ... GraphQL

Zuhören. Analysieren. Beraten.

sidion

Heßbrühlstr. 15

70565 Stuttgart

Tel. + 49 711 490 109 – 0

Fax + 49 711 490 109 – 79

www.sidion.de

VIELEN DANK.

Microservices-Schnitt - Jetzt mit GraphQL!39