Scroll
JSON:API vs. REST-Modul des Kerns
TL;DR
Wähle REST, wenn du nicht-entitybezogene Daten bereitstellen möchtest. In allen anderen Fällen wähle JSON:API.
Etwas differenzierter:
- Das REST-Modul im Core erlaubt alles (beliebiges Format, beliebige Logik, beliebige HTTP-Methoden) und ist extrem konfigurierbar. Mächtig, aber komplex und daher relativ fehleranfällig.
- JSON:API konzentriert sich darauf, Drupals größte Stärke (Entities/Datenmodellierung) konsistent bereitzustellen. Einfach, aber für die meisten Anwendungsfälle ausreichend leistungsfähig.
Feature-Matrix
Feature | JSON:API | REST | Bemerkung |
---|---|---|---|
Entities als Ressourcen verfügbar | ✔️ | ✔️ | REST: Muss für jeden Entitätstyp einzeln konfiguriert werden. JSON:API: Alles wird standardmäßig verfügbar gemacht. Beide respektieren Entity-Access. |
Eigene Daten als Ressourcen verfügbar machen | ✔️ | Erstelle eigene @RestResource-Plugins. JSON:API unterstützt nur Entities. | |
Abruf einzelner Ressourcen | ✔️ | ✔️ | |
Listen von Ressourcen abrufen | ✔️ | teilweise | REST: Du musst eine View konfigurieren und eine "REST-Export"-Anzeige einrichten. |
Paginierung von Ressourcenlisten | ✔️ | Zusätzliche Module wie Pager Serializer notwendig. | REST: nicht unterstützt! REST-Export-Views geben alle Ressourcen zurück. |
Filtern von Ressourcenlisten | ✔️ | teilweise | REST: nur möglich, wenn du für jedes Feld und jeden Operator einen eigenen Exposed-Filter erstellst. |
Sortierung von Ressourcen | ✔️ | ||
Includes/Embedding | ✔️ | Nur in HAL+JSON | |
Keine unnötige Verschachtelung von Feldwerten | ✔️ | HAL-Normalisierung und Default-Normalisierung (und somit alle Formate) geben exakt die in PHP genutzten Datenstrukturen aus, was für API-Verbraucher schwierig sein kann. JSON:API vereinfacht die Ausgabe für einfache Felder. | |
Felder auslassen, die der Client nicht benötigt | ✔️ | ||
Konsistente URLs | ✔️ | ||
Der Client kann verfügbare Ressourcentypen ermitteln | ✔️ | ||
Drupal-unabhängige Antwortstruktur | ✔️ | REST: HAL-Normalisierung ist theoretisch drupal-unabhängig, aber in der Praxis nicht wirklich. | |
Client-Bibliotheken | ✔️ | ||
Erweiterbare Spezifikation | In Arbeit | ||
Keine Konfiguration nötig (Zero configuration) | ✔️ | REST: Jedes @RestResource-Plugin muss erst konfiguriert werden (Formate, Authentifizierung, Methoden usw.). JSON:API: Alle Entitäten werden automatisch bereitgestellt, Zugriffsrechte werden respektiert, alle installierten Authentifizierungsmethoden sind automatisch erlaubt. |
Weitere Informationen
Siehe die Begründung für die Aufnahme von JSON:API in den Drupal Core und die Architektur-Rationale des Moduls.
Artikel aus der Drupal Dokumentation.