Za izdelavo in distribucijo aplikacij obstaja veliko odprtokodnih arhitekturnih standardov. Najbolj priljubljeni so REST (Representational State Transfer), SOAP (Simple Object Access Protocol), RPC (Remote Procedural Call) in GraphQL API.

API-ji RESTful so najpogosteje uporabljen arhitekturni standard API-jev. Če ste napisali zapletene API-je RESTful s številnimi končnimi točkami, ste verjetno spoznali, kako zapleteni so lahko. To še posebej velja, če so med končnimi točkami le majhne razlike.

Prav tako lahko naletite na težave pri pridobivanju podatkov, ker API-ji RESTful niso dovolj prilagodljivi za izbiro določenih podatkov. GraphQL rešuje te težave API-jev RESTful.

Kaj je GraphQL?

GraphQL (Graph Query Language) je jezik poizvedb in izvajalno okolje za gradnjo API-jev. Za razliko od API-jev REST s številnimi končnimi točkami za porabo podatkov imajo API-ji GraphQL eno vstopno točko. Določene podatke lahko pridobite tako, da jih opišete v poizvedbah.

The Specifikacija GraphQL definira jezik poizvedb in delovanje strežnikov GraphQL. API-je GraphQL lahko izdelate in uporabljate v strežniških jezikih od Pythona do

Javascriptin kateri koli jezik, ki podpira HTTP.

Meta je leta 2012 zgradila GraphQL kot alternativo REST-u za gradnjo na HTTP. Leta 2015 so izdali GraphQL kot odprtokodni standard. Danes fundacija GraphQL nadzira razvoj specifikacije GraphQL.

GraphQL je dokaj nov, z nizko stopnjo sprejetosti in obstajajo skriti stroški njegove uporabe. Gradnja API-jev GraphQL je lahko po nepotrebnem zapletena, zlasti za majhne projekte z nekaj končnimi točkami.

Poleg tega vse zahteve GraphQL na koncu vrnejo statusno kodo 200, ne glede na stanje zahteve.

Kako deluje GraphQL?

Za razliko od REST, ki je usmerjen v vire, GraphQL zahteva, da o podatkih razmišljate kot o grafu za interakcijo s podatki. Določite lahko strukturo podatkov, specifikacija pa zagotavlja robusten poizvedovalni vmesnik za interakcijo z API-jem prek HTTP. Uporabili boste lahko različne funkcije, odvisno od Paket ali knjižnica GraphQL se odločite za uporabo.

Sheme GraphQL vključujejo tipe objektov, ki definirajo zahtevani objekt in njegova razpoložljiva polja. Pri poizvedbah in mutacijah API-ja paket GraphQL preverja poizvedbe in izvaja poizvedbe na podlagi navedenih funkcij obdelovalca (resolverjev).

Zakaj bi morali uporabljati GraphQL?

REST je standard, ki je enostaven za uporabo in večina programskih jezikov ima orodja za hitro gradnjo RESTful API-jev. Vendar pa obstaja veliko težav z gradnjo in uporabo RESTful API-jev.

Tukaj je nekaj težav z REST, zaradi katerih imajo razvijalci za nekatere primere uporabe raje GraphQL.

Neučinkovito pridobivanje podatkov

API-ji RESTful prenašajo podatke na podlagi specifikacije končne točke. Niso dovolj prilagodljivi, da bi pridobili podatke, ki presegajo tisto, kar je trdo kodirano v funkciji obdelovalca končne točke.

Recimo, da končna točka vrne seznam podatkov ob klicu in morate podati vrednosti ali merila za polja. V tem primeru mora razvijalec ustvariti končno točko in definirati poslovno logiko za vrnitev podatkov. Dragocen vir lahko razčlenite ročno, kar sčasoma vzame več časa.

GraphQL rešuje težavo neučinkovitega pridobivanja podatkov, saj lahko poizvedujete po API-jih za prilagodljivo vrnitev podatkov na podlagi meril in specifikacij.

API-ji GraphQL so interaktivni; podate lahko podatke, ki jih želite pridobiti, v preprosti in berljivi sintaksi.

