Postoje mnogi arhitektonski standardi otvorenog koda za izgradnju i distribuciju aplikacija. REST (Representational State Transfer), SOAP (Simple Object Access Protocol), RPC (Remote Procedural Call) i GraphQL API-ji su najpopularniji.

RESTful API-ji su najčešće korišteni arhitektonski standard API-ja. Ako ste napisali složene RESTful API-je s mnogo krajnjih točaka, vjerojatno ste shvatili koliko komplicirani mogu biti. Ovo je osobito istinito ako postoje samo male razlike između krajnjih točaka.

Također možete naići na probleme s dohvaćanjem podataka jer RESTful API-ji nisu dovoljno fleksibilni za odabir određenih podataka. GraphQL rješava ove probleme RESTful API-ja.

Što je GraphQL?

GraphQL (Graph Query Language) je upitni jezik i vrijeme izvođenja za izradu API-ja. Za razliku od REST API-ja s mnogo krajnjih točaka za potrošnju podataka, GraphQL API-ji imaju jednu ulaznu točku. Možete dohvatiti određene podatke tako da ih opišete u upitima.

The GraphQL specifikacija definira jezik upita i način rada GraphQL poslužitelja. Možete graditi i koristiti GraphQL API-je u jezicima na strani poslužitelja od Pythona do

instagram viewer
Javascripti bilo koji jezik koji podržava HTTP.

Meta je izgradila GraphQL 2012. kao alternativu REST-u za nadogradnju na HTTP-u. Izdali su GraphQL kao standard otvorenog koda 2015. Danas zaklada GraphQL nadzire razvoj GraphQL specifikacije.

GraphQL je prilično nov, s niskom primjenom i postoje skriveni troškovi njegove upotrebe. Izrada GraphQL API-ja može biti nepotrebno složena, posebno za male projekte s nekoliko krajnjih točaka.

Također, svi GraphQL zahtjevi na kraju vraćaju statusni kod 200 bez obzira na stanje zahtjeva.

Kako radi GraphQL?

Za razliku od REST, koji je orijentiran na resurse, GraphQL zahtijeva da o podacima razmišljate kao o grafikonu za interakciju s podacima. Možete odrediti strukturu podataka, a specifikacija pruža robusno sučelje upita za interakciju s API-jem preko HTTP-a. Moći ćete koristiti razne značajke ovisno o GraphQL paket ili biblioteka odlučite koristiti.

GraphQL sheme uključuju tipove objekata koji definiraju traženi objekt i njegova dostupna polja. Na API upitima i mutacijama, paket GraphQL provjerava upite i izvršava upite na temelju navedenih funkcija rukovatelja (razrešivača).

Zašto biste trebali koristiti GraphQL?

REST je standard jednostavan za korištenje, a većina programskih jezika ima alate za brzu izgradnju RESTful API-ja. Međutim, postoje mnogi problemi s izgradnjom i korištenjem RESTful API-ja.

Evo nekih problema s REST-om zbog kojih programeri preferiraju GraphQL za neke slučajeve upotrebe.

Neučinkovito dohvaćanje podataka

RESTful API-ji prenose podatke na temelju specifikacije krajnje točke. Nisu dovoljno fleksibilni da dohvate podatke izvan onoga što je tvrdo kodirano u funkciji rukovatelja krajnje točke.

Pretpostavimo da krajnja točka vraća popis podataka na poziv, a vi trebate navesti vrijednosti ili kriterije za polja. U tom slučaju programer mora stvoriti krajnju točku i definirati poslovnu logiku za vraćanje podataka. Možete analizirati vrijedan resurs ručno, što na kraju oduzima više vremena.

GraphQL rješava problem neučinkovitog dohvaćanja podataka jer možete postavljati upite API-jima za fleksibilno vraćanje podataka na temelju kriterija i specifikacija.

GraphQL API-ji su interaktivni; možete navesti podatke koje trebate dohvatiti u jednostavnoj, čitljivoj sintaksi.

