Yra daug atvirojo kodo architektūrinių standartų, skirtų kurti ir platinti programas. Populiariausios yra REST (representational State Transfer), SOAP (Simple Object Access Protocol), RPC (Remote Procedural Call) ir GraphQL API.
RESTful API yra dažniausiai naudojamas API architektūros standartas. Jei parašėte sudėtingas RESTful API su daugybe galinių taškų, tikriausiai supratote, kokios sudėtingos jos gali būti. Tai ypač aktualu, jei tarp galutinių taškų yra tik nedideli skirtumai.
Taip pat galite susidurti su duomenų gavimo problemomis, nes RESTful API nėra pakankamai lanksti, kad būtų galima pasirinkti konkrečius duomenis. GraphQL išsprendžia šias RESTful API problemas.
Kas yra GraphQL?
GraphQL (Graph Query Language) yra užklausų kalba ir vykdymo laikas, skirtas kurti API. Skirtingai nuo REST API su daugybe duomenų vartojimo galinių taškų, GraphQL API turi vieną įėjimo tašką. Galite gauti konkrečius duomenis apibūdindami juos užklausose.
The GraphQL specifikacija apibrėžia užklausos kalbą ir kaip veikia GraphQL serveriai. Galite kurti ir naudoti GraphQL API serverio kalbomis nuo Python iki
Javascript, ir bet kokia kalba, kuri palaiko HTTP.„Meta“ sukūrė „GraphQL“ 2012 m., kaip alternatyvą REST, kuriant HTTP. Jie išleido GraphQL kaip atvirojo kodo standartą 2015 m. Šiandien GraphQL fondas prižiūri GraphQL specifikacijos kūrimą.
„GraphQL“ yra gana naujas, mažai pritaikytas, o naudojant jį yra paslėptų išlaidų. GraphQL API kūrimas gali būti be reikalo sudėtingas, ypač mažiems projektams su keliais galutiniais taškais.
Be to, visos GraphQL užklausos galiausiai grąžina būsenos kodą 200, neatsižvelgiant į užklausos būseną.
Kaip veikia GraphQL?
Skirtingai nei REST, kuri yra orientuota į išteklius, „GraphQL“ reikalauja, kad galėtumėte galvoti apie duomenis kaip apie grafiką, kad galėtumėte sąveikauti su duomenimis. Galite nurodyti duomenų struktūrą, o specifikacijoje pateikiama patikima užklausos sąsaja, skirta sąveikai su API per HTTP. Priklausomai nuo to, galėsite naudoti įvairias funkcijas GraphQL paketas arba biblioteka pasirenkate naudoti.
GraphQL schemos apima objektų tipus, kurie apibrėžia prašomą objektą ir jo galimus laukus. API užklausose ir mutacijose GraphQL paketas patvirtina užklausas ir vykdo užklausas pagal nurodytas tvarkyklės funkcijas (sprendėjus).
Kodėl turėtumėte naudoti GraphQL?
REST yra paprastas naudoti standartas, o dauguma programavimo kalbų turi įrankius, leidžiančius greitai kurti RESTful API. Tačiau yra daug problemų kuriant ir naudojant RESTful API.
Štai keletas problemų, susijusių su REST, dėl kurių kūrėjai kai kuriais atvejais teikia pirmenybę GraphQL.
Neefektyvus duomenų gavimas
RESTful API perduoda duomenis pagal galutinio taško specifikaciją. Jie nėra pakankamai lankstūs, kad gautų duomenis, kurie nėra užkoduoti galutinio taško tvarkyklės funkcijoje.
Tarkime, kad galutinis taškas grąžina skambučio duomenų sąrašą ir jums reikia nurodyti laukų reikšmes arba kriterijus. Tokiu atveju kūrėjas turi sukurti galutinį tašką ir apibrėžti verslo logiką, kad grąžintų duomenis. Vertingus išteklius galite išanalizuoti rankiniu būdu, o tai galiausiai užtruks daugiau laiko.
„GraphQL“ išsprendžia neefektyvaus duomenų gavimo problemą, nes galite pateikti API užklausą, kad pateiktumėte duomenis pagal kriterijus ir specifikacijas lanksčiai.
GraphQL API yra interaktyvios; galite nurodyti duomenis, kuriuos reikia gauti, naudodami paprastą, skaitomą sintaksę.
{
naudotojas (kur: {amžius: {_eq: "89"}}) {
vardas
mokykla(kur: {gyvas: {_eq: true}}) {
biografija
Tautybė
}
}
}
Aukščiau pateikta GraphQL užklausa a Vartotojas schema įrašams, kuriuose amžiaus laukas yra 89. Užklausoje yra įterpta užklausa įrašams, kuriuose gyvas laukas vertina tiesa. Jis grąžina vardo, biografijos ir tautybės laukus iš schemos.
Greitas vystymasis
Sukurti ir naudoti GraphQL API yra lengviau nei naudoti REST, ypač didėjant projekto dydžiui. Kūrimo etape jums nereikia kurti tiek daug maršrutų ir tvarkyklės funkcijų, kaip kurdami RESTful API. GraphQL API naudojimas nėra toks varginantis kaip RESTful API.
REST programoje skirtingi galiniai taškai suteikia prieigą prie skirtingų išteklių, skirtingai nei GraphQL, kur yra vienas galutinis taškas. Tai suteikia lankstumo ir našumo, o užklausos gali iškviesti skirtingas rezoliucijos funkcijas.
GraphQL schemos apibrėžimo kalba
GraphQL schemos apibrėžimo kalba (SDL) nurodo GraphQL paslaugų schemas.
GraphQL SDL sintaksę lengva skaityti ir suprasti. Savo schemos struktūrą nurodysite faile su .graphql arba .graphqls pratęsimas.
tipo Žmogus {
vardas: Styga!
amžius: Tarpt.
}input AddHuman {
vardas: Styga!
amžius: Tarpt.
}tipo Mutacija {
CreateHuman (įvestis: AddHuman!): Žmogus!
DeleteHuman (id: Int!): Styga!
UpdateHuman (id: Int!): Styga!
}
tipo Užklausa {
GetHuman (id: Int!): Žmogus!
GetHumans: [Žmogus!]!
}
Aukščiau pateiktas GraphQL kodas yra GraphQL API schema, apibrėžianti užklausų API struktūrą. Schema apibrėžia API CRUD funkciją.
Kliento pusėje, remdamasis schemos struktūra ir kliento duomenimis ar operacija, klientas gali atlikti užklausą (Gauti arba IŠTRINTI REST) arba a mutacija (PUT arba POST).
Štai užklausos pavyzdys Žmogus schema.
užklausa žmogus {
vardas
amžiaus
}
Aukščiau pateikta užklausa grąžintų žmogaus schemą vardas ir amžiaus lauko duomenis.
GraphQL mutacijos turi gana skirtingą sintaksę, priešingai nei užklausos. Štai mutacijos operacijos pavyzdys Žmogus schema.
mutacija {
CreateHuman (įvestis:{ pavadinimas:"vyras", amžius: 1000000000000000,}) {
vardas
amžiaus
}
}
Įvedamas mutacijos kodas vardas ir amžiaus laukus klientui ir grąžina duomenis iš laukų.
Kurdami „GraphQL“ API, jums reikės duomenų saugyklos. Kaip ir REST ir dauguma HTTP pagrindu sukurtų žiniatinklio architektūrų, „GraphQL“ yra be būsenos, todėl savo programai galite naudoti bet kurią duomenų saugyklą ar duomenų bazę.
GraphQL API kūrimas
GraphQL yra specifikacija, ir jūs galite kurti GraphQL populiariausiomis serverio kalbomis. Turėsite rasti biblioteką su funkcijomis, kurių jums reikia jūsų projektui.
Renkantis GraphQL biblioteką, norite naudoti daug funkcijų turinčią biblioteką, kuri palaiko visus GraphQL tipus ir operacijas. Dauguma bibliotekų laikosi arba pagal schemą, arba į kodą. Pirmuoju atveju jūs apibrėžiate GraphQL schemą, o biblioteka generuoja sprendiklius ir pagrindinį kodą. Pastarųjų atveju jūs užkoduojate raiškius neapibrėždami schemos.
„GraphQL“ priimamas
Nuo GraphQL įkūrimo kūrėjai ir įmonės išleido įrankius, kad supaprastintų jos naudojimą. Tai gali sutrumpinti mažesnių ir vidutinių projektų kūrimo laiką.
Norėdami sužinoti daugiau, galite peržiūrėti atvirojo kodo GraphQL klientus, GraphQL dokumentaciją ir jos specifikacijas.