graphql, das bessere rest?...graphql? "graphql is a query language for apis and a runtime for...

110
Die Beschaffungsplattform f¨ ur Gesch¨ aftskunden GraphQL, das bessere REST? org Adler, Benjamin Otto, 29.9.2017

Upload: others

Post on 23-May-2020

32 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Die Beschaffungsplattform fur Geschaftskunden

GraphQL, das bessere REST?Jorg Adler, Benjamin Otto, 29.9.2017

Page 2: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Wir @ Mercateo

Mercateo ist Europas fuhrende Beschaffungsplattform.

> 1 Mio. Geschaftskunden

21 Mio. Artikel

mehr als 10.000 Hersteller

Entwicklung von der Beschaffungsplattform zur Transaktionsplattform

Massive Veranderungen in der IT-Landschaft

Jorg [email protected]@joerg adler

Benjamin [email protected]

@ otbe

Die Beschaffungsplattform fur Geschaftskunden 2

Page 3: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Wir @ Mercateo

Mercateo ist Europas fuhrende Beschaffungsplattform.

> 1 Mio. Geschaftskunden

21 Mio. Artikel

mehr als 10.000 Hersteller

Entwicklung von der Beschaffungsplattform zur Transaktionsplattform

Massive Veranderungen in der IT-Landschaft

Jorg [email protected]@joerg adler

Benjamin [email protected]

@ otbe

Die Beschaffungsplattform fur Geschaftskunden 2

Page 4: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Beispiel

Beispiel

Nachfolgend beziehen sich alle Folien auf das folgende Beispiel

Order API

Order mit id, state und articles

Order mit States”processing“,

”canceled“,

”shipped“,

”returned“

Ubergang processing → canceled (optional)

Ubergang processing → shipped → returned (optional)

Implementiertes Java-Beispiel:https://github.com/Mercateo/rest-demo-feature/

Die Beschaffungsplattform fur Geschaftskunden 3

Page 5: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Beispiel

Beispiel

Nachfolgend beziehen sich alle Folien auf das folgende Beispiel

Order API

Order mit id, state und articles

Order mit States”processing“,

”canceled“,

”shipped“,

”returned“

Ubergang processing → canceled (optional)

Ubergang processing → shipped → returned (optional)

Implementiertes Java-Beispiel:https://github.com/Mercateo/rest-demo-feature/

Die Beschaffungsplattform fur Geschaftskunden 3

Page 6: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Beispiel

Beispiel

Nachfolgend beziehen sich alle Folien auf das folgende Beispiel

Order API

Order mit id, state und articles

Order mit States”processing“,

”canceled“,

”shipped“,

”returned“

Ubergang processing → canceled (optional)

Ubergang processing → shipped → returned (optional)

Implementiertes Java-Beispiel:https://github.com/Mercateo/rest-demo-feature/

Die Beschaffungsplattform fur Geschaftskunden 3

Page 7: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Beispiel

Beispiel

Nachfolgend beziehen sich alle Folien auf das folgende Beispiel

Order API

Order mit id, state und articles

Order mit States”processing“,

”canceled“,

”shipped“,

”returned“

Ubergang processing → canceled (optional)

Ubergang processing → shipped → returned (optional)

Implementiertes Java-Beispiel:https://github.com/Mercateo/rest-demo-feature/

Die Beschaffungsplattform fur Geschaftskunden 3

Page 8: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Beispiel

Beispiel

Nachfolgend beziehen sich alle Folien auf das folgende Beispiel

Order API

Order mit id, state und articles

Order mit States”processing“,

”canceled“,

”shipped“,

”returned“

Ubergang processing → canceled (optional)

Ubergang processing → shipped → returned (optional)

Implementiertes Java-Beispiel:https://github.com/Mercateo/rest-demo-feature/

Die Beschaffungsplattform fur Geschaftskunden 3

Page 9: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Beispiel

Beispiel

Nachfolgend beziehen sich alle Folien auf das folgende Beispiel

Order API

Order mit id, state und articles

Order mit States”processing“,

”canceled“,

”shipped“,

”returned“

Ubergang processing → canceled (optional)

Ubergang processing → shipped → returned (optional)

Implementiertes Java-Beispiel:https://github.com/Mercateo/rest-demo-feature/

Die Beschaffungsplattform fur Geschaftskunden 3

Page 10: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

GraphQL

?

Was ist GraphQL?

Die Beschaffungsplattform fur Geschaftskunden 4

Page 11: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

GraphQL

?

”GraphQL is a query language for APIs and a runtime for fulfilling thosequeries with your existing data.”

gedacht als dunner API Layer zwischen Client und Backend

initialer Draft von 2015 von Facebook

Spec (OWFA 1.0) + Referenzimplementierung (MIT) auf Github verfugbar

wird seither als Community Draft weiterentwickelt

GraphQL Schema als Contract zwischen Client und Server

Die Beschaffungsplattform fur Geschaftskunden 5

Page 12: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

GraphQL

?

”GraphQL is a query language for APIs and a runtime for fulfilling thosequeries with your existing data.”

gedacht als dunner API Layer zwischen Client und Backend

initialer Draft von 2015 von Facebook

Spec (OWFA 1.0) + Referenzimplementierung (MIT) auf Github verfugbar

wird seither als Community Draft weiterentwickelt

GraphQL Schema als Contract zwischen Client und Server

Die Beschaffungsplattform fur Geschaftskunden 5

Page 13: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

GraphQL

?

”GraphQL is a query language for APIs and a runtime for fulfilling thosequeries with your existing data.”

gedacht als dunner API Layer zwischen Client und Backend

initialer Draft von 2015 von Facebook

Spec (OWFA 1.0) + Referenzimplementierung (MIT) auf Github verfugbar

wird seither als Community Draft weiterentwickelt

