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.