Directus REST vs. GraphQL: Wann welche API für welche Integration?
Eine der größten Stärken von Directus besteht darin, dass für jedes Datenmodell automatisch sowohl eine REST API als auch eine GraphQL API bereitgestellt wird.
Viele Entwickler stehen deshalb früh vor der Frage: Welche API sollte ich verwenden?
Die gute Nachricht lautet: In Directus gibt es keine falsche Entscheidung. Beide APIs greifen auf dieselben Daten, dieselben Berechtigungen und dieselbe Geschäftslogik zu.
Die spannende Frage lautet vielmehr: Für welchen Anwendungsfall eignet sich welche API besser?
In diesem Beitrag vergleichen wir die Directus REST API und die Directus GraphQL API anhand konkreter Beispiele und zeigen, welche API sich für Frontends, Integrationen, Mobile Apps oder BI-Systeme besonders eignet.
Beides ist auto-generiert – was bedeutet das?
Viele Systeme behandeln REST und GraphQL als separate Implementierungen. Directus verfolgt einen anderen Ansatz.
REST und GraphQL werden automatisch aus dem Datenmodell erzeugt.
Beide APIs spiegeln das gleiche Schema
Beispiel: Collection: customers
Felder:
- id
- company
- city
Sobald diese Collection existiert, stehen automatisch zur Verfügung:
REST
/items/customers
GraphQL
customers
Es ist keine zusätzliche API-Entwicklung erforderlich.
Permissions gelten identisch
Ein wichtiger Vorteil:
Berechtigungen werden zentral verwaltet.
Egal ob:
- REST API
- GraphQL API
- Directus SDK
- Data Studio
Die gleichen Regeln greifen überall.
Beispiel:
Ein Benutzer darf nur seine eigenen Datensätze sehen.
Diese Einschränkung gilt automatisch für beide APIs.
Dadurch entstehen keine Sicherheitsunterschiede zwischen REST und GraphQL.
REST in Directus
REST eignet sich besonders für klassische Integrationen und API-Kommunikation.
Endpunkt-Struktur
Die Directus REST API folgt einer konsistenten Struktur.
Beispiele:
GET /items/customers GET /items/customers/123 POST /items/customers PATCH /items/customers/123 DELETE /items/customers/123
Die Struktur ist leicht verständlich und mit nahezu jedem Tool kompatibel.
Filter-Syntax
Eine Besonderheit von Directus ist die leistungsfähige Filtersprache.
Beispiel: GET /items/customers?filter[city][_eq]=Berlin
Unterstützte Operatoren:
|
Operator |
Bedeutung |
|---|---|
|
_eq |
Gleich |
|
_neq |
Ungleich |
|
_in |
In Liste |
|
_nin |
Nicht in Liste |
|
_between |
Zwischen zwei Werten |
|
_contains |
Enthält |
|
_starts_with |
Beginnt mit |
Beispiel: GET /items/orders?filter[total][_between]=100,500
Dadurch lassen sich viele Anforderungen direkt über die API lösen.
Pagination, Sorting und Fields
REST unterstützt zusätzliche Parameter.
Pagination
?limit=20&offset=40
Sortierung
?sort=-created_at
Feldauswahl
?fields=id,company,email
Diese Optionen reduzieren die übertragene Datenmenge erheblich.
Bulk-Operations
Ein Vorteil der Directus REST API sind Bulk-Operationen.
Beispiele:
- Mehrere Datensätze erstellen
- Mehrere Datensätze aktualisieren
- Mehrere Datensätze löschen
Dies vereinfacht Integrationen erheblich.
GraphQL in Directus
GraphQL verfolgt einen anderen Ansatz.
Statt Endpunkte zu konsumieren, formuliert der Client exakt die gewünschten Daten.
Auto-generiertes GraphQL-Schema
Directus erstellt das komplette GraphQL-Schema automatisch.
Beispiel:
query {
customers {
id
company
email
}
}
Änderungen am Datenmodell erscheinen unmittelbar im Schema.
System- und Items-Schema
Directus unterscheidet:
Items Schema
Geschäftsdaten:
customers
orders
products
Systeminformationen
users
roles
permissions
Dadurch bleibt die API sauber strukturiert.
Mutations
GraphQL unterstützt nicht nur Lesen, sondern auch Schreiben.
Beispiel:
mutation {
create_customers_item(
data: {
company: "Unit M"
city: "Mülheim"
}
) {
id
}
}
Dadurch lassen sich vollständige Anwendungen auf Basis von GraphQL erstellen.
Subscriptions über WebSockets
Ein wichtiger Vorteil der Directus GraphQL API:
Realtime-Unterstützung.
Beispiel:
subscription {
customers_mutated {
key
}
}
Dadurch können Anwendungen auf Änderungen sofort reagieren.
Typische Anwendungsfälle:
- Kundenportale
- Support-Systeme
- Dashboards
- Mobile Apps
REST und GraphQL im direkten Vergleich
Die Diskussion REST versus GraphQL wird oft ideologisch geführt.
In der Praxis haben beide Ansätze ihre Stärken.
Bandbreite und Datenmenge
REST kann zu Over-Fetching führen.
Beispiel:
Ein Endpunkt liefert 30 Felder.
Benötigt werden jedoch nur 3.
GraphQL erlaubt die exakte Auswahl.
Beispiel:
query {
customers {
company
email
}
}
Dadurch sinkt die Datenmenge.
Caching
Hier besitzt REST häufig Vorteile.
REST nutzt: GET
Anfragen können dadurch einfach über:
- CDN
- Reverse Proxy
- Varnish
- Cloudflare
gecached werden.
GraphQL verwendet häufig: POST
Dadurch wird klassisches HTTP-Caching schwieriger.
Praktische Konsequenz
Für stark frequentierte APIs kann REST effizienter sein.
Tooling
REST:
- Postman
- Insomnia
- Curl
GraphQL:
- GraphQL Playground
- Apollo Studio
- Relay DevTools
Beide Welten verfügen über ausgereifte Werkzeuge.
Lernkurve
REST ist für viele Teams leichter zugänglich.
GraphQL erfordert zusätzliche Konzepte:
- Queries
- Mutations
- Subscriptions
- Schema Design
Für erfahrene Frontend-Teams kann GraphQL langfristig produktiver sein.
Empfehlungs-Matrix
Die wichtigste Frage lautet: Wann sollte welche API verwendet werden?
Mobile Apps
Empfehlung: Eher GraphQL
Vorteile:
- Weniger Datenübertragung
- Flexible Abfragen
- Gute Offline-Synchronisation
Webhooks und Integrationen
Empfehlung: Eher REST
Vorteile:
- Einfacher
- Universell unterstützt
- Gute Tool-Kompatibilität
Typische Beispiele:
- Zapier
- n8n
- ERP-Systeme
BI-Tools
Empfehlung: Meist REST
Viele Analysewerkzeuge arbeiten besser mit REST-Endpunkten.
Apollo und Relay Frontends
Empfehlung:
GraphQL
Wer bereits Apollo oder Relay nutzt, profitiert direkt vom automatisch generierten GraphQL-Schema.
Mit dem Directus SDK
In vielen Projekten wird die API nicht direkt verwendet.
Stattdessen kommt das Directus SDK zum Einsatz.
SDK-Methoden im Überblick
Das SDK unterstützt:
- REST
- GraphQL
- Realtime
- Authentifizierung
Dadurch kann später problemlos gewechselt werden.
Side-by-Side: REST vs. GraphQL
Beispiel: Wir möchten Kunden abrufen.
REST
import { createDirectus, rest, readItems } from "@directus/sdk";
const directus = createDirectus(url).with(rest());
const customers = await directus.request(
readItems("customers")
);
GraphQL
import { createDirectus, graphql } from "@directus/sdk";
const directus = createDirectus(url).with(graphql());
const customers = await directus.query(`
query {
customers {
id
company
email
}
}
`);
Beide Varianten liefern dieselben Daten.
Der Unterschied liegt vor allem in der Art der Abfrage.
Typische Architekturentscheidungen
Aus der Praxis haben sich folgende Muster etabliert:
Kundenportal
GraphQL
Mobile App
GraphQL
ERP-Integration
REST
CRM-Synchronisation
REST
BI-Reporting
REST
Echtzeit-Dashboard
GraphQL mit Subscriptions
Diese Kombinationen haben sich in vielen Projekten bewährt.
Fazit
Directus bietet den seltenen Vorteil, dass REST und GraphQL parallel verfügbar sind. Beide APIs basieren auf demselben Datenmodell und denselben Berechtigungen.
Die Entscheidung hängt daher vor allem vom Anwendungsfall ab.
REST eignet sich besonders für
- Integrationen
- Webhooks
- ERP-Systeme
- BI-Tools
- Caching
GraphQL eignet sich besonders für
- Frontends
- Mobile Apps
- Echtzeitanwendungen
- Apollo- oder Relay-Architekturen
Für viele Unternehmen ergibt sich daraus eine hybride Architektur:
REST für Integrationen. GraphQL für Benutzeroberflächen.
FAQ
Unterstützt Directus REST und GraphQL gleichzeitig?
Ja. Beide APIs werden automatisch aus dem Datenmodell erzeugt und können parallel verwendet werden.
Welche API ist schneller?
Das hängt vom Anwendungsfall ab. GraphQL reduziert häufig die Datenmenge, während REST einfacher zu cachen ist.
Kann ich die GraphQL API anpassen?
Das Schema wird automatisch aus dem Directus Datenmodell erzeugt. Individuelle Erweiterungen können über Extensions und Custom Endpoints ergänzt werden.
Wie cache ich API-Anfragen?
REST-Anfragen lassen sich einfach über CDN oder Reverse Proxy cachen. Bei GraphQL sind zusätzliche Strategien erforderlich.
Welche API sollte ich für n8n oder Zapier verwenden?
Für die meisten Integrationen empfiehlt sich REST, da diese Werkzeuge REST-Endpunkte direkt unterstützen.
Unterstützt GraphQL Realtime-Funktionen?
Ja. Directus unterstützt GraphQL Subscriptions über WebSockets für Echtzeit-Anwendungen.