Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GraphQL und REST

GraphQL und REST

In Literaturbeiträgen und Foren wird GraphQL als Alternative zu REST vorgestellt. Dabei kommt eine Frage auf: Ist es möglich einen Architekturstil mit einer Sprache zu vergleichen? GraphQL ist der syntaktischen Zucker für unsere HTTP-basierten APIs. Doch wie steht es wirklich um die Frage REST vs. GraphQL? Dieser Vortrag beantwortet die o.g. Fragestellung anhand von Codebeispielen und Möglichkeiten.

Holger Tiemeyer

January 22, 2019
Tweet

More Decks by Holger Tiemeyer

Other Decks in Technology

Transcript

  1. 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
  2. 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
  3. 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
  4. 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" }
  5. 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
  6. 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..."} }
  7. 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
  8. 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.”
  9. 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
  10. Spring 25.11.2019 GraphQL UND REST 13 Buchverwaltung REST-API Logik Persistenz

    Repository Proxy Daten- modell Service Fassade (Optional) API Ressource
  11. 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
  12. GraphQL 25.11.2019 GraphQL UND REST 15 Innovation 2012, Facebook Hierarchisch

    und produktzentrisch Streng typisiert Introspektiv
  13. 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
  14. 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.
  15. 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! }
  16. 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.
  17. 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
  18. 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
  19. 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! }
  20. 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!]! }
  21. 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
  22. 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
  23. 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
  24. 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
  25. 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
  26. 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
  27. adesso AG Stockholmer Allee 20 44269 Dortmund T +49 231

    7000-7000 F +49 231 7000-1000 www.adesso.de Vielen Dank!