GraphQL Schema als Contract zwischen Client und Server

Die Beschaffungsplattform fur Geschaftskunden 5

Page 14: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

GraphQL

?

”GraphQL is a query language for APIs and a runtime for fulfilling thosequeries with your existing data.”

gedacht als dunner API Layer zwischen Client und Backend

initialer Draft von 2015 von Facebook

Spec (OWFA 1.0) + Referenzimplementierung (MIT) auf Github verfugbar

wird seither als Community Draft weiterentwickelt

GraphQL Schema als Contract zwischen Client und Server

Die Beschaffungsplattform fur Geschaftskunden 5

Page 15: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

GraphQL

?

”GraphQL is a query language for APIs and a runtime for fulfilling thosequeries with your existing data.”

gedacht als dunner API Layer zwischen Client und Backend

initialer Draft von 2015 von Facebook

Spec (OWFA 1.0) + Referenzimplementierung (MIT) auf Github verfugbar

wird seither als Community Draft weiterentwickelt

GraphQL Schema als Contract zwischen Client und Server

Die Beschaffungsplattform fur Geschaftskunden 5

Page 16: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

GraphQL

?

”GraphQL is a query language for APIs and a runtime for fulfilling thosequeries with your existing data.”

gedacht als dunner API Layer zwischen Client und Backend

initialer Draft von 2015 von Facebook

Spec (OWFA 1.0) + Referenzimplementierung (MIT) auf Github verfugbar

wird seither als Community Draft weiterentwickelt

GraphQL Schema als Contract zwischen Client und Server

Die Beschaffungsplattform fur Geschaftskunden 5

Page 17: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

GraphQL

Schema

Schema besteht aus Query, Mutation und Subscription

Primitive Datentypen: Int, Float, String, Boolean, ID

Neue Datentypen konnen mit scalar, type, interface, union, enum oder inputdefiniert werden

Cheat Sheet https://github.com/sogko/graphql-schema-language-cheat-sheet

Die Beschaffungsplattform fur Geschaftskunden 6

Page 18: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

GraphQL

Schema

Schema besteht aus Query, Mutation und Subscription

Primitive Datentypen: Int, Float, String, Boolean, ID

Neue Datentypen konnen mit scalar, type, interface, union, enum oder inputdefiniert werden

Cheat Sheet https://github.com/sogko/graphql-schema-language-cheat-sheet

Die Beschaffungsplattform fur Geschaftskunden 6

Page 19: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

GraphQL

Schema

Schema besteht aus Query, Mutation und Subscription

Primitive Datentypen: Int, Float, String, Boolean, ID

Neue Datentypen konnen mit scalar, type, interface, union, enum oder inputdefiniert werden

Cheat Sheet https://github.com/sogko/graphql-schema-language-cheat-sheet

Die Beschaffungsplattform fur Geschaftskunden 6

Page 20: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

GraphQL

Schema

Schema besteht aus Query, Mutation und Subscription

Primitive Datentypen: Int, Float, String, Boolean, ID

Neue Datentypen konnen mit scalar, type, interface, union, enum oder inputdefiniert werden

Cheat Sheet https://github.com/sogko/graphql-schema-language-cheat-sheet

Die Beschaffungsplattform fur Geschaftskunden 6

Page 21: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Die Beschaffungsplattform fur Geschaftskunden 7

Page 22: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

GraphQL

Status Quo

Status Quo

Die Beschaffungsplattform fur Geschaftskunden 8

Page 23: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

GraphQL

Status Quo

Transport: HTTP POST* auf /graphql Endpoint mit Query im Body

* dadurch ist Caching schwierig; allerdings kann auch GET mit QueryParameter verwendet werden oder Persisted Queries

”one query to rule them all“- beliebig tief geschachtelte Queries konnen

geschrieben werden

Tooling

Die Beschaffungsplattform fur Geschaftskunden 9

Page 24: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

GraphQL

Status Quo

Transport: HTTP POST* auf /graphql Endpoint mit Query im Body

* dadurch ist Caching schwierig; allerdings kann auch GET mit QueryParameter verwendet werden oder Persisted Queries

”one query to rule them all“- beliebig tief geschachtelte Queries konnen

geschrieben werden

Tooling

Die Beschaffungsplattform fur Geschaftskunden 9

Page 25: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

GraphQL

Status Quo

Transport: HTTP POST* auf /graphql Endpoint mit Query im Body

* dadurch ist Caching schwierig; allerdings kann auch GET mit QueryParameter verwendet werden oder Persisted Queries

”one query to rule them all“- beliebig tief geschachtelte Queries konnen

geschrieben werden

Tooling

Die Beschaffungsplattform fur Geschaftskunden 9

Page 26: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

GraphQL

Status Quo

Transport: HTTP POST* auf /graphql Endpoint mit Query im Body

* dadurch ist Caching schwierig; allerdings kann auch GET mit QueryParameter verwendet werden oder Persisted Queries

”one query to rule them all“- beliebig tief geschachtelte Queries konnen

geschrieben werden

Tooling

Die Beschaffungsplattform fur Geschaftskunden 9

Page 27: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

GraphQL

Tooling - GraphiQL

Die Beschaffungsplattform fur Geschaftskunden 10

Page 28: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

GraphQL

Tooling - Launchpad

Die Beschaffungsplattform fur Geschaftskunden 11

Page 29: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

GraphQL

Tooling - Apollo Dev

Die Beschaffungsplattform fur Geschaftskunden 12

Page 30: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

GraphQL

Tooling - graphql-faker

Die Beschaffungsplattform fur Geschaftskunden 13

Page 31: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

GraphQL

Status Quo

Transport: HTTP POST* auf /graphql Endpoint mit Query im Body

* dadurch ist Caching schwierig; allerdings kann auch GET mit QueryParameter verwendet werden oder Persisted Queries

