Tutti gli articoli su GraphQL ti diranno quanto è meraviglioso, ma ci sono degli svantaggi o dei difetti? Grazie.
Tutti gli articoli su GraphQL ti diranno quanto è meraviglioso, ma ci sono degli svantaggi o dei difetti? Grazie.
Risposte:
Svantaggi:
Ma quelli sono più che contrastati da questi:
graphql-spring-boot-starter
e graphql-java-tools
iniziare. Crea il tuo schema nella risorsa .graphqls e crea classi Resolver e il gioco è fatto. Per ottenere un esempio di test funzionante, sono stati necessari circa 10 minuti.
Ho riscontrato alcune preoccupazioni importanti per chiunque stia pensando di utilizzare GraphQL e fino ad ora i punti principali sono:
Query in profondità indefinita : GraphQL non può eseguire query in profondità indefinita, quindi se hai un albero e vuoi restituire un ramo senza conoscere la profondità, dovrai fare un po 'di impaginazione.
Struttura di risposta specifica : in GraphQL la risposta corrisponde alla forma della query, quindi se devi rispondere in una struttura molto specifica, dovrai aggiungere un livello di trasformazione per rimodellare la risposta.
Cache a livello di rete : a causa del modo in cui GraphQL viene comunemente utilizzato su HTTP (un POST in un singolo endpoint), la cache a livello di rete diventa difficile. Un modo per risolverlo è utilizzare Persisted Queries.
Gestione del caricamento dei file : non c'è nulla sul caricamento dei file nella specifica GraphQL e le mutazioni non accettano i file negli argomenti. Per risolverlo puoi caricare file utilizzando altri tipi di API (come REST) e passare l'URL del file caricato alla mutazione GraphQL, oppure iniettare il file nel contesto di esecuzione, così avrai il file all'interno delle funzioni del resolver.
Esecuzione imprevedibile : la natura di GraphQL è che è possibile eseguire query combinando qualsiasi campo si desideri, ma questa flessibilità non è gratuita. Ci sono alcune preoccupazioni che è bene sapere come Prestazioni e N + 1 Query.
API super semplici : nel caso in cui tu abbia un servizio che espone un'API molto semplice, GraphQL aggiungerà solo una complessità extra, quindi una semplice API REST può essere migliore.
Questo problema più grande che vedo con graphQL, cioè se stai usando con database relazionali, è con i join .
Il fatto che tu possa consentire / non consentire alcuni campi rende i join non banali (non semplici). Il che porta a domande extra.
Anche le query annidate in graphql portano a query circolari e possono mandare in crash il server . È necessario prestare particolare attenzione.
La limitazione della velocità delle chiamate diventa difficile perché ora l'utente può inviare più query in una chiamata.
SUGGERIMENTO : usa il dataloader di Facebook per ridurre il numero di query in caso di javascript / node
cost
alla richiesta. Anche questo non è un problema se stai usando query predefinite, dove il client invia solo l'ID.
Sta migliorando ogni anno e, per ora, la comunità di GraphQL sta crescendo e, di conseguenza, ci sono molte più soluzioni a molti problemi che sono stati evidenziati in altre risposte prima. Ma per ammettere ciò che ancora impedisce alle aziende di gettare tutte le risorse su GraphQL, vorrei elencare alcuni problemi e soluzioni seguiti da quelli irrisolti.
Ma ci sono un paio di altri casi che possono essere considerati svantaggi:
Per riassumere, GraphQL è solo uno strumento per obiettivi specifici e di sicuro non è un proiettile d'argento a tutti i problemi e ovviamente non è un sostituto per REST.
È davvero fantastico avere un unico endpoint ed esporre tutti i dati. Trovo di seguito i punti da considerare per GraphQL:
Inoltre, si dovrebbero considerare i pro dopo la sua implementazione:
Facile da aggiungere condizioni utilizzando argomenti e ordinamento personalizzato una volta implementato
Usa molti filtri personalizzati e sbarazzati di tutte le azioni che devono essere create, ad esempio un utente può avere ID, nome, ecc. Come argomenti ed eseguire il filtro. Inoltre, i filtri possono essere applicati anche ai gruppi negli utenti.
Penso che graphql per il momento debba far parte dell'architettura backend, per il caricamento dei file si continua a colpire un'API normale