Slide 1

Slide 1 text

GraphQL UND REST Holger Tiemeyer

Slide 2

Slide 2 text

Kurzprofil 25.11.2019 GraphQL UND REST 2 Schwerpunkte • Softwarearchitektur und –beratung • Enterprise-Architektur • Softwareentwicklung • Projektleitung Branchen • Automotive • Health • IT Dienstleistung • Banken/Versicherung Biographie • Diplom Informatiker • ISAQB: • Certified Professional for Software Architecture (Advanced Level) • Leiter AG Hochschulen • IREB Certified Professional for Requirements Engineering (Foundation Level) • OMG-Certified Expert in Business Process Management (BPM) Holger Tiemeyer 18 Jahre Erfahrung in Enterprise-Projekten

Slide 3

Slide 3 text

Innovation? 25.11.2019 GraphQL UND REST 3 Innovation (Substantiv, f[eminin]): Einführung von etwas Neuem vor allem in Gesellschaft, Politik, Technik oder Wirtschaft, von dem man sich wesentliche Verbesserung verspricht. https://de.wiktionary.org/wiki/Innovation

Slide 4

Slide 4 text

Fieldings Vision 25.11.2019 GraphQL UND REST 4

Slide 5

Slide 5 text

REpresentational State Transfer (REST) 25.11.2019 GraphQL UND REST 5 Innovation 2000: Roy Fielding, Dissertation Architekturstil, definiert durch „Constraints“ Hohes Missverständnis über REST REST ist eher ein Schlagwort, inflationär benutzt

Slide 6

Slide 6 text

(Adressierbare) Ressourcen 25.11.2019 GraphQL UND REST 6

Slide 7

Slide 7 text

Repräsentation einer Ressource (Benutzer) 25.11.2019 GraphQL UND REST 7 { "uuid":"b8aead807408466246eeef3c6c78513bf3f7e", "angelegtAm": 1494595594, "geaendertAm": 1494595594, "bearbeitetDurchUuid": "BenutzerUUID", "vorname": "Max", "nachname": "Mustermann", "inaktivAb": null, "bearbeitungStatus": "ACTIVE" }

Slide 8

Slide 8 text

Zustandsänderung mittels WEB (HTTP-Verben) 25.11.2019 GraphQL UND REST 8 Transition HTTP-Verb Save POST First login PUT Deactivate PUT Activate PUT Update (active, inactive) PUT Delete PUT Get GET Self GET

Slide 9

Slide 9 text

Links 25.11.2019 GraphQL UND REST 9 Transition HTTP-Verb Link (https://exmaple.com) Save POST /user/save/{uuid} First login PUT /user/first_login/{uuid} Deactivate PUT /user/deactivate/{uuid} Activate PUT /user/activate/{uuid} Self GET /user/{uuid} "_links": { "self": { "href": "http://localhost:8080/user/b8aea..."}, "first_login": { "href": "http://localhost:8080/user/first_login/b8aea..."}, "deactivate": { "href": "http://localhost:8080/user/deactivate/b8aea..."}, "activate": { "href": "http://localhost:8080/user/activate/b8aea..."} }

Slide 10

Slide 10 text

Multimedia Hypermedia Hypermedia 25.11.2019 GraphQL UND REST 10 Hypertext: • Vernetzung von Texten • Netzförmige, dynamische Struktur • Nicht-linear Hypermedia: • Vernetzung von Ressourcen jeglicher Art Multimedia: • Werke, die aus mehreren (digitalen) Medien bestehen (Text, Fotografie, Grafik, Audio, Video, …) Hypertext

Slide 11

Slide 11 text

Innovation 2000: REST-Architekturstil 25.11.2019 GraphQL UND REST 11 „REST is defined by four interface constraints: 1.) identification of resources 2.) manipulation of resources through representations 3.) selfdescriptive messages and 4.) hypermedia as the engine of application state.”

Slide 12

Slide 12 text

Richardsons Maturity Model 25.11.2019 GraphQL UND REST 12 Stufe 0: Eine einzelne URI und ein einzelnes Verb Stufe 1: Multiple, URI-basierte Ressourcen und einzelne HTTP-Verben Stufe 2: Multiple, URI-basierte Ressourcen und HTTP-Verben Stufe 3: HATEOAS The Swamp of POX Ressourcen (URIs) HTTP-Verben Hypermedia REST, RESTful

Slide 13

Slide 13 text

Spring 25.11.2019 GraphQL UND REST 13 Buchverwaltung REST-API Logik Persistenz Repository Proxy Daten- modell Service Fassade (Optional) API Ressource

Slide 14

Slide 14 text

Kritik an REST 25.11.2019 GraphQL UND REST 14 Overfetching Auf der Einkaufsseite soll nur der Benutzername angezeigt werden, ich bekomme jedoch immer die gesamten Benutzerdaten. Underfetching (n+1-Problem) Als Benutzer möchte ich meine gesamte Bestellhistorie einsehen, damit …  n +1 Queries Management von Endpunkten

Slide 15

Slide 15 text

GraphQL 25.11.2019 GraphQL UND REST 15 Innovation 2012, Facebook Hierarchisch und produktzentrisch Streng typisiert Introspektiv

Slide 16

Slide 16 text