”one query to rule them all“- beliebig tief geschachtelte Queries konnen

geschrieben werden

Tooling

Wer nutzt GraphQL?

Die Beschaffungsplattform fur Geschaftskunden 14

Page 32: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Die Beschaffungsplattform fur Geschaftskunden 15

Page 33: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

GraphQL

Beispiel

https://launchpad.graphql.com/x45n51lwl

Die Beschaffungsplattform fur Geschaftskunden 16

Page 34: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

GraphQL

Beispiel

Datenbeschreibung

1 enum STATE {2 SHIPPED

3 PROCESSING

4 CANCELED

5 RETURNED

6 }7

8 type Order {9 id: ID!

10 state: STATE

11 articles: [Article]!

12 }13

14 type Query {15 orders(limit: Int, offset: Int): [Order]!

16 }

Die Beschaffungsplattform fur Geschaftskunden 17

Page 35: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

GraphQL

Beispiel

Datenbeschreibung

1 enum STATE {2 SHIPPED

3 PROCESSING

4 CANCELED

5 RETURNED

6 }7

8 type Order {9 id: ID!

10 state: STATE

11 articles: [Article]!

12 }13

14 type Query {15 orders(limit: Int, offset: Int): [Order]!

16 }

Anfrage

1 {2 orders {3 id

4 state

5 }6 }

Die Beschaffungsplattform fur Geschaftskunden 17

Page 36: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

GraphQL

Beispiel

Datenbeschreibung

1 enum STATE {2 SHIPPED

3 PROCESSING

4 CANCELED

5 RETURNED

6 }7

8 type Order {9 id: ID!

10 state: STATE

11 articles: [Article]!

12 }13

14 type Query {15 orders(limit: Int, offset: Int): [Order]!

16 }

Anfrage

1 {2 orders {3 id

4 state

5 }6 }

Ergebnis

1 {2 "orders": [ {3 "id": "1234567",

4 "state": "PROCESSING"

5 } ]

6 }

Die Beschaffungsplattform fur Geschaftskunden 17

Page 37: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

REST

Die Beschaffungsplattform fur Geschaftskunden 18

Page 38: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

REST

Einfuhrung

REST ist eine Architektur

es gibt keinen (Implementierungs-)Standard, nur Constraints (Client-Server,Stateless, Cache, Uniform Interface, Layered System, Code on Demand)

speziell die Forderung nach einem uniformen Interface macht REST langsam

”The trade-off, though, is that a uniform interface degrades efficiency, since

information is transferred in a standardized form rather than one which isspecific to an application’s needs.“

Fielding, Roy T., Dissertation

”Software design on the scale of decades: every detail is intended to promote

software longevity and independent evolution. Many of the constraints aredirectly opposed to short-term efficiency.“

Fielding, Roy T. “REST APIs must be hypertext-driven“

Die Beschaffungsplattform fur Geschaftskunden 19

Page 39: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

REST

Einfuhrung

REST ist eine Architektur

es gibt keinen (Implementierungs-)Standard, nur Constraints (Client-Server,Stateless, Cache, Uniform Interface, Layered System, Code on Demand)

speziell die Forderung nach einem uniformen Interface macht REST langsam

”The trade-off, though, is that a uniform interface degrades efficiency, since

information is transferred in a standardized form rather than one which isspecific to an application’s needs.“

Fielding, Roy T., Dissertation

”Software design on the scale of decades: every detail is intended to promote

software longevity and independent evolution. Many of the constraints aredirectly opposed to short-term efficiency.“

Fielding, Roy T. “REST APIs must be hypertext-driven“

Die Beschaffungsplattform fur Geschaftskunden 19

Page 40: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

REST

Einfuhrung

REST ist eine Architektur

es gibt keinen (Implementierungs-)Standard, nur Constraints (Client-Server,Stateless, Cache, Uniform Interface, Layered System, Code on Demand)

speziell die Forderung nach einem uniformen Interface macht REST langsam

”The trade-off, though, is that a uniform interface degrades efficiency, since

information is transferred in a standardized form rather than one which isspecific to an application’s needs.“

Fielding, Roy T., Dissertation

”Software design on the scale of decades: every detail is intended to promote

software longevity and independent evolution. Many of the constraints aredirectly opposed to short-term efficiency.“

Fielding, Roy T. “REST APIs must be hypertext-driven“

Die Beschaffungsplattform fur Geschaftskunden 19

Page 41: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

REST

Einfuhrung

REST ist eine Architektur

es gibt keinen (Implementierungs-)Standard, nur Constraints (Client-Server,Stateless, Cache, Uniform Interface, Layered System, Code on Demand)

speziell die Forderung nach einem uniformen Interface macht REST langsam

”The trade-off, though, is that a uniform interface degrades efficiency, since

information is transferred in a standardized form rather than one which isspecific to an application’s needs.“

Fielding, Roy T., Dissertation

”Software design on the scale of decades: every detail is intended to promote

software longevity and independent evolution. Many of the constraints aredirectly opposed to short-term efficiency.“

Fielding, Roy T. “REST APIs must be hypertext-driven“

Die Beschaffungsplattform fur Geschaftskunden 19

Page 42: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

REST

HATEOAS

Hypermedia as the Engine of Application State

integraler Bestandteil von REST

”REST is defined by four interface constraints: identification of resources;

manipulation of resources through representations; self-descriptive messages;and, hypermedia as the engine of application state“

Fielding, Roy T., Dissertation

Zustandsubergange am Client ausschließlich uber Links vom Server

Links kommen nur dynamisch vom Server

im Client nur eine Einsprungs-URL und das Wissen uber die Linknamen

Die Beschaffungsplattform fur Geschaftskunden 20

Page 43: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

REST

HATEOAS

Hypermedia as the Engine of Application State

