GraphQL
Što je GraphQL?
GraphQL je programski jezik koji je namijenjen za optimizirano slanje upita i dobivanje rezultata između klijenata i servera preko HTTP protokola. Razvio ga je Facebook koji ga je ujedno i implementirao u svoje aplikacije još od 2012 godine. Od 2015. godine GraphQL postaje javno dostupan svim zainteresiranim, tako da se sve intenzivnije koristi u praksi i izvan okvira samog Facebooka. Tehnologiju je moguće kombinirati s različitim programskim jezicima (Python, PHP, Java, Elixir, JavaScript, Ruby i dr.)
Kako je nastao?
Kako tehnologija svaki dan sve više i više napreduje tako i Facebook-ove aplikacije postajale su sve složenije, što dovodi do velikih problema, mnogih grešaka, pada aplikacija, što nije u interesu niti jednoj kompaniji a posebno Facebooku. Tako je nastala ideja da se izradi novi programski jezik koji će odvojiti podatke od grafičkog djela – GraphQL.
Ključne karakteristike
- GraphQL upit vraća samo one podatke koji su traženi, ništa više ili manje od toga. Upit se ne postavlja izravno na bazu podataka, nego na API podsustav koji se nalazi na strani klijenta i upravlja time kakve će podatke dobiti, a ne server, zbog čega je brza i stabilna u radu.
- Velika količina podataka zajedno sa međusobnim vezama može se dobiti sa samo jednim upitom
- Razvoj novih GraphQL upita ne utječe na djelovanje starih upita, koji se i dalje mogu normalno izvoditi
Razlike između GraphQL-a i REST-a
GraphQL je često predstavljen kao revolucionarni novi način razmišljanja o API-jevima. GraphQL predstavlja posebnu vrstu programskog jezika upita pomoću koje aplikacija na strani klijenta na fleksibilan, ali istovremeno i optimiziran način, postavlja upite serveru, a server vraća rezultate obrade klijentu. I istina je – GraphQL može biti transformativan kada se usvoji u organizaciji, što omogućuje frontend i backend timovima da surađuju glatko nego ikada prije. No, u praksi, obje ove tehnologije uključuju slanje HTTP zahtjeva i primanje određenih rezultata, a GraphQL ima mnogo elemenata ugrađenog REST modela.
REST | GRAPHQL |
Koristi HTTP Protokol za prijenos podataka | Protokol za prijenos podataka je na strani onoga tko implementira (HTTP, Web Socket, MQTT) |
Za svaki resurs koristi po jedan endpoint API | Uobičajeno je da se koristi jedan GrapQL endpoint po aplikaciji |
Koristi HttpStatusCode za poruke o greškama (Error response) | Predvidljiva struktura odgovora sa podatcima koja sadržavaju poruke i kodove grešaka |
Server definira oblik odgovora | Klijent definira kakav odgovor želi dobiti |
Paginacija se odvija preko URL parametara | Paginacija se odvija unutar GraphQL upitnih parametara |
Zahtjeva parametre za čitanje (Query) i za pisanje(HTTP) | Nema nekih posebnih zahtjeva ni ograničenja |
Krajnja točka koja se zove je identitet tog objekta | Identitet je odvojen na način na koji ga se dohvaća |
Slika 1. Prikaz dohvaćanja podataka REST-a i GraphQL-a
Izvor: https://blog.apollographql.com/graphql-vs-rest-5d425123e34b