window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = finestra if (w.LeadBooster) { console.warn('LeadBooster esiste già') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() GraphQL: lezioni apprese in produzione - The Codest
The Codest
  • Chi siamo
  • Servizi
    • Sviluppo di software
      • Sviluppo Frontend
      • Sviluppo backend
    • Staff Augmentation
      • Sviluppatori Frontend
      • Sviluppatori backend
      • Ingegneri dei dati
      • Ingegneri del cloud
      • Ingegneri QA
      • Altro
    • Consulenza
      • Audit e consulenza
  • Industrie
    • Fintech e banche
    • E-commerce
    • Adtech
    • Tecnologia della salute
    • Produzione
    • Logistica
    • Automotive
    • IOT
  • Valore per
    • CEO
    • CTO
    • Responsabile della consegna
  • Il nostro team
  • Case Studies
  • Sapere come
    • Blog
    • Incontri
    • Webinar
    • Risorse
Carriera Contattate
  • Chi siamo
  • Servizi
    • Sviluppo di software
      • Sviluppo Frontend
      • Sviluppo backend
    • Staff Augmentation
      • Sviluppatori Frontend
      • Sviluppatori backend
      • Ingegneri dei dati
      • Ingegneri del cloud
      • Ingegneri QA
      • Altro
    • Consulenza
      • Audit e consulenza
  • Valore per
    • CEO
    • CTO
    • Responsabile della consegna
  • Il nostro team
  • Case Studies
  • Sapere come
    • Blog
    • Incontri
    • Webinar
    • Risorse
Carriera Contattate
Freccia indietro TORNA INDIETRO
2020-03-26
Sviluppo di software

GraphQL: lezioni apprese in produzione

Pawel Wal

È il 2020. Il vostro team si orienta sempre più verso la costruzione di applicazioni a pagina singola, o almeno verso l'inclusione di componenti ricchi all'interno di normali applicazioni a più pagine. Il [GraphQL](https://graphql.org/) ha ormai [più di due anni](https://en.wikipedia.org/wiki/GraphQL), e per gli standard dell'ecosistema JavaScript potrebbe essere considerato maturo. Ci sentivamo un po' avventurosi, quindi abbiamo rinunciato alle solite API JSON e ci siamo buttati a capofitto: ecco cosa abbiamo imparato.

È il 2020. Il vostro squadra si orienta sempre più verso la costruzione di applicazioni a pagina singola, o almeno verso l'inclusione di componenti ricchi all'interno di normali applicazioni a più pagine. [GraphQL](https://graphql.org/) ha ormai [più di due anni](https://en.wikipedia.org/wiki/GraphQL), il che per JavaScript Gli standard dell'ecosistema possono essere considerati maturi. Ci sentivamo un po' avventurosi, quindi abbiamo rinunciato alle solite API JSON e ci siamo tuffati a capofitto: ecco cosa abbiamo imparato.

È necessario un server GraphQL

Nella maggior parte dei framework utilizzati per sviluppo webGli strumenti per costruire un'API JSON ci sono già. È possibile costruire una struttura di rotte e accettare facilmente alcuni GET e POST, quindi produrre una risposta JSON. Ruby on Rails ha persino uno speciale progetto che fa a meno delle solite chicche di rendering HTML e mette al suo posto una solida base per le API. Ne consegue che uno sviluppatore esperto che utilizza strumenti moderni può creare un backend in pochi minuti.

Non è così con GraphQL. Mentre esistono librerie server per molte lingueMa si incorre comunque in una penalizzazione in termini di velocità fin dall'inizio, semplicemente dovendo capire cosa è giusto per il proprio ecosistema. A titolo personale, non mi piace che il termine "server" venga usato per descrivere una libreria che può essere introdotta in un progetto.

C'è solo un punto finale

Nel corso degli anni ci siamo abituati a un modo particolare di pensare alla struttura delle API. Al livello più elementare, abbiamo semplicemente seguito le pratiche REST. Ciò significava creare diversi endpoint per ogni modello logico della nostra applicazione. È una struttura facile da comprendere sia per gli autori che per i consumatori delle API. Inoltre, produce metodi ben distribuiti nel backend, rendendo più semplice il ragionamento sulle API. codice come semplice come l'API stessa. Questa struttura è anche facile da spazializzare, ad esempio per gli scopi di Versione dell'API.

GraphQL impiega solo un singolo endpoint, comunemente /graphql. Ogni richiesta all'API arriverà come richiesta POST a quell'endpoint e da lì sarà responsabilità del server GraphQL capire cosa vuole il cliente e rispondere in modo appropriato.

A prima vista sembra ingombrante: immaginate di provare a fare tutto quello che c'è in un'API JSON con un singolo endpoint! Tuttavia, la deprecazione inizia presto ad avere senso quando l'API matura e alcune cose vengono sostituite da altre. La deprecazione nelle API classiche viene solitamente effettuata a livello di spazio dei nomi, passando da v1 a v2. GraphQL consente un controllo molto maggiore, fino alla deprecazione di un singolo campo. Immaginate di poter dire a un utente di API REST che non volete che usi il campo nome e di utilizzare il campo nome_di_fantasia invece! È emerso che ciò che all'inizio sembrava ingombrante è in realtà una delle caratteristiche migliori.

Tutto è digitato

JSON non ha molto in termini di tipizzazione. Ci sono stringhe, numeri, array e oggetti. Al di là di questo, si è sfortunati. Al contrario, in GraphQL, tutto inizia e finisce con i tipi, poiché anche le query e le mutazioni sono solo questo: tipi. Il DSL GraphQL impone il controllo dei tipi sia sul server che sul client, evitando ogni sorta di spiacevole sorpresa.

Si tratta di un aspetto molto importante, soprattutto perché le SPA vengono sempre più spesso sottoposte a controlli di tipo, sia con l'uso di TypeScript che di alternative come Flow. GraphQL facilita l'introduzione di tipi complessi e composti in aggiunta ai valori predefiniti e diventa rapidamente una seconda natura per gli sviluppatori sia del backend che del frontend.

Per saperne di più: Prova dell'JavaScript... con Ruby?!

I documenti sono integrati

In una classica API JSON, la documentazione può essere un ripensamento. E anche se non lo è, ci sono molti metodi tra cui scegliere. Usiamo uno schema come OpenAPI? Dobbiamo poi convertirlo in forma leggibile dall'uomo con strumenti come Swagger? O semplicemente scarichiamo un mucchio di file Markdown da qualche parte? Anche se questo problema è stato risolto più volte, richiede ancora una riflessione e uno sforzo consapevole da parte del team: prima per costruire i documenti, poi per mantenerli aggiornati e diffonderli. È un problema ancora più complesso quando l'API ha diverse sezioni che sono accessibili solo, ad esempio, da determinati ruoli utente.

In GraphQL la documentazione è un cittadino di prima classe, poiché la maggior parte dei server consente di documentare i tipi e le richieste in loco. Dall'inizio del 2018 il GraphQL Schema Definition Language è stato reso parte delle specifiche ufficiali, quindi c'è esattamente un modo per documentare un'API GraphQL. Inoltre, dal momento che GraphQL consente di definire la visibilità di alcune parti del grafico, gli utenti che non dovrebbero vederla sono automaticamente impossibilitati a vedere i documenti relativi a ciò a cui non possono accedere. Avere la decisione presa e linee guida chiare è stato un grande vantaggio per il team.

Esistono solo due tipi di azione

A differenza di GET, POST, PUT, PATCH e DELETE di HTTP, in GraphQL esistono solo due tipi di azione: Query e Mutazioni. La differenza principale è che le Mutazioni possono modificare lo stato del sistema, mentre le Query si limitano a leggere passivamente i dati.

Ammetto di essere ancora indeciso su questo punto. Mi piace la pletora di verbi HTTP per interagire con le risorse e poter usare lo strumento giusto per il lavoro. GraphQL rende più facile occuparsi di quei casi difficili in cui uno qualsiasi dei verbi HTTP non si adatta esattamente, ma comporta la penalizzazione di dover pensare a cosa influirà effettivamente una particolare mutazione. Si può anche affermare che, non essendoci una convenzione di denominazione standard incorporata, si dovranno redigere guide di stile interne o si rischierà di creare un pasticcio incoerente.

Avete praticamente bisogno di un cliente

Interagire con le API REST su HTTP è facilissimo con la versione vanilla dell'JavaScript, ma lo è ancora di più utilizzando la moderna interfaccia recuperare API. Al contrario, per GraphQL è necessario utilizzare una libreria client se si vogliono prestazioni davvero decenti. Non è impossibile interagire con un'API GraphQL usando solo JavaScript vanilla: dopo tutto si tratta solo di richieste POST. Tuttavia, l'uso di tecnologie Web di vecchia data, come la cache delle richieste per le chiamate API comuni, non funzionerà, poiché le richieste POST non sono generalmente memorizzate nella cache.

Ogni client GraphQL ragionevole implementa un meccanismo di caching dei risultati lato client e molte altre caratteristiche. Grazie a tutte queste scelte, creare a mano una configurazione per un client GraphQL di livello base è un compito del tutto stupefacente. Quando si inizia a lavorare con GraphQL, consiglio in particolare di dare un'occhiata a Apollo-Boost poiché viene fornito con valori predefiniti molto ragionevoli.

Il cliente sceglie i dati

Ci siamo passati tutti: abbiamo estratto un elenco di dati dall'API e manca un campo cruciale su un modello correlato. Allora implementiamo un hack che comporta N+1 richieste e brontoliamo con gli sviluppatori del backend che si affrettano ad aggiungerlo. Questo di solito non accade con un'API GraphQL ben implementata, perché possiamo scavare nei dati a piacimento. Avete bisogno di vedere l'indirizzo di un cliente in un ordine di questo lotto? Non è un problema, almeno in teoria, e questo ci porta a...

La complessità è più difficile da prevedere

Quando si progetta GraphQL dal lato back-end, può essere difficile pensare a tutte le profondità che un cliente può scavare nel grafo. Ci sono molti modi per strumentare e osservare l'uso del grafico e, dopo aver lasciato che i colleghi del front-end ci giochino per un po', si possono iniziare a vedere alcune lunghe query che eseguono letture piuttosto fantasiose sul vostro archivio dati. In un'API REST questo è più facile da controllare, poiché si può facilmente definire l'ambito dei dati a cui si accede in una singola richiesta. Spesso questa complessità mancante può essere un duro colpo quando si passa alla produzione. Molte volte non è nemmeno ovvio come uscire dalla buca che vi siete scavati.

Le pagine numerate sono davvero difficili

Si tratta di una lamentela che non ha peli sulla lingua. Il fatto che GraphQL sia stato progettato da e per Facebook si può percepire chiaramente osservando il modo in cui funziona il meccanismo di paginazione previsto. Le cosiddette Connessioni sono fondamentalmente flussi infiniti di bordi del grafo, la cui navigazione avviene tramite cursori invece che con le più classiche pagine. Sebbene sia facile capire come ciò si adatti a un feed infinito di post in stile Facebook, se si desidera un elenco ordinato di pagine con la possibilità di andare, ad esempio, a pagina 42, sarà molto più difficile. Naturalmente ci sono modi per aggirare il problema, ma è proprio questo che sono: aggiustamenti.

Lo rifaremmo?

Con tutte le lamentele e le differenze elencate sopra, probabilmente penserete che stiamo trattando GraphQL come un esperimento finito male e che siamo tornati direttamente alle API REST. Non è così. Semmai, stiamo lavorando per utilizzare GraphQL in modo più diffuso nei progetti di tutta l'organizzazione. È un'ottima tecnologia che ha reso il nostro lavoro più semplice e migliore. Tuttavia, inizialmente abbiamo investito in GraphQL senza renderci conto del tipo di difficoltà di crescita che avremmo dovuto affrontare.

Se pensate che GraphQL possa fare al caso vostro, vi incoraggio a fare il grande passo. Datevi tutto il tempo e lo spazio per fallire in sicurezza, e ne raccoglierete i frutti in breve tempo!

Leggi anche:

– Come gestire efficacemente gli sviluppatori remoti? La guida per gli CTO

– Python vs. Ruby? Quale tecnologia utilizzare per lo sviluppo dei prodotti?

– Una guida rapida alla costruzione e allo sviluppo del proprio mercato. Cosa vale la pena di sapere?

Articoli correlati

Sviluppo di software

Costruire applicazioni web a prova di futuro: le intuizioni del team di esperti di The Codest

Scoprite come The Codest eccelle nella creazione di applicazioni web scalabili e interattive con tecnologie all'avanguardia, offrendo esperienze utente senza soluzione di continuità su tutte le piattaforme. Scoprite come la nostra esperienza favorisce la trasformazione digitale e il business...

IL CANCRO
Sviluppo di software

Le 10 principali aziende di sviluppo software con sede in Lettonia

Scoprite le migliori aziende di sviluppo software della Lettonia e le loro soluzioni innovative nel nostro ultimo articolo. Scoprite come questi leader tecnologici possono aiutarvi a migliorare la vostra attività.

thecodest
Soluzioni per aziende e scaleup

Essenziali di sviluppo software Java: Guida all'outsourcing di successo

Esplorate questa guida essenziale sullo sviluppo di software Java con successo outsourcing per migliorare l'efficienza, accedere alle competenze e guidare il successo del progetto con The Codest.

thecodest
Sviluppo di software

La guida definitiva all'outsourcing in Polonia

L'aumento di outsourcing in Polonia è guidato dai progressi economici, educativi e tecnologici, che favoriscono la crescita dell'IT e un clima favorevole alle imprese.

IlCodesto
Soluzioni per aziende e scaleup

Guida completa agli strumenti e alle tecniche di audit IT

Gli audit IT garantiscono sistemi sicuri, efficienti e conformi. Per saperne di più sulla loro importanza, leggete l'articolo completo.

The Codest
Jakub Jakubowicz CTO e cofondatore

Iscrivetevi alla nostra knowledge base e rimanete aggiornati sulle competenze del settore IT.

    Chi siamo

    The Codest - Società internazionale di sviluppo software con centri tecnologici in Polonia.

    Regno Unito - Sede centrale

    • Ufficio 303B, 182-184 High Street North E6 2JA
      Londra, Inghilterra

    Polonia - Poli tecnologici locali

    • Parco uffici Fabryczna, Aleja
      Pokoju 18, 31-564 Cracovia
    • Ambasciata del cervello, Konstruktorska
      11, 02-673 Varsavia, Polonia

      The Codest

    • Casa
    • Chi siamo
    • Servizi
    • Case Studies
    • Sapere come
    • Carriera
    • Dizionario

      Servizi

    • Consulenza
    • Sviluppo di software
    • Sviluppo backend
    • Sviluppo Frontend
    • Staff Augmentation
    • Sviluppatori backend
    • Ingegneri del cloud
    • Ingegneri dei dati
    • Altro
    • Ingegneri QA

      Risorse

    • Fatti e miti sulla collaborazione con un partner esterno per lo sviluppo di software
    • Dagli Stati Uniti all'Europa: Perché le startup americane decidono di trasferirsi in Europa
    • Confronto tra gli hub di sviluppo Tech Offshore: Tech Offshore Europa (Polonia), ASEAN (Filippine), Eurasia (Turchia)
    • Quali sono le principali sfide di CTO e CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Condizioni di utilizzo del sito web

    Copyright © 2025 di The Codest. Tutti i diritti riservati.

    it_ITItalian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek it_ITItalian