integraler Bestandteil von REST

”REST is defined by four interface constraints: identification of resources;

manipulation of resources through representations; self-descriptive messages;and, hypermedia as the engine of application state“

Fielding, Roy T., Dissertation

Zustandsubergange am Client ausschließlich uber Links vom Server

Links kommen nur dynamisch vom Server

im Client nur eine Einsprungs-URL und das Wissen uber die Linknamen

Die Beschaffungsplattform fur Geschaftskunden 20

Page 44: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

REST

HATEOAS

Hypermedia as the Engine of Application State

integraler Bestandteil von REST

”REST is defined by four interface constraints: identification of resources;

manipulation of resources through representations; self-descriptive messages;and, hypermedia as the engine of application state“

Fielding, Roy T., Dissertation

Zustandsubergange am Client ausschließlich uber Links vom Server

Links kommen nur dynamisch vom Server

im Client nur eine Einsprungs-URL und das Wissen uber die Linknamen

Die Beschaffungsplattform fur Geschaftskunden 20

Page 45: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

REST

HATEOAS

Hypermedia as the Engine of Application State

integraler Bestandteil von REST

”REST is defined by four interface constraints: identification of resources;

manipulation of resources through representations; self-descriptive messages;and, hypermedia as the engine of application state“

Fielding, Roy T., Dissertation

Zustandsubergange am Client ausschließlich uber Links vom Server

Links kommen nur dynamisch vom Server

im Client nur eine Einsprungs-URL und das Wissen uber die Linknamen

Die Beschaffungsplattform fur Geschaftskunden 20

Page 46: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

REST

HATEOAS

Hypermedia as the Engine of Application State

integraler Bestandteil von REST

”REST is defined by four interface constraints: identification of resources;

manipulation of resources through representations; self-descriptive messages;and, hypermedia as the engine of application state“

Fielding, Roy T., Dissertation

Zustandsubergange am Client ausschließlich uber Links vom Server

Links kommen nur dynamisch vom Server

im Client nur eine Einsprungs-URL und das Wissen uber die Linknamen

Die Beschaffungsplattform fur Geschaftskunden 20

Page 47: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Ist GraphQL nun das bessere REST?

Es ist nicht vergleichbar.

Die Beschaffungsplattform fur Geschaftskunden 21

Page 48: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Ist GraphQL nun das bessere REST?Es ist nicht vergleichbar.

Die Beschaffungsplattform fur Geschaftskunden 21

Page 49: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Vielen Dank fur Ihre Aufmerksamtkeit :)

Die Beschaffungsplattform fur Geschaftskunden 22

Page 50: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

Domain Driven Design

hilft beim Schnitt von Microservices

wir legen hier Wert auf die Abgrenzung von Bounded Contexts

auch fur Monolithen mit Schnittstellen wichtig

Businesslogik am Server kapseln

Die Beschaffungsplattform fur Geschaftskunden 23

Page 51: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

Domain Driven Design

hilft beim Schnitt von Microservices

wir legen hier Wert auf die Abgrenzung von Bounded Contexts

auch fur Monolithen mit Schnittstellen wichtig

Businesslogik am Server kapseln

Die Beschaffungsplattform fur Geschaftskunden 23

Page 52: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

Domain Driven Design

hilft beim Schnitt von Microservices

wir legen hier Wert auf die Abgrenzung von Bounded Contexts

auch fur Monolithen mit Schnittstellen wichtig

Businesslogik am Server kapseln

Die Beschaffungsplattform fur Geschaftskunden 23

Page 53: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

Domain Driven Design

hilft beim Schnitt von Microservices

wir legen hier Wert auf die Abgrenzung von Bounded Contexts

auch fur Monolithen mit Schnittstellen wichtig

Businesslogik am Server kapseln

Die Beschaffungsplattform fur Geschaftskunden 23

Page 54: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

REST-Naiv

reines CRUD

1 GET /orders/1

2 {3 "id": "1",

4 "articles": ...,

5 "state": "SHIPPED"

6 }

1 PUT /orders/1

2 {3 "id": "1",

4 "articles": ...,

5 "state": "RETURNED",

6 }

Es muss dokumentiert werden, wann welche Statusubergange moglich sind

Alle Clients implementieren dafur Code

Businesslogik sehr schwer anderbar

Die Beschaffungsplattform fur Geschaftskunden 24

Page 55: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

REST-Naiv

reines CRUD

1 GET /orders/1

2 {3 "id": "1",

4 "articles": ...,

5 "state": "SHIPPED"

6 }

1 PUT /orders/1

2 {3 "id": "1",

4 "articles": ...,

5 "state": "RETURNED",

6 }

Es muss dokumentiert werden, wann welche Statusubergange moglich sind

Alle Clients implementieren dafur Code

Businesslogik sehr schwer anderbar

Die Beschaffungsplattform fur Geschaftskunden 24

Page 56: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

REST-Naiv

reines CRUD

1 GET /orders/1

2 {3 "id": "1",

4 "articles": ...,

5 "state": "SHIPPED"

6 }

1 PUT /orders/1

2 {3 "id": "1",

4 "articles": ...,

5 "state": "RETURNED",

6 }

Es muss dokumentiert werden, wann welche Statusubergange moglich sind

Alle Clients implementieren dafur Code

Businesslogik sehr schwer anderbar

Die Beschaffungsplattform fur Geschaftskunden 24

Page 57: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

REST-HATEOAS

Entscheidung wann etwas moglich ist kommt vom Server uber Links

1 GET /orders/1

2 {3 "id": "1",

4 "articles": ...,

5 "state": "SHIPPED"

6 "_links": {7 "return": { "href": "/ orders/1" }8 }9 }

Es muss dokumentiert werden, welche und wie Statusubergange moglich sind

Clients konnen uniform feststellen, wann Statusubergange moglich sind