QL (Query Language) 25.11.2019 GraphQL UND REST 16 SQL (Structured Query Language) Definiert „Create, Read, Update, Delete“-Operationen für rel. Datenbanken CRUD mit REST HTTP-Verben: GET, POST, PUT, DELETE via Endpoint-URIs  Keine wirkliche Query Language GraphQL Selektion: Read (Query) Mutation: Create, Update, Delete

Slide 17

Slide 17 text

Schema 25.11.2019 GraphQL UND REST 17 • Definition von Daten, die an die Client ausgeliefert werden sollen. => Reduktion des Datenvolumens • Definition von Verbundtypen (Verknüpfung von Ressourcen). • Spezifikation von Argumenten zur Filterung für z.B. Paging, Sortierung, etc. • Schreiboperationen (Mutations) explizit unabhängig von Abfragen.

Slide 18

Slide 18 text

Typen 25.11.2019 GraphQL UND REST 18 • Skalare Typen Int, Float, String, Boolean, ID • Objekttypen type Autor { id: ID! name: String! vorname: String } • Enums enum Publikationstyp { ARTIKEL BUCH } • Benutzerdefinierte Typen type Publikation { autor: Autor! typ: Publikationstyp! }

Slide 19

Slide 19 text

Listen 25.11.2019 GraphQL UND REST 19 • Definition erfolgt über eckige Klammern []: [Buch] Listendeklaration Definition [Buch] Eine Liste von Büchern mit „Nullable“ Einträgen. [Buch!] Eine Liste von Büchern mit „Nicht-Nullable“ Einträgen. [Buch]! Eine „Nicht-Nullable“ Liste von Büchern mit „Nullable“ Einträgen. [Buch!]! Eine „Nicht-Nullable“ Liste von Büchern mit „Nicht- Nullable“ Einträgen.

Slide 20

Slide 20 text

1:1-Beziehung 25.11.2019 GraphQL UND REST 20 type Buch { id: ID! title: String! cover: Cover! } Buch Cover hat/ bezieht sich auf type Cover { id: ID! image: CoverImage } Unidirektional

Slide 21

Slide 21 text

1:1-Beziehung 25.11.2019 GraphQL UND REST 21 type Buch { id: ID! title: String! cover: Cover! } Buch Cover hat/ bezieht sich auf type Cover { id: ID! image: CoverImage buch: Buch! } Bidirektional

Slide 22

Slide 22 text

Autor Buch schreibt 1:M-Beziehung 25.11.2019 GraphQL UND REST 22 type Autor { id: ID! name: String! buch: [Buch!]! } type Buch { id: ID! title: String! cover: Cover! }

Slide 23

Slide 23 text

Autor Enzy- klopä die trägt bei M:N-Beziehung 25.11.2019 GraphQL UND REST 23 type Autor { id: ID! name: String! buch: [Enzyklopädie!]! } type Einzyklopädie { id: ID! title: String! autor: [Autor!]! }

Slide 24

Slide 24 text

Graphen 25.11.2019 GraphQL UND REST 24 Buch Kapitel Kapitel Autor 1 Autor 2 Verlag

Slide 25

Slide 25 text

REST-Architekturstil 25.11.2019 GraphQL UND REST 25 System A Logik Persistenz System B Logik Persistenz System C Logik Persistenz Client Modul A Modul B Modul C Modul D REST (XML-basiert, z.B. Atom-Feed) REST-Endpunkte

Slide 26

Slide 26 text

Architekturstil mit GraphQL 25.11.2019 GraphQL UND REST 26 System A Logik Persistenz System B Logik Persistenz System C Persistenz Client Modul A Modul B Modul C Modul D GraphQL-Endpunkte

Slide 27

Slide 27 text

Richardsons Maturity Model 25.11.2019 GraphQL UND REST 27 Stufe 0: Eine einzelne URI und ein einzelnes Verb Stufe 1: Multiple, URI-basierte Ressourcen und einzelne HTTP-Verben Stufe 2: Multiple, URI-basierte Ressourcen und HTTP-Verben Stufe 3: HATEOAS The Swamp of POX Ressourcen (URIs) HTTP-Verben Hypermedia REST, RESTful GraphQL

Slide 28

Slide 28 text

Kritik an GraphQL 25.11.2019 GraphQL UND REST 28 Error-Handling nur in Anwendungsschicht Lesen und Schreiben unabhängig (Bezug fehlt) Kein Caching über HTTP Absicherung der Infrastruktur vor Risiken komplexer Anfragen Eine Query über „alles“ kann sehr komplex werden

Slide 29

Slide 29 text

GraphQL UND REST 25.11.2019 GraphQL UND REST 29

Slide 30

Slide 30 text

Herausforderungen 25.11.2019 GraphQL UND REST 30 Definition multipler Endpunkte (für z.B. Statusübergänge) Darstellung von Links innerhalb der Ressourcen  Endpunkte entsprechen nicht notwendiger Weise den Links Starke vs. lose Kopplung pro Anwendungsfall entscheiden

Slide 31

Slide 31 text

25.11.2019 GraphQL UND REST 31 System A Logik Persistenz System B Logik Persistenz System C Logik Persistenz Client Modul A Modul B Modul C Modul D REST (XML-basiert, z.B. Atom-Feed) REST-Endpunkte GraphQL-Gateway

Slide 32

Slide 32 text

adesso AG Stockholmer Allee 20 44269 Dortmund T +49 231 7000-7000 F +49 231 7000-1000 www.adesso.de Vielen Dank!