GraphQL vs REST: tot ce trebuie să știți
Publicat: 2022-09-20Poate fi dificil să alegeți tehnologiile care vor fi incluse în stiva tehnologică a următorului dvs. proiect. În multe cazuri - și mai ales când vine vorba de alegerea între GraphQL și API-urile RESTful - totul este despre alegerea celei mai bune arhitecturi de design API.
Există patru moduri semnificative de a construi API-uri: SOAP, GRPC, REST și GraphQL. De multe ori ne îngustăm mintea la REST și GraphQL ori de câte ori dorim să construim API-uri. Acest lucru se datorează faptului că REST a schimbat modalitățile tradiționale de a construi API-uri cu SOAP și GRPC.
GraphQL este etichetat pe scară largă ca un REST mai bun, deoarece reprezintă o modalitate mai bună de a construi API-uri. Mulți dezvoltatori cred că GraphQL va înlocui REST. Mulți alții au descoperit deja că GraphQL ajută la rezolvarea unor provocări comune cu care se confruntă dezvoltatorii în timp ce construiesc API-uri REST.
Aceste două metode de construire a API-urilor sunt complet diferite. În practică, aceste tehnologii funcționează prin trimiterea unei cereri HTTP și primirea rezultatului. Ambele au avantajele și dezavantajele lor, iar în acest articol, vom discuta pe larg aceste două tehnologii grozave care au schimbat modul în care dezvoltăm și scalam API-urile.
Înainte de a ne arunca în detalii, totuși, să explorăm mai întâi semnificația API-urilor GraphQL și RESTful.
Ce este GraphQL?
GraphQL este un limbaj de interogare API, precum și un timp de execuție pentru a răspunde la acele interogări cu datele existente. De asemenea, este echipat cu instrumente puternice pentru a gestiona chiar și cele mai complexe interogări.
Caracteristica centrală a GraphQL este capacitatea sa de a solicita și primi doar datele specifice solicitate - nimic mai mult. Acest lucru face mult mai simplu să scalați API-urile împreună cu aplicația.
Cea mai interesantă parte a GraphQL este capacitatea sa de a vă oferi toate datele într-un singur punct final.
Diagrama de mai sus este o reprezentare tipică a arhitecturii GraphQL. Clienții fac cereri de pe diferite dispozitive, iar GraphQL se ocupă de cererile lor și returnează doar datele solicitate. Acest lucru rezolvă problema supra-preluării și preluării insuficiente în API-urile RESTful.
În exemplul de mai sus, arătăm un loc de joacă GraphQL și cum puteți interoga datele cu un singur punct final. În partea de sus este punctul final API, în stânga este interogarea care solicită numele continentelor și, în sfârșit, în dreapta, răspundem la interogarea pe care am solicitat-o.
GraphQL a fost creat de Facebook cu scopul principal de a rezolva experiența dezvoltatorului de aplicații mobile în timp ce lucrează cu API-urile REST. De când prima sa versiune open-source a fost lansată în 2015, GraphQL a cunoscut o creștere extraordinară datorită adoptării tehnologiei de către marii jucători din domeniul tehnologiei.
Companii care folosesc GraphQL
Mai jos este o listă cu doar câteva dintre companiile și aplicațiile care folosesc GraphQL în mod activ pe serverele lor.
Facebook a creat GraphQL și l-au folosit în producție pentru a-și alimenta aplicațiile mobile din 2012. Compania de rețea socială de mai multe miliarde de dolari a deschis specificația GraphQL în 2015, făcându-l accesibil în multe medii și pentru echipe de toate dimensiunile. .
GitHub
De asemenea, GitHub anunță utilizarea GraphQL prin furnizarea unui API GraphQL pentru crearea de integrări, preluarea datelor și automatizarea fluxurilor de lucru folosind API-ul GitHub GraphQL. API-ul GitHub GraphQL oferă interogări mai precise și mai flexibile decât API-ul REST GitHub.
Pinterest este, de asemenea, unul dintre cei mai devreme care adoptă GraphQL. Gigantul de partajare a fotografiilor a discutat public despre explorarea lor timpurie a GraphQL și modul în care utilizează tehnologia GraphQL care alimentează compania lor de miliarde de dolari.
Multe alte companii de miliarde de dolari, cum ar fi Intuit, Shopify, Coursera și Airbnb, își alimentează aplicațiile cu GraphQL. Și această preferință largă pentru REST continuă să crească.
Ce este API-ul RESTful?
REST înseamnă „Representational State Transfer”, care este un stil arhitectural software pentru sistemele hipermedia distribuite. Acesta definește principii și constrângeri pentru schimbul de resurse între server și clienți.
Dacă aceste principii sunt urmate într-un API, aplicația respectivă a API-ului este denumită „RESTful”. API-ul REST WordPress este un prim exemplu în acest sens.
Mai jos sunt câteva dintre principiile și constrângerile pe care trebuie să le îndeplinească un API pentru a fi denumit API Restful:
- Decuplarea client-server: clienții (frontend) și serverul (backend) sunt complet separate și pot comunica doar prin punctele finale.
- Interfață uniformă: datele văzute în interfață sunt identice pe toate dispozitivele.
- Apatridia: serverul nu își amintește dacă cererea curentă este făcută pentru prima dată sau nu. De fiecare dată când se face o solicitare, aceasta trebuie să includă toate informațiile necesare pentru a o procesa de la zero.
- Capacitatea de stocare în cache : stocarea în cache și stocarea sesiunii sunt permise, dar trebuie configurate pentru a permite utilizatorilor finali să renunțe la stocarea în cache a datelor.
- Arhitectura sistemului stratificat: API-urile trebuie proiectate astfel încât nici clientul, nici serverul să nu poată spune dacă comunică direct sau printr-un intermediar.
Diagrama de mai jos este a arhitecturii REST de bază. Acesta arată cum sunt gestionate de obicei cererile și răspunsurile.
Beneficiile GraphQL
Mai jos sunt câteva beneficii ale utilizării GraphQL, care ilustrează de ce este mai mult decât suficient pentru a construi următoarea aplicație de un miliard de dolari.
Preluarea datelor printr-un singur punct final API
Avantajul principal al GraphQL este capacitatea sa de a accesa oricare sau toate punctele de date printr-un singur punct final API.
Una dintre cele mai frecvente probleme cu API-urile RESTful este faptul că aveți prea multe puncte finale pentru a accesa informații. În GraphQL, aveți doar un singur punct final, deci nu trebuie să trimiteți mai multe solicitări pentru a prelua informații diferite despre un obiect.
Diagrama de mai jos prezintă un exemplu clar de recuperare a resurselor folosind API-ul RESTful și GraphQL. Puteți vedea că există un singur punct final pentru a accesa resursa în serverul GraphQL, în timp ce mai multe puncte finale API sunt necesare pentru a accesa diferite resurse în API-ul RESTful.
Fără preluare excesivă sau preluare insuficientă
Problema preluării excesive sau insuficiente este o problemă cunoscută cu API-urile RESTful. Acesta este momentul în care clienții descarcă date prin lovirea punctelor finale care returnează structuri de date fixe sau, altfel, preiau mai mult sau mai puțin decât se așteptau.
Preluarea excesivă are ca rezultat ca cererea să primească – sau „preluare” – mai multe date decât ceea ce este necesar pentru o anumită solicitare. Imaginează-ți că aduci toți utilizatorii dintr-un tabel cu intenția de a le afișa numele de utilizator pe pagina ta de pornire. În acest caz, preluarea excesivă va returna toate datele despre fiecare utilizator, inclusiv (dar nu numai) numele.
Preluarea insuficientă este relativ rară, dar se întâmplă atunci când punctul final specific nu reușește să furnizeze toate informațiile solicitate. Clientul va trebui să facă solicitări suplimentare pentru a accesa celelalte informații după cum este necesar.
GraphQL rezolvă eficient problema supra-preluării sau sub-aducerii prin preluarea exactă a resursei pe care clientul a solicitat-o fără detalii suplimentare.
O mai bună manipulare a sistemelor complexe și a microserviciilor
GraphQL poate unifica și ascunde complexitatea sistemelor multiple integrate.
De exemplu, să presupunem că vrem să migrăm de la o aplicație backend monolitică la o arhitectură de microservicii. API-ul GraphQL ajută la gestionarea comunicării între diverse microservicii prin îmbinarea acestora într-o singură schemă GraphQL.
Odată definite aceste scheme, atât front-end-ul, cât și backend-ul pot comunica separat, fără alte modificări, deoarece front-end-ul știe că datele din schemă vor fi întotdeauna sincronizate în întregul sistem.
Rapid și sigur
Problema suprapreluării poate duce la un consum mai mare de lățime de bandă pentru clienți, ceea ce poate, în timp, să provoace întârzieri în aplicația dvs. Utilizarea modelelor de design API RESTful necesită mai mult timp pentru a sorta informațiile necesare dintr-o încărcătură utilă enormă.
Datorită capacității GraphQL de a evita preluarea excesivă și preluarea insuficientă, serverul returnează o formă sigură, ușor de citit și previzibilă, care face cererile și răspunsurile dvs. API mai rapide.
Beneficiile REST
În ciuda popularității în creștere a GraphQL, REST este încă unul dintre cele mai populare standarde API. Să aruncăm o privire la de ce.
- Curba de învățare: API-urile RESTful sunt cele mai ușor de învățat și de înțeles. Acesta este avantajul său principal față de alte API-uri.
- Serializare: REST vine cu o abordare flexibilă și formate pentru serializarea datelor în JSON.
- Memorarea în cache: API-ul REST poate gestiona o încărcare mare cu ajutorul unui server proxy HTTP și a unui cache.
- Solicitare complexă: API-urile REST au un punct final separat pentru solicitări diferite, ceea ce face ca cererea complexă să fie mai gestionabilă decât în alte API-uri
- Curat și simplu: API-urile REST sunt elegante, simple și curate. Sunt ușor de explorat.
- Proceduri HTTP standard: REST folosește apeluri standard de proceduri HTTP pentru a prelua date și a face cereri.
- Client/Server: Aceasta înseamnă că logica sa de afaceri este decuplată de prezentare. Așa că o poți schimba pe una fără a-l afecta pe cealaltă.
- REST este apatrid: Toate mesajele schimbate între client și server au tot contextul necesar pentru a ști ce să faci cu mesajul.
Dezavantajele GraphQL
Acum că am discutat despre avantajele GraphQL vs REST, haideți să explorăm câteva dintre dezavantajele GraphQL:
- Curbă de învățare dificilă: GraphQL nu este la fel de ușor de învățat ca REST. Cea mai dificilă parte a construirii unui API GraphQL este proiectarea schemei. Acest lucru necesită mult timp și cunoștințe de domeniu.
- Încărcarea fișierelor: GraphQL nu are o funcție nativă de încărcare a fișierelor. Acest lucru poate fi rezolvat folosind codificarea Base64, dar costul codificării și decodării în acest fel poate fi consumator de timp și costisitor.
- Web Caching: Memorarea în cache ajută la reducerea traficului frecvent către server, ceea ce accelerează cererile și procesul de răspuns prin păstrarea informațiilor accesate frecvent aproape de server. GraphQL nu acceptă și nu se bazează pe metodele de stocare în cache HTTP, depinzând în schimb de mecanismele de stocare în cache ale clienților Apollo sau Relay.
- Nepotrivit pentru aplicații mici: GraphQL poate să nu fie cea mai bună arhitectură API pentru construirea unei aplicații mici. Dacă aplicația dvs. nu necesită interogări mai flexibile oferite de GraphQL, REST este calea de urmat.
- Problemă complexă de interogare: capacitatea GraphQL de a oferi unui client exact ceea ce își dorește poate duce, de asemenea, la probleme de propagare a interogărilor. Dacă un client trimite prea multe interogări imbricate, poate duce la trimiterea de interogări greșite, ceea ce poate consuma foarte mult timp pentru server. Este mai bine să utilizați REST cu puncte finale personalizate pentru a îndeplini astfel de solicitări.
Dezavantajele REST
Acum, să ne îndreptăm atenția asupra unora dintre dezavantajele REST:
- Călătorii multiple dus-întors: cea mai mare problemă cu API-urile REST este natura numeroaselor puncte finale. Aceasta înseamnă că clientul să obțină toate resursele pentru o aplicație completă, trebuie să facă nenumărate călătorii dus-întors pentru a obține datele.
- Preluare excesivă și preluare insuficientă: problema de preluare excesivă și de preluare insuficientă este un dezavantaj major în APIS-ul RESTful. Poate cauza întârzieri în răspunsuri din cauza preluării unor sarcini utile nedorite mari.
- Ierarhie: Deoarece API-urile REST sunt construite pe resurse de referință URI, ele sunt potrivite pentru resursele care nu sunt organizate în mod natural sau nu sunt accesate într-o ierarhie simplă.
De ce să folosiți GraphQL în loc de REST
În continuare, vom discuta de ce ați putea dori să luați în considerare GraphQL pentru dezvoltarea viitoare a API-ului în loc de API-ul RESTful.
Schemă puternic tipizată
GraphQL folosește un sistem de tip puternic pentru a defini capabilitățile API-ului. În GraphQL, limbajul de definire a schemei (SDL) este folosit pentru a defini parametrii care înconjoară modul în care clientul accesează datele serverului. Toate API-urile expuse clientului sunt notate în SDL, rezolvând problema de inconsecvență a datelor observată în API-urile RESTful.
Fără prelevare excesivă sau insuficientă
Problema preluării excesive sau insuficiente este o problemă cunoscută cu API-urile RESTful în care clienții primesc fie mai multe, fie mai puține informații decât au solicitat. GraphQL rezolvă această problemă oferind clientului un mediu pentru a specifica informațiile necesare, apoi returnând exact - și numai - acele informații specifice.
Puncte finale multiple
Una dintre cele mai mari probleme ale API-urilor RESTful este să aibă prea multe puncte finale pentru a accesa informații.
Să presupunem că doriți să accesați un anumit utilizator prin numărul său de identificare. Vi se va prezenta un punct final precum /users/1
. Dar dacă doriți să accesați fotografiile utilizatorului respectiv, va trebui să trimiteți o solicitare către un alt punct final, cum ar fi /users/1/photos
.
În GraphQL, aveți un singur punct final și nu trebuie să trimiteți mai multe solicitări pentru a prelua informații diferite despre utilizator.
Confruntare GraphQL vs REST
În cele din urmă, vom explora diferența majoră dintre API-urile GraphQL și RESTful. După aceea, vom discuta câteva dintre caracteristicile unui design bun API și vom compara modul în care fiecare tehnologie le gestionează.
Performanţă
Nu există nicio îndoială că GraphQL funcționează mai rapid decât API-urile RESTful datorită capacității sale de a oferi un singur punct final pentru a vă accesa toate resursele. API-urile RESTful folosesc mai multe puncte finale, ceea ce ar putea duce la latența rețelei.
Complexitatea interogărilor
Deoarece punctele finale nu sunt separate în mai multe puncte finale, interogările GraphQL pot deveni din ce în ce mai complexe în timp. Punctele finale API RESTful, pe de altă parte, sunt separate, ceea ce limitează API-urile RESTful la interogări simple.
Popularitate și sprijin comunitar
GraphQL este un model arhitectural API și un limbaj de interogare în creștere. Deși este încă tânăr, rata de adoptare și resursele sale cresc rapid, iar resursele deja abundă pentru cei interesați să o învețe singuri.
REST, pe de altă parte, se mândrește deja cu un sprijin vast al comunității și continuă să fie folosit de companii de toate tipurile, de la cei care construiesc microservicii mici până la cei care creează aplicații sociale complexe și nu numai.
În prezent, concursul de popularitate dintre GraphQL și REST este o remiză. Ambele tehnologii continuă să fie utilizate pe scară largă și bine susținute de comunitatea de dezvoltare.
Curbă de învățare
Curba de învățare pentru GraphQL este abruptă. Necesită cunoștințe bune în domeniul dezvoltării API și al ingineriei software generale. Un începător complet va avea un timp dificil să înțeleagă GraphQL suficient de bine pentru a construi o aplicație complexă.
În schimb, REST este foarte ușor de început și necesită mai puține cunoștințe de domeniu. API-ul RESTful este bine integrat în majoritatea limbajelor de programare majore și a cadrelor populare, ceea ce face învățarea foarte ușoară.
rezumat
GraphQL este o nouă tehnologie care urmează modelele arhitecturale RESTful API, așa cum REST a fost introdus pentru a rezolva problemele cu modelele SOAP API.
GraphQL vă oferă răspunsuri mai rapide, un singur punct final API pentru toate interogările dvs. și o schemă strictă pentru acces consecvent la date. Aceste motive sunt cele care au făcut ca companiile de mai multe miliarde de dolari să înceapă să treacă la GraphQL, chiar și în stadiul incipient. Cu toate acestea, în ciuda limitărilor sale, progenitorul REST al lui GraphQL continuă să mențină o prezență puternică pe scenă.
În acest ghid, am explorat tot ce trebuie să știți despre GraphQL și API-urile RESTful, inclusiv beneficiile și dezavantajele fiecărei tehnologii, pentru a vă ajuta să decideți cu încredere pe care o preferați. Am discutat, de asemenea, despre problemele cunoscute cu API-urile RESTful — cum ar fi preluarea excesivă, preluarea insuficientă și punctele finale multiple — și despre modul în care GraphQL încearcă să rezolve aceste probleme și să sporească performanța aplicației dvs.
Acum aveți suficiente informații pentru a alege dacă GraphQL vs REST este potrivit pentru următorul dvs. proiect. Spune-ne în secțiunea de comentarii ce vei construi cu câștigătorul ales!