Die Beschaffungsplattform fur Geschaftskunden 25

Page 58: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

REST-HATEOAS

Entscheidung wann etwas moglich ist kommt vom Server uber Links

1 GET /orders/1

2 {3 "id": "1",

4 "articles": ...,

5 "state": "SHIPPED"

6 "_links": {7 "return": { "href": "/ orders/1" }8 }9 }

Es muss dokumentiert werden, welche und wie Statusubergange moglich sind

Clients konnen uniform feststellen, wann Statusubergange moglich sind

Die Beschaffungsplattform fur Geschaftskunden 25

Page 59: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

REST-HATEOAS

Entscheidung wann etwas moglich ist kommt vom Server uber Links

1 GET /orders/1

2 {3 "id": "1",

4 "articles": ...,

5 "state": "SHIPPED"

6 "_links": {7 "return": { "href": "/ orders/1" }8 }9 }

Es muss dokumentiert werden, welche und wie Statusubergange moglich sind

Clients konnen uniform feststellen, wann Statusubergange moglich sind

Die Beschaffungsplattform fur Geschaftskunden 25

Page 60: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

HATEOAS und Schema II

mit Schema: CRUD wird etwas abgemildert

mit Schema: Clients konnen flexibel auf Payloadanderungen reagieren

1 GET /orders/1

2 {3 "id": "1",

4 "articles": ...,

5 "state": "SHIPPED"

6 "_schema": {7 "links": [

8 { "href": "http:// localhost:9090/orders/1",

9 "schema": { "type": "object",

10 "properties": {11 "state": { "type": "string",

12 "enum": ["RETURNED"] }}},13 "rel": "return",

14 "method": "PATCH"}]}}

Die Beschaffungsplattform fur Geschaftskunden 26

Page 61: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

REST-HATEOAS ohne CRUD

zusatzlich sollte ein Update von komplexen Ressourcen nicht moglich sein

Man erstellt eine Art ”Kommando”

Welches Kommando man erstellen darf, wird uber Links kommuniziert

Die Implementierung wird hier sehr viel einfacher, kein ratseln am Server mehr

Zusatzliche Daten konnen erhoben werden

Die Beschaffungsplattform fur Geschaftskunden 27

Page 62: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

REST-HATEOAS ohne CRUD

zusatzlich sollte ein Update von komplexen Ressourcen nicht moglich sein

Man erstellt eine Art ”Kommando”

Welches Kommando man erstellen darf, wird uber Links kommuniziert

Die Implementierung wird hier sehr viel einfacher, kein ratseln am Server mehr

Zusatzliche Daten konnen erhoben werden

Die Beschaffungsplattform fur Geschaftskunden 27

Page 63: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

REST-HATEOAS ohne CRUD

zusatzlich sollte ein Update von komplexen Ressourcen nicht moglich sein

Man erstellt eine Art ”Kommando”

Welches Kommando man erstellen darf, wird uber Links kommuniziert

Die Implementierung wird hier sehr viel einfacher, kein ratseln am Server mehr

Zusatzliche Daten konnen erhoben werden

Die Beschaffungsplattform fur Geschaftskunden 27

Page 64: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

REST-HATEOAS ohne CRUD

zusatzlich sollte ein Update von komplexen Ressourcen nicht moglich sein

Man erstellt eine Art ”Kommando”

Welches Kommando man erstellen darf, wird uber Links kommuniziert

Die Implementierung wird hier sehr viel einfacher, kein ratseln am Server mehr

Zusatzliche Daten konnen erhoben werden

Die Beschaffungsplattform fur Geschaftskunden 27

Page 65: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

REST-HATEOAS ohne CRUD

zusatzlich sollte ein Update von komplexen Ressourcen nicht moglich sein

Man erstellt eine Art ”Kommando”

Welches Kommando man erstellen darf, wird uber Links kommuniziert

Die Implementierung wird hier sehr viel einfacher, kein ratseln am Server mehr

Zusatzliche Daten konnen erhoben werden

Die Beschaffungsplattform fur Geschaftskunden 27

Page 66: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

HATEOAS und Schema

1 GET /orders/1

2 ...

3 { "href": "http:// localhost:9090/returns",

4 "schema": {"type": "object",

5 "properties": {6 "id": {"type": "uuid"},7 "message": {"type": "string"},8 "orderId": {"type": "string",

9 "enum": ["1"]}},10 "required": ["message","orderId","id"]},11 "method": "PUT",

12 "rel": "return"}...

Die Beschaffungsplattform fur Geschaftskunden 28

Page 67: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

GraphQL-Naiv

reine CRUD Mutations

1 createOrder(order)

2 updateOrder(order)

Es muss dokumentiert werden, wann welche Statusubergange moglich sind

Alle Clients implementieren dafur Code

Businesslogik sehr schwer anderbar

Kommt bekannt vor? :)

Die Beschaffungsplattform fur Geschaftskunden 29

Page 68: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

GraphQL-Naiv

reine CRUD Mutations

1 createOrder(order)

2 updateOrder(order)

Es muss dokumentiert werden, wann welche Statusubergange moglich sind

Alle Clients implementieren dafur Code

Businesslogik sehr schwer anderbar

Kommt bekannt vor? :)

Die Beschaffungsplattform fur Geschaftskunden 29

Page 69: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

GraphQL-Naiv

reine CRUD Mutations

1 createOrder(order)

2 updateOrder(order)

Es muss dokumentiert werden, wann welche Statusubergange moglich sind

Alle Clients implementieren dafur Code

Businesslogik sehr schwer anderbar

Kommt bekannt vor? :)

Die Beschaffungsplattform fur Geschaftskunden 29

Page 70: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

GraphQL-Naiv

reine CRUD Mutations

1 createOrder(order)

2 updateOrder(order)

