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

Update grundlagen.md: Überarbeitung Intro

parent 47073ca3
# Grundlagen
Wir werden uns in diesem Abschnitt die Grundlagen von GraphQL ansehen:
- Kommunikation
- Typisierung
wie es beispielhaft demonstrieren, wie es mit
Javascript in einer Node.js Express Anwendung eingebunden wird.
ReferenzImpl?
Für unser Beispiel, werden wir
* ein sogenanntes **GraphQL Schema** definieren, und
Später
* einen Javascript **Express Server** aufsetzen,
* die Daten **per REST Api von Spotify** laden, asynchron zusammenfassen und von unserem Server per GraphQL ausliefern
Zuerst wollen wir in diesem Abschnitt,
erfahren, was GraphQL genau ist und
wie es für die Kommunikation zwischen Client und Server eingesetzt werden kann.
Im nächten Abschnitt werden wir dann einen GraphQL Server für Spotify Musik Daten implementiern.
## Was ist GraphQL?
Als kurze Beschreibung soll für uns diese Definition dienen:
GraphQL ist eine Spezifikation einer Client-Server-Kommunikation (über http). Mehr Details kann man auf [graphql.org](http://graphql.org) finden. Tatsächlich wurde 2015 eine ausführliche Spezifikation veröffentlicht, auf deren Basis sich ein großes Ökosystem für Server und Client entwickelt hat. Eine Übersicht findet man bei ["awesome GraphQL"](https://github.com/chentsulin/awesome-graphq)
Hinter der Entwicklung von GraphQL stand für Facebook das **Ziel**, eine **effiziente und flexible client-server-Kommunikation** zu ermöglichen.
* GraphQL ist eine Schnittstelle für die spezifischen Anforderungen der
Kommunikation von Mobilen Geräten
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
Hinter der Entwicklung von GraphQL stand für Facebook das **Ziel**, eine **effiziente und flexible client-server-Kommunikation** zu ermöglichen:
GraphQL ist eine optimierte Schnittstelle für spezifischen Anforderungen von mobilen Geräten in mobilen Netzen, und wird seid 2012 von Facebook eingesetzt.
### Unterschied zu REST
Für einen **einfachen Vergleich** können wir beispielsweise per Spotify API nach einem Künstler suchen, und seine Alben und die Liste der Tracks laden. Anstatt dazu folgende REST Endpoints auf der Client Seite (mehrmals) abzufragen:
Für einen **Vergleich** zu REST können wir folgendes Beispiel heranziehen:
Per Spotify API suchen wir nach einem Künstler, und seinen Alben mit der Liste der Namen der Tracks/Titel.
Im Gegensatz zu REST, we folgende Endpoints von der Client Seite (mehrmals) abgefragt werden müssen:
```
https://api.spotify.com/v1/search?type=artist
......@@ -43,7 +29,8 @@ https://api.spotify.com/v1/artists/{artist-id}
https://api.spotify.com/v1/artists/{artist-id}/albums
https://api.spotify.com/v1/albums/{album-id}/tracks
```
werden wir über GraphQL nur genau **eine** Abfrage für alle Infos an einen einzigen Endpunkt an den Server absetzen.
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
......@@ -56,7 +43,8 @@ queryArtist(byName:"Marilyn"){
}
}
```
Dabei werden wir genau angeben (müssen), welche Attribute geliefert werden sollen.
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:
......@@ -102,6 +90,7 @@ Wir sehen, dass die Übertragung mit GraphQL im Endeffekt weniger Zeit benötigt
later -->
## GraphQL Schema
Woher weis man aber welche Attribute zu Verfügung stehen?
> "...Man assoziiert HTTP allgemein mit REST mit "Ressourcen" als Kernkonzept.
>
......@@ -109,14 +98,18 @@ later -->
>
> (http://graphql.org/learn/serving-over-http)
Das GraphQL Schema besteht aus einer Liste von **Typ-Definitionen** der Entitäten.
GraphQL besitzt ein Schema, das aus einer Liste von **Typ-Definitionen** der Entitäten
mit ihren Feldern besteht.
Es ist mit einem Datenbankschema vergleichbar.
Somit sind gegenüber REST auch die Beziehungen zwischen den Entitäten festgelegt.
Ein minimales Schema besteht nur aus einem **Wurzelknoten** (vom Typ **Query**),
der direkt oder indirekt Zugriff auf alle anderen Knoten im Graphen ermöglicht.
der direkt oder indirekt Zugriff auf alle anderen Knoten im Graphen ermöglicht, wie im
Diagramm:
![data-topology](https://lowsky.github.io/deck-graphql-relay-talk/images/data-topology.png)
<!-- Anmerkung: hier braucht man noch ein Bild mit den Spotify-Daten ... -->
## Schema Definition - Variante 1
......
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