{
korisnik (gdje: {dob: {_eq: "89"}}) {
Ime
škola(gdje: {živ: {_eq: istinito}}) {
bio
nacionalnost
}
}
}

GraphQL upit iznad upita a korisnik shema za unose gdje je dob polje je 89. Upit ima ugrađeni upit za unose gdje je živ polje ocjenjuje pravi. Vraća polja imena, biografije i nacionalnosti iz sheme.

Brzi razvoj

Izrada i korištenje GraphQL API-ja lakši je od korištenja REST-a, osobito kako se veličina projekta povećava. Tijekom razvojne faze ne morate razvijati toliko ruta i funkcija rukovatelja koliko ćete razvijati RESTful API-je. Upotreba GraphQL API-ja nije tako zamorna kao RESTful API-ji.

U REST-u različite krajnje točke daju pristup različitim resursima, za razliku od GraphQL-a, gdje postoji jedna krajnja točka. To daje fleksibilnost i izvedbu, a upiti mogu pozvati različite funkcije razrješitelja.

GraphQL Schema Definition Language

GraphQL Schema Definition Language (SDL) specificira sheme za GraphQL usluge.

GraphQL SDL sintaksa je jednostavna za čitanje i razumijevanje. Navest ćete strukturu svoje sheme u datoteci s .graphql ili .graphqls proširenje.

tip ljudski {
Ime: Niz!
dob: Int!
}

unos AddHuman {
Ime: Niz!
dob: Int!
}

tip Mutacija {
CreateHuman (unos: AddHuman!): Čovjek!
DeleteHuman (id: Int!): Niz!
UpdateHuman (id: Int!): Niz!
}

tip Upit {
GetHuman (id: Int!): Čovjek!
GetHumans: [Ljudski!]!
}

GraphQL kod iznad je shema za GraphQL API koja definira strukturu API-ja za zahtjeve. Shema definira CRUD funkcionalnost za API.

Na strani klijenta, na temelju strukture sheme i podataka ili operacije klijenta, klijent može izvršiti upit (GET ili DELETE u REST) ​​ili a mutacija (PUT ili POST).

Evo primjera postavljanja upita ljudski shema.

query Human {
Ime
dob
}

Gornji upit bi vratio ljudsku shemu Ime i dob terenski podaci.

GraphQL mutacije imaju prilično drugačiju sintaksu za razliku od upita. Evo primjera operacije mutacije na ljudski shema.

mutacija {
CreateHuman (input:{ name:"čovjek", dob: 1000000000000000,}) {
Ime
dob
}
}

Unosi koda mutacije Ime i dob polja klijentu i vraća podatke iz polja.

Trebat će vam pohrana podataka za postojanost kada budete gradili svoj GraphQL API. Poput REST-a i većine web-arhitektura temeljenih na HTTP-u, GraphQL je bez statusa i možete koristiti bilo koju pohranu podataka ili bazu podataka za svoju aplikaciju.

Izrada GraphQL API-ja

GraphQL je specifikacija i možete graditi GraphQL na najpopularnijim jezicima na strani poslužitelja. Morat ćete pronaći biblioteku sa značajkama koje su vam potrebne za vaš projekt.

Kada birate GraphQL biblioteku, želite koristiti biblioteku bogatu značajkama koja podržava sve GraphQL vrste i operacije. Većina knjižnica ima pristup prvo shemi ili pristupu kodu. U prvom, vi definirate GraphQL shemu, a biblioteka generira razlučivače i šablonski kod. Za potonje, rezolvere kodirate čvrsto bez definiranja sheme.

GraphQL se usvaja

Od početka GraphQL-a, programeri i tvrtke objavili su alate za pojednostavljenje njegove upotrebe. To može smanjiti vrijeme razvoja za manje i srednje projekte.

Možete provjeriti GraphQL klijente otvorenog koda, GraphQL dokumentaciju i njegove specifikacije da biste saznali više.