Es muss dokumentiert werden, wann welche Statusubergange moglich sind

Alle Clients implementieren dafur Code

Businesslogik sehr schwer anderbar

Kommt bekannt vor? :)

Die Beschaffungsplattform fur Geschaftskunden 29

Page 71: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

GraphQL-Naiv

reine CRUD Mutations

1 createOrder(order)

2 updateOrder(order)

Es muss dokumentiert werden, wann welche Statusubergange moglich sind

Alle Clients implementieren dafur Code

Businesslogik sehr schwer anderbar

Kommt bekannt vor? :)

Die Beschaffungsplattform fur Geschaftskunden 29

Page 72: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

GraphQL Commands

Kein CRUD mehr

1 cancelOrder(orderId: ID!, message: String)

2 returnOrder(orderId: ID!, message: String)

Es muss immer noch dokumentiert werden, wann welche Statusubergangemoglich sind

Reduziert Komplexitat im Client und Server

Die Beschaffungsplattform fur Geschaftskunden 30

Page 73: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

GraphQL Commands

Kein CRUD mehr

1 cancelOrder(orderId: ID!, message: String)

2 returnOrder(orderId: ID!, message: String)

Es muss immer noch dokumentiert werden, wann welche Statusubergangemoglich sind

Reduziert Komplexitat im Client und Server

Die Beschaffungsplattform fur Geschaftskunden 30

Page 74: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

GraphQL Commands

Kein CRUD mehr

1 cancelOrder(orderId: ID!, message: String)

2 returnOrder(orderId: ID!, message: String)

Es muss immer noch dokumentiert werden, wann welche Statusubergangemoglich sind

Reduziert Komplexitat im Client und Server

Die Beschaffungsplattform fur Geschaftskunden 30

Page 75: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

GraphQL HATEOAS Extensions

Wie konnen wir darstellen, welche Statusubergange im aktuellen Zustandmoglich sind?

Die Beschaffungsplattform fur Geschaftskunden 31

Page 76: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

GraphQL HATEOAS Extensions

Wie konnen wir darstellen, welche Statusubergange im aktuellen Zustandmoglich sind?

→ Relay-Style Pagination

→ Statusinformationen in den Kanten

1 {2 orders {3 edges {4 node {5 id

6 state

7 }8

9

10

11 }12 }13 }

Die Beschaffungsplattform fur Geschaftskunden 31

Page 77: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

DDD

GraphQL HATEOAS Extensions

Wie konnen wir darstellen, welche Statusubergange im aktuellen Zustandmoglich sind?

→ Relay-Style Pagination → Statusinformationen in den Kanten

1 {2 orders {3 edges {4 node {5 id

6 state

7 }8

9

10

11 }12 }13 }

1 {2 orders {3 edges {4 node {5 id

6 state

7 }8

9 returnOrder

10 cancelOrder

11 }12 }13 }

Die Beschaffungsplattform fur Geschaftskunden 31

Page 78: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

CQRS

Command/Query Responsibility Segregation

Trennung von Kommandos (Schreiben) und Querys (Lesen)

auf Modellierungs- und Deploymentebene

dadurch getrennt entwickelbar, skalierbar, deploybar

Voraussetzung fur Eventsourcing

Bedeutet aber auch Aufwand! Nutzen abwagen.

Die Beschaffungsplattform fur Geschaftskunden 32

Page 79: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

CQRS

Command/Query Responsibility Segregation

Trennung von Kommandos (Schreiben) und Querys (Lesen)

auf Modellierungs- und Deploymentebene

dadurch getrennt entwickelbar, skalierbar, deploybar

Voraussetzung fur Eventsourcing

Bedeutet aber auch Aufwand! Nutzen abwagen.

Die Beschaffungsplattform fur Geschaftskunden 32

Page 80: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

CQRS

Command/Query Responsibility Segregation

Trennung von Kommandos (Schreiben) und Querys (Lesen)

auf Modellierungs- und Deploymentebene

dadurch getrennt entwickelbar, skalierbar, deploybar

Voraussetzung fur Eventsourcing

Bedeutet aber auch Aufwand! Nutzen abwagen.

Die Beschaffungsplattform fur Geschaftskunden 32

Page 81: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

CQRS

Command/Query Responsibility Segregation

Trennung von Kommandos (Schreiben) und Querys (Lesen)

auf Modellierungs- und Deploymentebene

dadurch getrennt entwickelbar, skalierbar, deploybar

Voraussetzung fur Eventsourcing

Bedeutet aber auch Aufwand! Nutzen abwagen.

Die Beschaffungsplattform fur Geschaftskunden 32

Page 82: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

CQRS

Command/Query Responsibility Segregation

Trennung von Kommandos (Schreiben) und Querys (Lesen)

auf Modellierungs- und Deploymentebene

dadurch getrennt entwickelbar, skalierbar, deploybar

Voraussetzung fur Eventsourcing

Bedeutet aber auch Aufwand! Nutzen abwagen.

Die Beschaffungsplattform fur Geschaftskunden 32

Page 83: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

CQRS

REST

Mit Ressourcen auf Command-Ebene geht dies sehr gut

Aufpassen bei Ruckgabe von PUT/POST

Auf naturliche Weise kann Eventsourcing unterstutzt werden

Die Beschaffungsplattform fur Geschaftskunden 33

Page 84: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

CQRS

REST

Mit Ressourcen auf Command-Ebene geht dies sehr gut

Aufpassen bei Ruckgabe von PUT/POST

Auf naturliche Weise kann Eventsourcing unterstutzt werden

Die Beschaffungsplattform fur Geschaftskunden 33

Page 85: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

CQRS

Command/Query Responsibility Segregation

Die Beschaffungsplattform fur Geschaftskunden 34

Page 86: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

CQRS

REST II

