GraphQL
Stop wRESTling with your API. Use GraphQL
Gliederung
GraphQL
Motivation
Praxis
Theorie
Ausblick
Einfache Todo Application
-
Aufgabe (Task)
-
Notizen
-
Deadline
-
-
Kategorie (Category)
Title | Category | Place | Date | State |
---|---|---|---|---|
Buying apples | shopping | Walmart | 2018-03-10 | Done |
Buying tv | shopping | Pending | ||
Program graphql | university | 2018-03-08 | Done |
Frontend
Backend
?
GET myapi.com/v1/todo/1
{
"title": "Buying apples",
"note": "Buying apples at Walmart",
"category": "shopping",
"date": 1524123265,
"place": "Walmart",
"sameCategory": [
2
],
"sameDate": [
3
]
}
GET myapi.com/task_with_images/2
GET myapi.com/task_with_images_and_date/2
GET myapi.com/task_with_images_and_date_and_description/2
GET myapi.com/task_with_images_and_description_and_date_and_owner/2
GET myapi.com/task?include=image,description,date,owner,created_at
Dokumentation
Probleme bei REST
- Custom Endpoints vs. Over-Fetching
- Dokumentation
- Versionierung
- Backend-Driven-Development
Was ist GraphQL?
- Abfragesprache für API
- 2015 von Facebook veröffentlicht
- "SQL für API's"
- es gibt nur einen Endpoint
- basiert auf einem Graphen
gleiche
Kategorie
gleiche
Kategorie
gleiches
Datum
gleiches
Datum
hat
hat
hat
hat
Kategorie
Kategorie
Aufgabe
Aufgabe
Aufgabe
Aufgabe
Aufgabe
Alternative zu einer
Wie funktioniert GraphQL?
Abfrage
Query vs Mutation
Vergleichbar mit den HTTP-Methods von REST
Type System
- Vergleichbar mit Objekten
- primitive Datentypen
- Listen
- komplexe (selbst entwickelte Datentypen)
Type System
- jede Ressource muss in einem Type definiert werden
type Query {
category (title: String): [task]
tasks (state: Boolean): [task]
task (id: ID): task
date (from: Date, to: Date): [task]
}
type Task {
_id: ID!
title: String
state: Boolean
notes: String
date: Date
place: String
category: String
notes: String
sameDate: [Task]
samePlace: [Task]
sameCategory: [Task]
}
Text
Versionierung
Vorteile von GraphQL
- einfache Auswahl der gewünschten Daten
- Kein Overfetching
- Objektorientierung
- GraphQL Schema als Beschreibungsdatei der API
- Dokumentation wird automatisch generiert
Nachteile von GraphQL
- Aufwandskalkulation schwierig (Keine Requests/day)
- Dateiverwaltung (Upload und Download)
- Caching ist schwierig (viele unterschiedliche Queries)
- Fehlende Standards für z.B. Paging
Dinge die nicht besprochen wurden
- Input Fields
- Authentication über JWT's
- MIME Types (Bilder, Audio, etc.)
- Fragmente
- Exceptions
- Security
- Caching
- Subscription
Ausblick
- erste Unternehmen verwenden auf GraphQL
Ausblick
- hohes Potenzial in vielen Bereichen REST abzulösen
- hoher Nutzen in
- Web-Apps
- Mobile Anwendungen
- Open API
Praxis
DevCamp GraphQL
By finally
DevCamp GraphQL
- 883