Rakenduste ehitamiseks ja levitamiseks on olemas palju avatud lähtekoodiga arhitektuuristandardeid. Kõige populaarsemad on REST (Representational State Transfer), SOAP (Simple Object Access Protocol), RPC (Remote Procedural Call) ja GraphQL API-d.
RESTful API-d on enimkasutatav API arhitektuuristandard. Kui olete kirjutanud keerulisi RESTful API-sid paljude lõpp-punktidega, olete tõenäoliselt aru saanud, kui keerulised need võivad olla. See kehtib eriti siis, kui lõpp-punktide vahel on ainult väikesed erinevused.
Samuti võib andmete toomisel tekkida probleeme, kuna RESTful API-d pole konkreetsete andmete valimiseks piisavalt paindlikud. GraphQL lahendab need RESTful API-de probleemid.
Mis on GraphQL?
GraphQL (Graph Query Language) on API-de loomiseks mõeldud päringukeel ja käitusaeg. Erinevalt REST API-dest, millel on palju andmetarbimise lõpp-punkte, on GraphQL API-del üks sisenemispunkt. Saate hankida konkreetseid andmeid, kirjeldades neid päringutes.
The GraphQL spetsifikatsioon määrab päringukeele ja selle, kuidas GraphQL-i serverid töötavad. Saate luua ja kasutada GraphQL API-sid serveripoolsetes keeltes Pythonist kuni
Javascriptja mis tahes keel, mis toetab HTTP-d.Meta ehitas GraphQL-i 2012. aastal alternatiivina HTTP-le ehitamiseks REST-ile. Nad andsid 2015. aastal välja GraphQL-i avatud lähtekoodiga standardina. Täna jälgib GraphQL-i sihtasutus GraphQL-i spetsifikatsiooni väljatöötamist.
GraphQL on üsna uus, vähese kasutuselevõtuga ja selle kasutamisega kaasnevad varjatud kulud. GraphQL API-de loomine võib olla tarbetult keeruline, eriti väikeste projektide puhul, millel on vähe lõpp-punkte.
Samuti tagastavad kõik GraphQL-i päringud lõpuks olekukoodi 200, sõltumata päringu olekust.
Kuidas GraphQL töötab?
Erinevalt REST, mis on ressurssidele orienteeritudGraphQL nõuab, et mõtleksite andmetele kui graafikule, et andmetega suhelda. Saate määrata andmete struktuuri ja spetsifikatsioon pakub tugevat päringuliidest API-ga suhtlemiseks HTTP kaudu. Olenevalt sellest saate kasutada erinevaid funktsioone GraphQL pakett või teek otsustate kasutada.
GraphQL-i skeemid sisaldavad objektitüüpe, mis määratlevad taotletava objekti ja selle saadaolevad väljad. API päringute ja mutatsioonide puhul valideerib GraphQL pakett päringud ja täidab päringud määratud käitleja funktsioonide (lahendajate) alusel.
Miks peaksite kasutama GraphQL-i?
REST on lihtsalt kasutatav standard ja enamikul programmeerimiskeeltel on tööriistad RESTful API-de kiireks loomiseks. RESTful API-de loomisel ja tarbimisel on aga palju probleeme.
Siin on mõned REST-iga seotud probleemid, mis sunnivad arendajaid mõnel juhul eelistama GraphQL-i.
Ebaefektiivne andmete toomine
RESTful API-d edastavad andmeid lõpp-punkti spetsifikatsiooni alusel. Need ei ole piisavalt paindlikud, et hankida andmeid kaugemale sellest, mis on lõpp-punkti töötleja funktsioonis kõvasti kodeeritud.
Oletame, et lõpp-punkt tagastab kõne andmete loendi ja peate määrama väljade väärtused või kriteeriumid. Sel juhul peab arendaja looma lõpp-punkti ja määratlema äriloogika andmete tagastamiseks. Saate väärtuslikku ressurssi käsitsi sõeluda, mis võtab lõpuks rohkem aega.
GraphQL lahendab ebatõhusa andmete toomise probleemi, kuna saate taotleda API-sid, et tagastada andmeid paindlikult kriteeriumide ja spetsifikatsioonide alusel.
GraphQL API-d on interaktiivsed; saate määrata andmed, mida peate hankima lihtsa ja loetava süntaksiga.
{
kasutaja (kus: {vanus: {_eq: "89"}}) {
nimi
kool(kus: {elus: {_eq: true}}) {
bio
rahvus
}
}
}
Ülaltoodud GraphQL päring päringuid a kasutaja skeem kirjete jaoks, kus vanus väli on 89. Päringul on manustatud päring kirjete jaoks, kus elus väli hindab tõsi. See tagastab skeemi nime, eluloo ja rahvuse väljad.
Kiire areng
GraphQL API-de loomine ja tarbimine on lihtsam kui REST-i kasutamine, eriti kui projekti maht suureneb. Arendusfaasis ei pea te välja töötama nii palju marsruute ja töötleja funktsioone kui RESTful API-de arendamisel. GraphQL API-de tarbimine ei ole nii tüütu kui RESTful API-de kasutamine.
RESTis annavad erinevad lõpp-punktid juurdepääsu erinevatele ressurssidele, erinevalt GraphQL-ist, kus on üks lõpp-punkt. See annab paindlikkuse ja jõudluse ning päringud võivad kutsuda erinevaid lahendaja funktsioone.
GraphQL-i skeemi määratluskeel
GraphQL Schema Definition Language (SDL) määrab GraphQL-i teenuste skeemid.
GraphQL SDL süntaksit on lihtne lugeda ja mõista. Saate määrata oma skeemi struktuuri failis, millel on .graphql või .graphqls pikendamine.
tüüp Inimene {
nimi: String!
vanus: Int!
}sisend AddHuman {
nimi: String!
vanus: Int!
}tüüp Mutatsioon {
CreateHuman (sisend: AddHuman!): Inimene!
DeleteHuman (id: Int!): String!
UpdateHuman (id: Int!): String!
}
tüüp Päring {
GetHuman (id: Int!): Inimene!
GetHumans: [Inimene!]!
}
Ülaltoodud GraphQL-kood on GraphQL API skeem, mis määratleb taotluste API struktuuri. Skeem määratleb API jaoks CRUD-i funktsioonid.
Kliendi poolel saab klient skeemi struktuuri ja kliendi andmete või toimingu põhjal teostada päring (GET või DELETE in REST) või a mutatsioon (PUT või POST).
Siin on näide päringu esitamisest Inimene skeem.
päring Inimene {
nimi
vanus
}
Ülaltoodud päring tagastaks inimese skeemi nimi ja vanus välja andmed.
GraphQL-i mutatsioonidel on erinevalt päringutest üsna erinev süntaks. Siin on näide mutatsioonioperatsioonist Inimene skeem.
mutatsioon {
CreateHuman (sisend:{ nimi:"mees", vanus: 1000000000000000,}) {
nimi
vanus
}
}
Mutatsioonikood sisestatakse nimi ja vanus väljad kliendile ja tagastab väljadelt saadud andmed.
GraphQL API loomisel vajate püsivuse tagamiseks andmesalvesti. Nagu REST ja enamik HTTP-põhiseid veebiarhitektuure, on ka GraphQL olekuta ja saate oma rakenduse jaoks kasutada mis tahes andmesalvet või andmebaasi.
GraphQL API loomine
GraphQL on spetsifikatsioon ja saate luua GraphQL-i kõige populaarsemates serveripoolsetes keeltes. Peate leidma oma projekti jaoks vajalike funktsioonidega raamatukogu.
GraphQL-i teeki valides soovite kasutada funktsioonirikast teeki, mis toetab kõiki GraphQL-i tüüpe ja toiminguid. Enamik teeke kasutab kas skeemipõhise või koodipõhise lähenemisviisi. Esimeses defineerite GraphQL-i skeemi ja teek genereerib lahendajad ja standardkoodi. Viimase jaoks kodeerite lahendajad kõvasti ilma skeemi määratlemata.
GraphQL võetakse kasutusele
Alates GraphQL-i loomisest on arendajad ja ettevõtted välja andnud tööriistu selle kasutamise lihtsustamiseks. Need võivad vähendada väiksemate ja keskmiste projektide arendusaega.
Lisateabe saamiseks võite vaadata avatud lähtekoodiga GraphQL-i kliente, GraphQL-i dokumentatsiooni ja selle spetsifikatsioone.