auch spatere Einfuhrung moglich.

1 PUT /returns ...

2 {3 "_links": {4 "canonical": { "href": "/ returns/4?eventSeq=47" }5 }6 }

Die Beschaffungsplattform fur Geschaftskunden 35

Page 87: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

CQRS

GraphQL

Mutations (als Commands) sind bereits von Queries getrennt

Grundsatzlich kann bei einer Mutation ein beliebiges Objektgelesen/zuruckgegeben werden

Im Relay Umfeld werden haufig alle abhangigen Anderungen gelesen damit derClient die Caches updaten kann

Alternative: Mutation + Subscription nutzen

Die Beschaffungsplattform fur Geschaftskunden 36

Page 88: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

CQRS

GraphQL

Mutations (als Commands) sind bereits von Queries getrennt

Grundsatzlich kann bei einer Mutation ein beliebiges Objektgelesen/zuruckgegeben werden

Im Relay Umfeld werden haufig alle abhangigen Anderungen gelesen damit derClient die Caches updaten kann

Alternative: Mutation + Subscription nutzen

Die Beschaffungsplattform fur Geschaftskunden 36

Page 89: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

CQRS

GraphQL

Mutations (als Commands) sind bereits von Queries getrennt

Grundsatzlich kann bei einer Mutation ein beliebiges Objektgelesen/zuruckgegeben werden

Im Relay Umfeld werden haufig alle abhangigen Anderungen gelesen damit derClient die Caches updaten kann

Alternative: Mutation + Subscription nutzen

Die Beschaffungsplattform fur Geschaftskunden 36

Page 90: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

CQRS

GraphQL

Mutations (als Commands) sind bereits von Queries getrennt

Grundsatzlich kann bei einer Mutation ein beliebiges Objektgelesen/zuruckgegeben werden

Im Relay Umfeld werden haufig alle abhangigen Anderungen gelesen damit derClient die Caches updaten kann

Alternative: Mutation + Subscription nutzen

Die Beschaffungsplattform fur Geschaftskunden 36

Page 91: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

API First

API First

in GraphQL ist das Schema fester Bestandteil des Standards

Entwickler von Server und Client haben dies jederzeit, API first at its best.

API-First Hilfsmittel fur REST prinzipiell vorhanden (Open-API 3.0,Json-Hyperschema, RAML)

native Unterstutzung nur fur statische Links

Bei beiden: HATEOAS mit dynamischen Links erfordert basteln

Die Beschaffungsplattform fur Geschaftskunden 37

Page 92: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

API First

API First

in GraphQL ist das Schema fester Bestandteil des Standards

Entwickler von Server und Client haben dies jederzeit, API first at its best.

API-First Hilfsmittel fur REST prinzipiell vorhanden (Open-API 3.0,Json-Hyperschema, RAML)

native Unterstutzung nur fur statische Links

Bei beiden: HATEOAS mit dynamischen Links erfordert basteln

Die Beschaffungsplattform fur Geschaftskunden 37

Page 93: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

API First

API First

in GraphQL ist das Schema fester Bestandteil des Standards

Entwickler von Server und Client haben dies jederzeit, API first at its best.

API-First Hilfsmittel fur REST prinzipiell vorhanden (Open-API 3.0,Json-Hyperschema, RAML)

native Unterstutzung nur fur statische Links

Bei beiden: HATEOAS mit dynamischen Links erfordert basteln

Die Beschaffungsplattform fur Geschaftskunden 37

Page 94: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

API First

API First

in GraphQL ist das Schema fester Bestandteil des Standards

Entwickler von Server und Client haben dies jederzeit, API first at its best.

API-First Hilfsmittel fur REST prinzipiell vorhanden (Open-API 3.0,Json-Hyperschema, RAML)

native Unterstutzung nur fur statische Links

Bei beiden: HATEOAS mit dynamischen Links erfordert basteln

Die Beschaffungsplattform fur Geschaftskunden 37

Page 95: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

API First

API First

in GraphQL ist das Schema fester Bestandteil des Standards

Entwickler von Server und Client haben dies jederzeit, API first at its best.

API-First Hilfsmittel fur REST prinzipiell vorhanden (Open-API 3.0,Json-Hyperschema, RAML)

native Unterstutzung nur fur statische Links

Bei beiden: HATEOAS mit dynamischen Links erfordert basteln

Die Beschaffungsplattform fur Geschaftskunden 37

Page 96: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Fazit

Disclaimer

Man kann auch fur REST auf wenige Requests optimieren

durch Schaffen von sehr großen Read-Only Ressourcendurch eingebettete Ressourcen (siehe zum Beispiel HAL-Format)durch Auflosen von Links bis zu einer gewissen Tiefe (siehe zum BeispielContentful-API)

alles handischer Aufwand

beim Formulieren von Queries haufig kompliziert

Die Beschaffungsplattform fur Geschaftskunden 38

Page 97: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Fazit

Disclaimer

Man kann auch fur REST auf wenige Requests optimieren

durch Schaffen von sehr großen Read-Only Ressourcen

durch eingebettete Ressourcen (siehe zum Beispiel HAL-Format)durch Auflosen von Links bis zu einer gewissen Tiefe (siehe zum BeispielContentful-API)

alles handischer Aufwand

beim Formulieren von Queries haufig kompliziert

Die Beschaffungsplattform fur Geschaftskunden 38

Page 98: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Fazit

Disclaimer

Man kann auch fur REST auf wenige Requests optimieren

durch Schaffen von sehr großen Read-Only Ressourcendurch eingebettete Ressourcen (siehe zum Beispiel HAL-Format)

durch Auflosen von Links bis zu einer gewissen Tiefe (siehe zum BeispielContentful-API)

alles handischer Aufwand

beim Formulieren von Queries haufig kompliziert

