Sovellusten rakentamiseen ja jakeluun on olemassa monia avoimen lähdekoodin arkkitehtonisia standardeja. REST (Representational State Transfer), SOAP (Simple Object Access Protocol), RPC (Remote Procedural Call) ja GraphQL API: t ovat suosituimpia.
RESTful API: t ovat eniten käytetty API-arkkitehtuuristandardi. Jos olet kirjoittanut monimutkaisia RESTful-sovellusliittymiä, joissa on useita päätepisteitä, olet todennäköisesti ymmärtänyt, kuinka monimutkaisia ne voivat olla. Tämä pätee erityisesti, jos päätepisteiden välillä on vain pieniä eroja.
Saatat myös kohdata ongelmia tietojen noutamisessa, koska RESTful API: t eivät ole tarpeeksi joustavia valitsemaan tiettyjä tietoja. GraphQL ratkaisee nämä RESTful API -ongelmat.
Mikä on GraphQL?
GraphQL (Graph Query Language) on kyselykieli ja ajonaika sovellusliittymien rakentamiseen. Toisin kuin REST-sovellusliittymillä, joissa on useita päätepisteitä datan kulutukseen, GraphQL-sovellusliittymillä on yksi tulopiste. Voit hakea tiettyjä tietoja kuvailemalla niitä kyselyissä.
The GraphQL-spesifikaatio määrittää kyselykielen ja kuinka GraphQL-palvelimet toimivat. Voit rakentaa ja käyttää GraphQL-sovellusliittymiä palvelinpuolen kielillä Pythonista Javascript, ja kaikki HTTP: tä tukevat kielet.
Meta rakensi GraphQL: n vuonna 2012 vaihtoehtona REST: lle HTTP: n rakentamiseen. He julkaisivat GraphQL: n avoimen lähdekoodin standardina vuonna 2015. Nykyään GraphQL-säätiö valvoo GraphQL-spesifikaatioiden kehittämistä.
GraphQL on melko uusi, vähäinen käyttöönotto, ja sen käyttöön liittyy piilokustannuksia. GraphQL-sovellusliittymien rakentaminen voi olla tarpeettoman monimutkaista, etenkin pienissä projekteissa, joissa on muutama päätepiste.
Lisäksi kaikki GraphQL-pyynnöt palauttavat lopulta tilakoodin 200 pyynnön tilasta riippumatta.
Miten GraphQL toimii?
Toisin kuin REST, joka on resurssilähtöinen, GraphQL edellyttää, että ajattelet dataa kaaviona tietojen kanssa vuorovaikutuksessa. Voit määrittää tietojen rakenteen, ja määritys tarjoaa vankan kyselyliittymän vuorovaikutukseen API: n kanssa HTTP: n kautta. Voit käyttää erilaisia ominaisuuksia riippuen GraphQL-paketti tai kirjasto päätät käyttää.
GraphQL-skeemat sisältävät objektityyppejä, jotka määrittelevät pyydettävän objektin ja sen käytettävissä olevat kentät. API-kyselyissä ja mutaatioissa GraphQL-paketti vahvistaa kyselyt ja suorittaa kyselyt määritettyjen käsittelijätoimintojen (resolverien) perusteella.
Miksi sinun pitäisi käyttää GraphQL: tä?
REST on helppokäyttöinen standardi, ja useimmissa ohjelmointikielissä on työkaluja RESTful API: iden nopeaan rakentamiseen. RESTful-sovellusliittymien rakentamisessa ja kulutuksessa on kuitenkin monia ongelmia.
Tässä on joitain REST-ongelmia, joiden vuoksi kehittäjät suosivat GraphQL: ää joissakin käyttötapauksissa.
Tehoton tiedonhaku
RESTful API: t välittävät dataa päätepisteen spesifikaatioiden perusteella. Ne eivät ole tarpeeksi joustavia noutaakseen dataa muutakin kuin päätepisteen käsittelijätoimintoon koodattu.
Oletetaan, että päätepiste palauttaa luettelon puhelutiedoista, ja sinun on määritettävä arvot tai kriteerit kentille. Siinä tapauksessa kehittäjän on luotava päätepiste ja määriteltävä liiketoimintalogiikka tietojen palauttamiseksi. Voit jäsentää arvokkaan resurssin manuaalisesti, mikä vie lopulta enemmän aikaa.
GraphQL ratkaisee tehottoman tiedonhaun ongelman, koska voit pyytää API-liittymiä palauttamaan kriteerien ja spesifikaatioiden mukaisia tietoja joustavasti.
GraphQL API: t ovat interaktiivisia; voit määrittää noudettavat tiedot helposti luettavalla syntaksilla.
{
käyttäjä (jossa: {ikä: {_eq: "89"}}) {
nimi
koulu(missä: {elossa: {_eq: true}}) {
bio
kansallisuus
}
}
}
Yllä oleva GraphQL-kysely kysyy a käyttäjä skeema merkintöille, joissa ikä kenttä on 89. Kyselyssä on upotettu kysely merkinnöille, joissa elossa kenttä arvioi totta. Se palauttaa nimi-, biografia- ja kansallisuuskentät skeemasta.
Nopea kehitys
GraphQL-sovellusliittymien rakentaminen ja käyttäminen on helpompaa kuin RESTin käyttäminen, varsinkin kun projektin koko kasvaa. Kehitysvaiheessa sinun ei tarvitse kehittää niin montaa reittiä ja käsittelijätoimintoa kuin kehität RESTful API: ita. GraphQL-sovellusliittymien käyttäminen ei ole yhtä tylsää kuin RESTful API: iden.
REST: ssä eri päätepisteet antavat pääsyn eri resursseihin, toisin kuin GraphQL, jossa on yksi päätepiste. Tämä tuottaa joustavuutta ja suorituskykyä, ja kyselyt voivat kutsua erilaisia resoluutiotoimintoja.
GraphQL Schema Definition Language
GraphQL Schema Definition Language (SDL) määrittää skeemat GraphQL-palveluille.
GraphQL SDL -syntaksi on helppo lukea ja ymmärtää. Määrität skeemasi rakenteen tiedostossa, jossa on .graphql tai .graphqls laajennus.
tyyppi ihminen {
nimi: merkkijono!
ikä: Int!
}input AddHuman {
nimi: merkkijono!
ikä: Int!
}tyyppi Mutaatio {
CreateHuman (syöttö: AddHuman!): Human!
DeleteHuman (tunnus: Int!): merkkijono!
UpdateHuman (tunnus: Int!): merkkijono!
}
tyyppi Kysely {
GetHuman (tunnus: Int!): Ihminen!
GetHumans: [Ihmisen!]!
}
Yllä oleva GraphQL-koodi on GraphQL-sovellusliittymän skeema, joka määrittää sovellusliittymän rakenteen pyyntöjä varten. Kaava määrittelee API: n CRUD-toiminnallisuuden.
Asiakaspuolella asiakas voi skeeman rakenteen ja asiakkaan tietojen tai toiminnan perusteella suorittaa kysely (GET tai DELETE LOPASSA) tai a mutaatio (PUT tai POST).
Tässä on esimerkki kyselystä Ihmisen kaava.
kysely ihminen {
nimi
ikä
}
Yllä oleva kysely palauttaisi ihmisen skeeman nimi ja ikä kenttätiedot.
GraphQL-mutaatioilla on melko erilainen syntaksi kuin kyselyillä. Tässä on esimerkki mutaatiooperaatiosta Ihmisen kaava.
mutaatio {
CreateHuman (syöttö:{ nimi:"mies", ikä: 1000000000000000,}) {
nimi
ikä
}
}
Mutaatiokoodi syötetään nimi ja ikä kentät asiakkaalle ja palauttaa tiedot kentistä.
Tarvitset tietovaraston pysyäksesi, kun rakennat GraphQL-sovellusliittymääsi. Kuten REST ja useimmat HTTP-pohjaiset verkkoarkkitehtuurit, GraphQL on tilaton, ja voit käyttää mitä tahansa tietovarastoa tai tietokantaa sovelluksellesi.
GraphQL API: n rakentaminen
GraphQL on spesifikaatio, ja voit rakentaa GraphQL: n suosituimmille palvelinpuolen kielille. Sinun on löydettävä kirjasto, jossa on projektiisi tarvitsemasi ominaisuudet.
Kun valitset GraphQL-kirjaston, haluat käyttää monipuolista kirjastoa, joka tukee kaikkia GraphQL-tyyppejä ja -toimintoja. Useimmissa kirjastoissa on joko skeema ensin tai koodi ensin. Edellisessä määrität GraphQL-skeeman, ja kirjasto luo ratkaisijat ja laajennuskoodin. Jälkimmäisessä tapauksessa ratkaiset koodataan ilman kaavion määrittämistä.
GraphQL on saamassa hyväksyntää
GraphQL: n perustamisen jälkeen kehittäjät ja yritykset ovat julkaisseet työkaluja yksinkertaistaakseen sen käyttöä. Nämä voivat lyhentää pienten ja keskisuurten projektien kehitysaikaa.
Voit tutustua avoimen lähdekoodin GraphQL-asiakkaisiin, GraphQL-dokumentaatioon ja sen spesifikaatioihin saadaksesi lisätietoja.