GraphQL ha rivoluzionato il modo in cui le app utilizzano le API. Invece di endpoint fissi, il client richiede esattamente i dati di cui ha bisogno. Questa guida presenta GraphQL, il confronto con REST e come implementarlo nelle app mobili.
Cos'è GraphQL
Definizione
Linguaggio di query per le API sviluppate da Facebook.
Concetto
Il client definisce la struttura della risposta, non il server.
Schema
Contratto tipizzato che definisce i dati disponibili.
GraphQL contro REST
Recupero eccessivo
REST restituisce dati fissi. GraphQL restituisce solo l'ordine.
Recupero insufficiente
REST potrebbe richiedere più chiamate. GraficoQL in una query.
Flessibilità
Il cliente controlla ciò che riceve.
Controllo delle versioni
GraphQL evolve lo schema senza versioni API.
Concetti fondamentali
Domanda
Recupera i dati. Operazioni di lettura.
Mutazione
Modifica dati. Scrivere operazioni.
Abbonamento
Dati in tempo reale tramite WebSocket.
Schema
Definizione di tipologie e operazioni.
Risolvi
Funzione che recupera i dati per ciascun campo.
Vantaggi per i dispositivi mobili
Economia dei dati
Meno byte trasferiti.
Meno latenza
Una chiamata contro molteplici.
Prima offline
La cache più intelligente possibile.
Digitazione
Schema come contratto. Generazione del codice.
Implementazione del back-end
Server GraphQL
Apollo Server, GraficoQL Yoga, Hasura.
Progettazione dello schema
Dominio del modello, non database.
Risolutori
Recupera dati da qualsiasi fonte.
###Caricatore dati
Batch per evitare n+1 query.
##Client mobili
###ApolloClient
iOS, Android, React Native. Ricco di funzionalità.
Relè
Facebook. Supponente, ottimizzato.
Richiesta GraphQL
Prendilo. Per casi semplici.
Generazione di codici
Tipi generati dallo schema. Digitare sicurezza.
Linguaggio di interrogazione
Campi
Specifica esattamente cosa desideri.
Argomenti
Filtra e personalizza.
Alias
Rinominare i campi nella risposta.
Frammenti
Riutilizzare le selezioni.
Variabili
Parametri dinamici.
Mutazioni
Sintassi
Simile a query, ma da modificare.
Tipi di input
Oggetti complessi come parametro.
Risposta
Restituisce i dati aggiornati.
Aggiornamento ottimista
Aggiornamenti dell'interfaccia utente prima della risposta.
Abbonamenti
Casi d'uso
Chat, notifiche, feed in tempo reale.
Trasporti
WebSocket, SSE.
Memorizzazione nella cache
Aggiorna automaticamente la cache.
Memorizzazione nella cache
Cache normalizzata
Entità archiviate per ID.
Recupera criteri
cache-first, solo rete, cache-e-rete.
Invalidazione
Aggiorna la cache dopo le mutazioni.
Persistenza
Cache persistente per offline.
##Prestazioni
Complessità delle query
Limitare la profondità e la complessità.
Impaginazione
[Basato su cursore6 per elenchi di grandi dimensioni.
Query persistenti
Hash invece della stringa completa.
###CDN
Caching edge per query pubbliche.
##Sicurezza
Autenticazione
Token nell'intestazione.
Autorizzazione
Convalidare le autorizzazioni sui risolutori.
Limitazione della velocità
Per operazione, non per endpoint.
Profondità della query
Limitare la profondità per prevenire abusi.
Gestione degli errori
Successo parziale
GraphQL potrebbe restituire dati ed errori.
Tipi di errore
Personalizza per tipo di errore.
Gestione del cliente
Gestisci gli errori con garbo.
Utensili
###GraphiQL/Parco giochi
Interfaccia per esplorare lo schema.
Generatori di codici
codegen graphql. Tipi automatici.
###Apollo Studio
Monitoraggio, registro degli schemi.
Pelucchi
eslint-plugin-graphql.
Migrazione REST
Graduale
Aggiungi GraficoQL accanto a REST.
Federazione
Servizi multipli GraphQL uniti.
Avvolgimento
GraficoQL davanti al REST esistente.
Migliori pratiche
Schema Innanzitutto
Definire lo schema prima dell'implementazione.
Denominazione
Convenzioni chiare. Tipi PascalCase, campi camelCase.
Documentazione
Descrizioni nello schema.
Deprecazione
Contrassegna i campi obsoleti.
Quando utilizzare GraphQL
Buono per
- App mobili con dati complessi
- Più clienti diversi
- Iterazione rapida del prodotto
Non ideale per
- API semplici
- Caricamento di file pesante
- In tempo reale intensivo (considerare gRPC)
Conclusione
GraphQL è potente per le app mobili che necessitano di efficienza e flessibilità. Impara i concetti, scegli lo stack appropriato e implementalo con disciplina. Il risultato sono app più veloci e uno sviluppo più produttivo.
##Domande frequenti
1) GraficoQL sostituisce REST? Non necessariamente. Ognuno ha casi d'uso. Possono coesistere.
2) GraphQL è più lento di REST? Non intrinsecamente. Dipende dall'implementazione.
3) Devo riscrivere il backend? No. GraphQL può racchiudere i servizi esistenti.
4) Specifico per dispositivi mobili o funziona per il Web? Funziona per qualsiasi cliente. Il mobile beneficia moltissimo.
5) Apollo è obbligatorio? No. È popolare ma ci sono alternative.
Leggi anche
- API GraphQL moderne: progettazione di schemi, prestazioni e modelli funzionanti
- GraphQL nelle applicazioni: costi, prezzi e una checklist prima dell'adozione
- Backend per applicazioni: architettura, tecnologie e best practice
- Microservizi nelle applicazioni: architettura distribuita per dispositivi mobili
- GraphQL per applicazioni: costi e prezzi con casi reali
- API per applicazioni