Die Beschaffungsplattform fur Geschaftskunden 38

Page 99: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Fazit

Disclaimer

Man kann auch fur REST auf wenige Requests optimieren

durch Schaffen von sehr großen Read-Only Ressourcendurch eingebettete Ressourcen (siehe zum Beispiel HAL-Format)durch Auflosen von Links bis zu einer gewissen Tiefe (siehe zum BeispielContentful-API)

alles handischer Aufwand

beim Formulieren von Queries haufig kompliziert

Die Beschaffungsplattform fur Geschaftskunden 38

Page 100: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Fazit

Disclaimer

Man kann auch fur REST auf wenige Requests optimieren

durch Schaffen von sehr großen Read-Only Ressourcendurch eingebettete Ressourcen (siehe zum Beispiel HAL-Format)durch Auflosen von Links bis zu einer gewissen Tiefe (siehe zum BeispielContentful-API)

alles handischer Aufwand

beim Formulieren von Queries haufig kompliziert

Die Beschaffungsplattform fur Geschaftskunden 38

Page 101: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Fazit

Disclaimer

Man kann auch fur REST auf wenige Requests optimieren

durch Schaffen von sehr großen Read-Only Ressourcendurch eingebettete Ressourcen (siehe zum Beispiel HAL-Format)durch Auflosen von Links bis zu einer gewissen Tiefe (siehe zum BeispielContentful-API)

alles handischer Aufwand

beim Formulieren von Queries haufig kompliziert

Die Beschaffungsplattform fur Geschaftskunden 38

Page 102: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Fazit

Wann REST

Firma/Kunden haben sich schon langere Zeit auf REST commitet

in diesem Fall kann man aber trotzdem beides anbieten (schlankesGraph-QL-Lambda vor den REST-Schnittstellen)

HTTP-Caching ist relevant (interne Schnittstellen, offentliche Schnittstellenohne HTTPS,...)

Die Beschaffungsplattform fur Geschaftskunden 39

Page 103: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Fazit

Wann REST

Firma/Kunden haben sich schon langere Zeit auf REST commitet

in diesem Fall kann man aber trotzdem beides anbieten (schlankesGraph-QL-Lambda vor den REST-Schnittstellen)

HTTP-Caching ist relevant (interne Schnittstellen, offentliche Schnittstellenohne HTTPS,...)

Die Beschaffungsplattform fur Geschaftskunden 39

Page 104: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Fazit

Wann GraphQL

man mochte eine hohe Standardisierung in Schnittstellen-Design und Tooling

Performance spielt wesentliche Rolle (Frontends, ...)

Umfeld akzeptiert neue Herangehensweisen

”If your API is not using hypermedia controls, then GraphQL could be a more

relevant approach, because you weren’t really using REST anyway.“

Phil Sturgeon, Platform Engineer @ WeWork

Empfehlung: unbedingt anschauen! :)

Die Beschaffungsplattform fur Geschaftskunden 40

Page 105: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Fazit

Wann GraphQL

man mochte eine hohe Standardisierung in Schnittstellen-Design und Tooling

Performance spielt wesentliche Rolle (Frontends, ...)

Umfeld akzeptiert neue Herangehensweisen

”If your API is not using hypermedia controls, then GraphQL could be a more

relevant approach, because you weren’t really using REST anyway.“

Phil Sturgeon, Platform Engineer @ WeWork

Empfehlung: unbedingt anschauen! :)

Die Beschaffungsplattform fur Geschaftskunden 40

Page 106: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Fazit

Wann GraphQL

man mochte eine hohe Standardisierung in Schnittstellen-Design und Tooling

Performance spielt wesentliche Rolle (Frontends, ...)

Umfeld akzeptiert neue Herangehensweisen

”If your API is not using hypermedia controls, then GraphQL could be a more

relevant approach, because you weren’t really using REST anyway.“

Phil Sturgeon, Platform Engineer @ WeWork

Empfehlung: unbedingt anschauen! :)

Die Beschaffungsplattform fur Geschaftskunden 40

Page 107: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Fazit

Wann GraphQL

man mochte eine hohe Standardisierung in Schnittstellen-Design und Tooling

Performance spielt wesentliche Rolle (Frontends, ...)

Umfeld akzeptiert neue Herangehensweisen

”If your API is not using hypermedia controls, then GraphQL could be a more

relevant approach, because you weren’t really using REST anyway.“

Phil Sturgeon, Platform Engineer @ WeWork

Empfehlung: unbedingt anschauen! :)

Die Beschaffungsplattform fur Geschaftskunden 40

Page 108: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Fazit

Wann GraphQL

man mochte eine hohe Standardisierung in Schnittstellen-Design und Tooling

Performance spielt wesentliche Rolle (Frontends, ...)

Umfeld akzeptiert neue Herangehensweisen

”If your API is not using hypermedia controls, then GraphQL could be a more

relevant approach, because you weren’t really using REST anyway.“

Phil Sturgeon, Platform Engineer @ WeWork

Empfehlung: unbedingt anschauen! :)

Die Beschaffungsplattform fur Geschaftskunden 40

Page 109: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Vielen Dank fur Ihre Aufmerksamkeit.

Fragen? :)

Die Beschaffungsplattform fur Geschaftskunden 41

Page 110: GraphQL, das bessere REST?...GraphQL? "GraphQL is a query language for APIs and a runtime for ful lling those queries with your existing data." gedacht als d unner API Layer zwischen

Fazit

Verweise

Seite 10: GraphiQL https://github.com/graphql/graphiql

Seite 11: Launchpad https://launchpad.graphql.com

Seite 12: Apollo Developers http://dev.apollodata.com

Seite 13: graphql-faker https://github.com/APIs-guru/graphql-faker

Seite 15: http://graphql.org/users/

Die Beschaffungsplattform fur Geschaftskunden 42