GraphQL
API
Mobile
Backend
Frontend
Performance

GraphQL per applicazioni: Guida all'implementazione

GraphQL per applicazioni: Guida all'implementazione

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