{
uporabnik (kje: {starost: {_eq: "89"}}) {
ime
šola(kje: {živ: {_eq: res}}) {
bio
narodnost
}
}
}

Poizvedba GraphQL nad poizvedbami a uporabnik shema za vnose, kjer je starost polje je 89. Poizvedba ima vdelano poizvedbo za vnose, kjer je živ polje ocenjuje prav. Iz sheme vrne polja z imenom, biografijo in državljanstvom.

Hiter razvoj

Izdelava in uporaba GraphQL API-jev je lažja kot uporaba REST, zlasti ko se velikost projekta povečuje. Med razvojno fazo vam ni treba razviti toliko poti in funkcij za obravnavo, kot vam bo pri razvoju API-jev RESTful. Uporaba API-jev GraphQL ni tako dolgočasna kot API-ji RESTful.

V REST različne končne točke omogočajo dostop do različnih virov, za razliko od GraphQL, kjer je ena sama končna točka. To zagotavlja prilagodljivost in zmogljivost, poizvedbe pa lahko kličejo različne funkcije razreševalnika.

Definicijski jezik sheme GraphQL

GraphQL Schema Definition Language (SDL) določa sheme za storitve GraphQL.

Sintaksa GraphQL SDL je enostavna za branje in razumevanje. Strukturo svoje sheme boste določili v datoteki z .graphql oz .graphqls razširitev.

vrsta Človek {
ime: Vrvica!
starost: Int!
}

vnos AddHuman {
ime: Vrvica!
starost: Int!
}

vrsta Mutacija {
CreateHuman (vnos: AddHuman!): Človek!
DeleteHuman (id: Int!): Vrvica!
UpdateHuman (id: Int!): Vrvica!
}

vrsta Poizvedba {
GetHuman (id: Int!): Človek!
GetHumans: [Človek!]!
}

Zgornja koda GraphQL je shema za API GraphQL, ki definira strukturo API-ja za zahteve. Shema definira funkcionalnost CRUD za API.

Na strani odjemalca lahko odjemalec na podlagi strukture sheme in odjemalčevih podatkov ali operacije izvede poizvedbo (GET ali DELETE v REST) ​​ali a mutacija (PUST ali POST).

Tukaj je primer poizvedovanja Človek shema.

query Human {
ime
starost
}

Zgornja poizvedba bi vrnila človeško shemo ime in starost terenski podatki.

Mutacije GraphQL imajo v nasprotju s poizvedbami precej drugačno sintakso. Tukaj je primer operacije mutacije na Človek shema.

mutacija {
CreateHuman (vnos:{ ime:"moški", starost: 1000000000000000,}) {
ime
starost
}
}

Vhodi kode mutacije ime in starost polja odjemalcu in vrne podatke iz polj.

Ko boste gradili API GraphQL, boste potrebovali shrambo podatkov za obstojnost. Tako kot REST in večina spletnih arhitektur, ki temeljijo na HTTP, je tudi GraphQL brez stanja in za svojo aplikacijo lahko uporabite katero koli shrambo podatkov ali bazo podatkov.

Izdelava GraphQL API

GraphQL je specifikacija in GraphQL lahko zgradite v najbolj priljubljenih strežniških jezikih. Najti boste morali knjižnico s funkcijami, ki jih potrebujete za svoj projekt.

Ko izbirate knjižnico GraphQL, želite uporabiti knjižnico, bogato s funkcijami, ki podpira vse vrste in operacije GraphQL. Večina knjižnic uporablja pristop najprej shema ali koda. Pri prvem definirate shemo GraphQL, knjižnica pa generira razreševalce in predlogo kode. Pri slednjem trdo kodirate razreševalce brez definiranja sheme.

GraphQL se vse bolj uveljavlja

Od začetka GraphQL so razvijalci in podjetja izdali orodja za poenostavitev njegove uporabe. Ti lahko skrajšajo razvojni čas za manjše in srednje velike projekte.

Za več informacij si lahko ogledate odprtokodne odjemalce GraphQL, dokumentacijo GraphQL in njegove specifikacije.