Există multe standarde arhitecturale open-source pentru construirea și distribuirea aplicațiilor. REST (Representational State Transfer), SOAP (Simple Object Access Protocol), RPC (Remote Procedural Call) și API-urile GraphQL sunt cele mai populare.
API-urile RESTful sunt cel mai folosit standard arhitectural API. Dacă ați scris API-uri RESTful complexe cu multe puncte finale, probabil v-ați dat seama cât de complicate pot fi. Acest lucru este valabil mai ales dacă există doar mici diferențe între punctele finale.
De asemenea, puteți întâmpina probleme cu preluarea datelor, deoarece API-urile RESTful nu sunt suficient de flexibile pentru a selecta anumite date. GraphQL rezolvă aceste probleme ale API-urilor RESTful.
Ce este GraphQL?
GraphQL (Graph Query Language) este un limbaj de interogare și runtime pentru construirea de API-uri. Spre deosebire de API-urile REST cu multe puncte finale pentru consumarea datelor, API-urile GraphQL au un singur punct de intrare. Puteți obține date specifice descriindu-le în interogări.
The Specificația GraphQL definește limbajul de interogare și modul în care funcționează serverele GraphQL. Puteți construi și consuma API-uri GraphQL în limbaje de pe server, de la Python la Javascriptși orice limbă care acceptă HTTP.
Meta a construit GraphQL în 2012 ca o alternativă la REST pentru construirea pe HTTP. Au lansat GraphQL ca standard open-source în 2015. Astăzi, fundația GraphQL supraveghează dezvoltarea specificației GraphQL.
GraphQL este destul de nou, cu adoptare scăzută și există costuri ascunse pentru utilizarea acestuia. Crearea API-urilor GraphQL poate fi inutil de complexă, mai ales pentru proiectele mici cu câteva puncte finale.
De asemenea, toate cererile GraphQL returnează în cele din urmă un cod de stare de 200, indiferent de starea cererii.
Cum funcționează GraphQL?
Spre deosebire de REST, care este orientat către resurse, GraphQL necesită să vă gândiți la date ca pe un grafic pentru a interacționa cu datele. Puteți specifica structura datelor, iar specificația oferă o interfață de interogare robustă pentru interacțiunea cu API-ul prin HTTP. Veți putea folosi diverse funcții în funcție de Pachetul sau bibliotecă GraphQL alegi să folosești.
Schemele GraphQL includ tipuri de obiecte care definesc obiectul solicitat și câmpurile sale disponibile. Pe interogările și mutațiile API, pachetul GraphQL validează interogările și execută interogările pe baza funcțiilor de gestionare specificate (rezolvatori).
De ce ar trebui să utilizați GraphQL?
REST este un standard ușor de utilizat, iar majoritatea limbajelor de programare au instrumente pentru a construi rapid API-uri RESTful. Cu toate acestea, există multe probleme legate de construirea și consumul de API-uri RESTful.
Iată câteva dintre problemele legate de REST care îi fac pe dezvoltatori să prefere GraphQL pentru unele cazuri de utilizare.
Preluare ineficientă a datelor
API-urile RESTful transmit date pe baza specificațiilor punctului final. Nu sunt suficient de flexibili pentru a prelua date dincolo de ceea ce este codificat greu în funcția de gestionare a punctului final.
Să presupunem că un punct final returnează o listă de date la apel și trebuie să specificați valori sau criterii pentru câmpuri. În acest caz, dezvoltatorul trebuie să creeze un punct final și să definească logica de afaceri pentru a returna datele. Puteți analiza manual resursa valoroasă, ceea ce în cele din urmă durează mai mult timp.
GraphQL rezolvă problema preluării ineficiente a datelor, deoarece puteți interoga API-urile pentru a returna date pe baza criteriilor și specificațiilor în mod flexibil.
API-urile GraphQL sunt interactive; puteți specifica datele pe care trebuie să le regăsiți într-o sintaxă ușor de citit.
{
utilizator (unde: {vârsta: {_eq: "89"}}) {
Nume
şcoală(Unde: {în viaţă: {_eq: adevărat}}) {
bio
naţionalitate
}
}
}
Interogarea GraphQL de mai sus interogă a utilizator schema pentru intrările în care vârstă câmpul este 89. Interogarea are o interogare încorporată pentru intrările în care în viaţă evaluează câmpul Adevărat. Returnează câmpurile de nume, biografie și naționalitate din schemă.
Dezvoltare rapidă
Crearea și consumarea API-urilor GraphQL este mai ușor decât utilizarea REST, mai ales pe măsură ce dimensiunea proiectului crește. În timpul fazei de dezvoltare, nu trebuie să dezvoltați atât de multe rute și funcții de gestionare ca atunci când dezvoltați API-uri RESTful. Consumul de API-uri GraphQL nu este la fel de obositor ca API-urile RESTful.
În REST, punctele finale diferite oferă acces la resurse diferite, spre deosebire de GraphQL, unde există un singur punct final. Acest lucru oferă flexibilitate și performanță, iar interogările pot apela diferite funcții de rezolvare.
Limbajul de definire a schemei GraphQL
GraphQL Schema Definition Language (SDL) specifică schemele pentru serviciile GraphQL.
Sintaxa GraphQL SDL este ușor de citit și de înțeles. Veți specifica structura schemei dvs. într-un fișier cu .graphql sau .graphqls extensie.
tip uman {
Nume: Şir!
vârsta: Int!
}introduceți AddHuman {
Nume: Şir!
vârsta: Int!
}tip Mutație {
CreateHuman (input: AddHuman!): Om!
DeleteHuman (id: Int!): Şir!
UpdateHuman (id: Int!): Şir!
}
tip Interogare {
GetHuman (id: Int!): Om!
GetHumans: [Uman!]!
}
Codul GraphQL de mai sus este schema pentru un API GraphQL care definește structura API-ului pentru solicitări. Schema definește funcționalitatea CRUD pentru API.
Pe partea clientului, pe baza structurii schemei și a datelor sau operațiunii clientului, clientul poate executa a interogare (GET sau DELETE în REST) sau a mutaţie (PUT sau POST).
Iată un exemplu de interogare a Uman schemă.
interogare uman {
Nume
vârstă
}
Interogarea de mai sus ar returna schema umană Nume și vârstă date de câmp.
Mutațiile GraphQL au o sintaxă destul de diferită în comparație cu interogările. Iată un exemplu de operație de mutație pe Uman schemă.
mutatie {
CreateHuman (intrare:{ nume:"om", vârsta: 1000000000000000,}) {
Nume
vârstă
}
}
Intrările codului de mutație Nume și vârstă câmpuri către client și returnează datele din câmpuri.
Veți avea nevoie de un depozit de date pentru persistență atunci când vă construiți API-ul GraphQL. La fel ca REST și majoritatea arhitecturii web bazate pe HTTP, GraphQL este apatrid și puteți utiliza orice magazin de date sau bază de date pentru aplicația dvs.
Construirea unui API GraphQL
GraphQL este o specificație și puteți construi GraphQL în cele mai populare limbi de pe partea de server. Va trebui să găsiți o bibliotecă cu caracteristicile de care aveți nevoie pentru proiectul dvs.
Când alegeți o bibliotecă GraphQL, doriți să utilizați o bibliotecă bogată în caracteristici care acceptă toate tipurile și operațiunile GraphQL. Cele mai multe biblioteci adoptă fie o abordare pe schemă, fie pe o abordare pe bază de cod. În primul, definiți o schemă GraphQL, iar biblioteca generează soluții și cod standard. Pentru acesta din urmă, codificați rezolutoarele fără a defini o schemă.
GraphQL câștigă adopție
De la înființarea GraphQL, dezvoltatorii și companiile au lansat instrumente pentru a simplifica utilizarea acestuia. Acestea pot reduce timpul de dezvoltare pentru proiecte mai mici și medii.
Puteți consulta clienții GraphQL open-source, documentația GraphQL și specificațiile sale pentru a afla mai multe.