Commit 0c614d4d authored by Robert Hostlowsky's avatar Robert Hostlowsky

minor reformatting

parent 67978148
......@@ -11,6 +11,7 @@ GraphQL ist eine Spezifikation einer Client-Server-Kommunikation (über http).
Tatsächlich wurde 2015 eine ausführliche Spezifikation veröffentlicht, siehe [graphql.org](http://graphql.org).
Auf deren Basis hat sich dann ein großes Ökosystem an Bibliotheken und Tools für verschiedene Programmiersprachen für Server und Client entwickelt hat.
Eine Übersicht findet man bei ["awesome GraphQL"](https://github.com/chentsulin/awesome-graphq)
* GraphQL ist eine Abfragesprache
* GraphQL ist ein zentraler Http Endpoint zur Abfrage aus verschiedenen Datenquellen
......@@ -31,6 +32,7 @@ https://api.spotify.com/v1/albums/{album-id}/tracks
```
müssen wir bei GraphQL nur genau **eine** Abfrage **für alle Infos** an einen **einzigen Endpunkt** an den Server absetzen.
```
queryArtist(byName:"Marilyn"){
name
......@@ -48,6 +50,7 @@ Dabei müssen wir im Client genau angeben, welche Attribute benötigt werden.
Somit hat aber die Client-Seite die genaue Kontrolle darüber, welche Daten gesendet werden sollen.
Die Vorteile liegen auf der Hand:
* **Nur ein http request**: In mobilen Netzen ist jeder Verbindungsaufbau und
jeder erneute Request durch eine hohe Latenz und lange Ping Zeiten "teuer":
Mit jeder neuen, nachfolgenden "(N+1)" Abfrage dauert es insgesamt sehr viel länger, auch wenn nur
......@@ -58,9 +61,12 @@ Im Gegensatz dazu werden bei REST grundsätzlich immer alle Daten einer "Ressour
Wenn beispielsweise nur ein Bild eines Künstlers angezeigt werden soll, würden auch alle anderen
Attribute mitgeschickt werden, anstatt nur ein Link zum Bild.
Als workaround könnte man einen weiteren REST Endpunkt mit genau dieser Funktionalität anbieten,
aber immer mit Extra Aufwand!
aber immer mit Extraaufwand!
Es gäbe zwar auch die Möglichkeit, zum Beispiel verschiedene Repräsentationen per mime-type Auswahl (also, z.B. json order html) anzufordern, nur liegt die Kontrolle dann immer noch auf der Serverseite!
Das ist bei GraphQL nicht mehr nötig!
Außerdem kann nun auch schnell überprüft werden, ob ein angefordertes Attribut überhaupt existiert:
Fehler, dass ein erwartetes `Nachname` Feld "leer" bleibt, weil stattdessen `surname` benutzt werden müsste, sind damit Vergangenheit!
......@@ -92,15 +98,22 @@ later -->
## GraphQL Schema
Woher weis man aber welche Attribute zu Verfügung stehen?
GraphQL besitzt ein Schema, das aus einer Liste von **Typ-Definitionen** der Entitäten
mit ihren Feldern besteht.
Es ist mit einem Datenbankschema vergleichbar.
? notwendig?
> "...Man assoziiert HTTP allgemein mit REST mit "Ressourcen" als Kernkonzept.
>
> **Im Kontrast dazu steht GraphQLs konzeptuelles Model eines Entitäten-Graphen.**"
>
> (http://graphql.org/learn/serving-over-http)
> [serving over http, (graphql.org)](http://graphql.org/learn/serving-over-http)
GraphQL besitzt ein Schema, das aus einer Liste von **Typ-Definitionen** der Entitäten
mit ihren Feldern besteht.
Es ist mit einem Datenbankschema vergleichbar.
? notwendig?
> "Die grundlegenden Komponenten eines GraphQL-Schemas sind Objekttypen, die
> eine bestimmte Art von Objekt mit seinen Feldern darstellen, wie sie von
> einem [REST] Server abgefragt werden können"
> [Schemas und Typen, (graphql.org)](http://graphql.org/learn/schema/)
Somit sind gegenüber REST auch die Beziehungen zwischen den Entitäten festgelegt.
......@@ -308,7 +321,7 @@ auf die wir gleich genauer eingehen werden:
})));
```
2. Auch wenn GraphQL nur in baumartigen Strukturen zurückliefern kann, kann jede Abfrage auch Daten aus
3. Auch wenn GraphQL nur in baumartigen Strukturen zurückliefern kann, kann jede Abfrage auch Daten aus
einem **zyklischen Graphen** abrufen:
Zum Beispiel bei folgedem Szenario: Eine Suche in Twitter nach allen "Followern der Follower" eines Twitter-Benutzers enthält typischerweise auch der Startknoten, wenn sich Twitter-Benutzer gegenseitig folgen.
Mit solchen Abfragen wächst die Ergebnismenge natürlich schnell exponentiell an.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment