Scroll
JSON:API vs. modulo REST del core
TL;DR
Scegli REST se devi esporre dati che non sono entità. In tutti gli altri casi, scegli JSON:API.
In modo leggermente più sfumato:
- Il modulo REST del core consente qualsiasi cosa (qualsiasi formato, qualsiasi logica, qualsiasi metodo HTTP) ed è estremamente configurabile. Potente ma complesso e quindi relativamente fragile.
- JSON:API si concentra sull’esporre il punto di forza maggiore di Drupal (entità/modellazione dei dati) in modo coerente. Semplice ma sufficientemente potente per la maggior parte dei casi d’uso.
Matrice delle funzionalità
Funzionalità | JSON:API | REST | Osservazioni |
---|---|---|---|
Entità esposte come risorse | ✔️ | ✔️ | REST: va configurato per ogni entity type. JSON:API: tutto è esposto per impostazione predefinita. Entrambi: rispettano l’entity access. |
Dati personalizzati esposti come risorse | ✔️ | Scrivi plugin @RestResource personalizzati. JSON:API supporta solo le entità. | |
Recupero di singole risorse | ✔️ | ✔️ | |
Recupero di liste di risorse | ✔️ | più o meno |
REST: devi configurare una View e impostare una modalità “REST export”. |
Paginazione delle liste di risorse | ✔️ | Sono necessari moduli aggiuntivi come Pager Serializer. | REST: non supportato! Le viste REST export restituiscono tutte le risorse. |
Filtraggio delle liste di risorse | ✔️ | più o meno |
REST: solo se crei un filtro esposto per ogni campo e per ogni possibile operatore |
Ordinamento delle risorse | ✔️ | ||
Include/embedding | ✔️ | Solo in HAL+JSON | |
Nessun incapsulamento inutile dei valori dei campi | ✔️ | Sia la normalizzazione HAL sia la normalizzazione predefinita (e quindi tutti i formati) soffrono dell’esporre esattamente le strutture dati PHP in memoria usate da Drupal, causando una DX dolorosa per i consumer. JSON:API semplifica la normalizzazione dei campi a cardinalità singola e a singola proprietà. | |
Possibilità di omettere i campi non necessari al consumer | ✔️ | ||
URL coerenti | ✔️ | ||
Il consumer può scoprire i tipi di risorsa disponibili | ✔️ | ||
Struttura di risposta indipendente da Drupal | ✔️ | REST: in teoria la normalizzazione HAL è priva di “Drupalisms”, ma in pratica non è così. | |
Librerie client | ✔️ | ||
Spec estensibile | WIP | ||
Zero configurazione | ✔️ | REST: ogni definizione di plugin @RestResource è disponibile per essere esposta, ma deve essere configurata per esserlo. Per ciascuna, devi selezionare i formati consentiti, i provider di autenticazione consentiti e facoltativamente anche i metodi HTTP consentiti. JSON:API: tutte le entità sono esposte automaticamente, l’accesso a entità/campi è rispettato, tutti i provider di autenticazione installati sono consentiti automaticamente. |
Ulteriori informazioni
Vedi le motivazioni per l’aggiunta del modulo JSON:API nel core di Drupal e le motivazioni architetturali del modulo.
Articolo tratto dalla Documentazione di Drupal.