Esistono molti standard architetturali open source per la creazione e la distribuzione di applicazioni. Le API REST (Representational State Transfer), SOAP (Simple Object Access Protocol), RPC (Remote Procedural Call) e GraphQL sono le più popolari.
Le API RESTful sono lo standard architetturale API più utilizzato. Se hai scritto API RESTful complesse con molti endpoint, probabilmente ti sei reso conto di quanto possano essere complicate. Ciò è particolarmente vero se ci sono solo lievi differenze tra gli endpoint.
Potresti anche riscontrare problemi con il recupero dei dati poiché le API RESTful non sono sufficientemente flessibili per selezionare dati specifici. GraphQL risolve questi problemi delle API RESTful.
Cos'è GraphQL?
GraphQL (Graph Query Language) è un linguaggio di query e runtime per la creazione di API. A differenza delle API REST con molti endpoint per l'utilizzo dei dati, le API GraphQL hanno un punto di ingresso. Puoi recuperare dati specifici descrivendoli nelle query.
IL
Specifica GraphQL definisce il linguaggio di query e il funzionamento dei server GraphQL. Puoi creare e utilizzare API GraphQL in linguaggi lato server da Python a JavaScripte qualsiasi lingua che supporti HTTP.Meta ha creato GraphQL nel 2012 come alternativa a REST per costruire su HTTP. Hanno rilasciato GraphQL come standard open source nel 2015. Oggi, la fondazione GraphQL sovrintende allo sviluppo della specifica GraphQL.
GraphQL è abbastanza nuovo, con scarsa adozione e ci sono costi nascosti per utilizzarlo. La creazione di API GraphQL può essere inutilmente complessa, soprattutto per piccoli progetti con pochi endpoint.
Inoltre, tutte le richieste GraphQL alla fine restituiscono un codice di stato 200 indipendentemente dallo stato della richiesta.
Come funziona GraphQL?
A differenza di REST, che è orientato alle risorse, GraphQL richiede di pensare ai dati come a un grafico per interagire con i dati. È possibile specificare la struttura dei dati e la specifica fornisce un'interfaccia di query affidabile per l'interazione con l'API tramite HTTP. Sarai in grado di utilizzare varie funzionalità a seconda del Pacchetto o libreria GraphQL scegli di usare.
Gli schemi GraphQL includono tipi di oggetto che definiscono l'oggetto richiedebile e i suoi campi disponibili. Nelle query API e nelle mutazioni, il pacchetto GraphQL convalida le query ed esegue le query in base alle funzioni del gestore specificate (resolver).
Perché dovresti usare GraphQL?
REST è uno standard di facile utilizzo e la maggior parte dei linguaggi di programmazione dispone di strumenti per la creazione rapida di API RESTful. Tuttavia, ci sono molti problemi con la creazione e l'utilizzo di API RESTful.
Ecco alcuni dei problemi con REST che fanno preferire agli sviluppatori GraphQL per alcuni casi d'uso.
Recupero dati inefficiente
Le API RESTful inoltrano i dati in base alle specifiche dell'endpoint. Non sono sufficientemente flessibili per recuperare i dati al di là di ciò che è hardcoded nella funzione di gestione dell'endpoint.
Si supponga che un endpoint restituisca un elenco di dati su chiamata e che sia necessario specificare valori o criteri per i campi. In tal caso, lo sviluppatore deve creare un endpoint e definire la logica di business per restituire i dati. Puoi analizzare manualmente la preziosa risorsa, che alla fine richiede più tempo.
GraphQL risolve il problema del recupero inefficiente dei dati poiché puoi eseguire query sulle API per restituire dati in base a criteri e specifiche in modo flessibile.
Le API GraphQL sono interattive; puoi specificare i dati che devi recuperare in una sintassi facile e leggibile.
{
utente (dove: {età: {_eq: "89"}}) {
nome
scuola(Dove: {vivo: {_eq: vero}}) {
bio
nazionalità
}
}
}
La query GraphQL sopra interroga a utente schema per le voci in cui il età campo è 89. La query ha una query incorporata per le voci in cui il file vivo valuta il campo VERO. Restituisce i campi nome, biografia e nazionalità dallo schema.
Sviluppo veloce
La creazione e l'utilizzo delle API GraphQL è più semplice rispetto all'utilizzo di REST, soprattutto con l'aumento delle dimensioni del progetto. Durante la fase di sviluppo, non è necessario sviluppare tutte le rotte e le funzioni del gestore come si farebbe durante lo sviluppo di API RESTful. Il consumo delle API GraphQL non è noioso come le API RESTful.
In REST, diversi endpoint danno accesso a risorse diverse, a differenza di GraphQL, dove c'è un singolo endpoint. Ciò produce flessibilità e prestazioni e le query possono chiamare diverse funzioni del resolver.
Il linguaggio di definizione dello schema GraphQL
Il GraphQL Schema Definition Language (SDL) specifica gli schemi per i servizi GraphQL.
La sintassi di GraphQL SDL è di facile lettura e comprensione. Specificherai la struttura del tuo schema in un file con estensione .graphql O .graphqls estensione.
tipo Umano {
nome: Corda!
età: Int!
}input AddHuman {
nome: Corda!
età: Int!
}tipo mutazione {
CreateHuman (input: AddHuman!): Umano!
DeleteHuman (id: Int!): Corda!
UpdateHuman (id: Int!): Corda!
}
tipo Domanda {
GetHuman (id: Int!): Umano!
Ottieni Umani: [Umano!]!
}
Il codice GraphQL sopra è lo schema per un'API GraphQL che definisce la struttura dell'API per le richieste. Lo schema definisce la funzionalità CRUD per l'API.
Sul lato client, in base alla struttura dello schema e ai dati o all'operazione del client, il client può eseguire a domanda (GET o DELETE in REST) o a mutazione (PUT o POST).
Ecco un esempio di interrogazione del file Umano schema.
query Umano {
nome
età
}
La query sopra restituirebbe lo schema umano nome E età campo dati.
Le mutazioni di GraphQL hanno una sintassi abbastanza diversa rispetto alle query. Ecco un esempio di operazione di mutazione su Umano schema.
mutazione {
CreateHuman (input:{ nome:"Uomo", età: 10000000000000000,}) {
nome
età
}
}
Il codice di mutazione viene immesso nome E età campi al client e restituisce i dati dai campi.
Avrai bisogno di un archivio dati per la persistenza quando crei la tua API GraphQL. Come REST e la maggior parte delle architetture web basate su HTTP, GraphQL è senza stato e puoi utilizzare qualsiasi archivio dati o database per la tua app.
Creazione di un'API GraphQL
GraphQL è una specifica e puoi creare GraphQL nei linguaggi lato server più diffusi. Dovrai trovare una libreria con le funzionalità di cui hai bisogno per il tuo progetto.
Quando si sceglie una libreria GraphQL, si desidera utilizzare una libreria ricca di funzionalità che supporti tutti i tipi e le operazioni GraphQL. La maggior parte delle librerie adotta un approccio schema-first o code-first. Nel primo, definisci uno schema GraphQL e la libreria genera resolver e codice boilerplate. Per quest'ultimo, codificate i resolver senza definire uno schema.
GraphQL sta ottenendo l'adozione
Dall'inizio di GraphQL, sviluppatori e aziende hanno rilasciato strumenti per semplificarne l'utilizzo. Questi possono ridurre i tempi di sviluppo per progetti di piccole e medie dimensioni.
Puoi controllare i client GraphQL open source, la documentazione GraphQL e le sue specifiche per saperne di più.