GraphQL vs. REST API
Tutustu GraphQL:n ja REST API:den keskeisiin eroihin, niiden etuihin ja siihen, milloin käyttää kumpaakin optimaaliseen verkkokehitykseen.
Oletko koskaan työskennellyt verkkosovelluksen kehitysprojektin parissa? Jos olet, olet saattanut jo kohdata termin "GraphQL". Mutta mitä se tarkalleen ottaen tarkoittaa? Käytetäänkö sitä palvelin- vai asiakaspuolen kokoonpanoissa? Lisäksi, milloin GraphQL-integraatio on suositeltavampaa kuin muut vaihtoehdot? Tässä artikkelissa johdatamme sinut näiden kysymysten läpi.
Kommunikaatiokanavana tietojen siirtämiseen ohjelmistokomponenttien välillä internetissä API:it ovat korvaamattomia nykyaikaisissa verkkopalveluarkkitehtuureissa, toimien kuin happi. API-teknologiat, kuten SOAP (verkkopalvelujen viestintäprotokolla), REST (arkkitehtoninen tyyli) ja GraphQL (kyselykieli ja työkalu), helpottavat ohjelmistokehitystä tukemalla integraatiota ja tietojen vaihtoa eri palveluiden välillä, tehden kehityksestä mukavampaa ja joustavampaa.
Huolimatta lukuisista API-tyypeistä, viime vuosien keskustelut ovat pääasiassa keskittyneet kahteen pääparadigmaan: REST (esittävien tilasiirtojen siirto) ja GraphQL. Molemmat tarjoavat useita etuja ja niitä käytetään maailmanlaajuisesti verkkoprojekteissa. Ne kuitenkin eroavat merkittävästi siinä, miten ne hallitsevat tietoliikennettä.
Mikä on REST API?
REST on jäsennelty arkkitehtoninen tyyli, joka kehitettiin 2000-luvun alussa rakentamaan verkkoympäristöjen kautta hypermediasovelluksia, suunniteltu omaksumaan tilattoman, välimuistitettavan viestintäprotokollan asiakkaiden ja palvelimien välillä. REST API (tunnetaan myös nimellä RESTful API) on REST-arkkitehtuurin ohjaava voima.
REST API käyttää yhdenmukaisia resurssitunnisteita (URI) resurssien osoittamiseen. REST API toimii käyttämällä erilaisia päätepisteitä, joilla suoritetaan CRUD (luominen, lukeminen, päivittäminen ja poistaminen) -toimintoja verkkoresursseille. Se perustuu ennalta määriteltyihin tiedostomuotoihin (tunnetaan myös nimellä mediatyypit tai MIME-tyypit) määrittääkseen muodon ja koon niille resursseille, joita ne tarjoavat asiakkailleen. Yleisimmät muodot ovat JSON ja XML (joskus HTML tai tavallinen teksti).
Kun asiakas pyytää resurssia, palvelin käsittelee kyselyn ja palauttaa kaikki kyseiseen resurssiin liittyvät tiedot. Vastaus sisältää HTTP-vastauskoodeja, kuten "200 OK" (onnistuneelle REST-pyynnölle) ja "404 Not Found" (olemattomalle resurssille).
Miten REST API toimii?
REST API:t luottavat ennalta määriteltyihin päätepisteisiin, jotka altistavat resursseja HTTP:n kautta. Kukin päätepiste edustaa resurssia, kuten käyttäjiä tai viestejä, ja sen tunnistaa yksilöllinen URL-osoite. REST-toiminnot liittyvät tavallisiin HTTP-menetelmiin, kuten GET, POST, PUT ja DELETE, jotka vastaavat tietojen hakua, luomista, päivittämistä ja poistamista.
Esimerkiksi pyyntö GET /users
hakee täydellisen luettelon käyttäjistä, kun taas GET /users/123
hakee tietyn käyttäjän tiedot, jotka on tunnistettu heidän ID:llään. Jos sinun on myös päästä käsiksi liittyviin tietoihin, kuten käyttäjän organisaatioihin ja organisaation rooleihin, sinun on tehtävä lisäpuheluita GET /users/123/organizations
.
REST noudattaa resurssikeskeistä lähestymistapaa, keskittyen diskreettien resurssien käyttöön ja manipulointiin.
Mikä on GraphQL?
GraphQL on sekä API-tyyppi (tai kyselykieli) että ajonaikainen moottori, joka vastaa näihin kyselyihin. Se tarjoaa yksinkertaistetun API:n ja sopii erityisen hyvin mobiilisovelluksiin ja monimutkaisten arkkitehtuurien toteutukseen, jotka vaativat tietojen tarkkoja osajoukkoja.
GraphQL:n avulla kehittäjät voivat määrittää, mitä tietoja he haluavat hakea API:lta. Se mahdollistaa myös tietojen haun tarpeen mukaan sen sijaan, että haettaisiin kaikki kerralla, soveltaa muutoksia välittömästi ja integroi kolmannen osapuolen tietolähteitä sovellukseen.
Sovellukset voivat käyttää GraphQL-kyselyitä kutsuakseen GraphQL-palveluita. Nämä kyselyt palauttavat tarkat tietoelementit, joita asiakas on pyytänyt. Tämä säästää useita API-kutsuja, verkon kaistanleveyttä ja jälkikäsittelyä. Se on erittäin tehokas ratkaisu tietokeskeisille API:ille, jotka sijaitsevat lähellä kuluttajalaitteita, kuten tabletteja ja matkapuhelimia.
Miten GraphQL toimii?
GraphQL ottaa toisaalta kyselypohjaisen lähestymistavan. Sen sijaan, että siinä olisi ennalta määriteltyjä päätepisteitä, GraphQL paljastaa yhden päätepisteen, joka hyväksyy jäsenneltyjä kyselyitä. Asiakkaat määrittävät tarkasti, mitä tietoja he tarvitsevat käyttämällä kyselykieltä.
Siksi täydellisen GraphQL-toteutuksen on sisällettävä kaksi osaa: skeemat ja ratkaisijat.
GraphQL-skeema
Skeemat määrittelevät tietotyypit ja niiden kentät, jotka voidaan hakea GraphQL-kyselyillä:
Oletetaan esimerkiksi, että sinulla on seuraava skeema:
Asiakas voi kysyä käyttäjän nimeä, sähköpostia, organisaatioita ja rooleja seuraavalla kyselyllä:
Tämä kysely ei ainoastaan hae vain pyydettyjä kenttiä (sähköposti ja organisaatiot) vaan myös hakee liittyvät tiedot (roolit) yhdellä pyynnöllä.
GraphQL-ratkaisija
GraphQL-ratkaisija on avainkomponentti GraphQL-palvelimessa, joka päättää, kuinka hakea tai laskea asiakkaan GraphQL-kyselyllä pyytämät tiedot. Kun asiakas lähettää kyselyn, jokainen kyselyn kenttä yhdistetään ratkaisijaan, joka sisältää logiikan kentän tietojen hakemiseen tai laskemiseen.
Yllä olevassa esimerkissä skeema-ratkaisijat näyttäisivät tältä:
On olemassa kahden tyyppisiä ratkaisijoita: juuri-ratkaisijat ja kenttä-ratkaisijat.
- Juuri-ratkaisijat: Käsittelevät skeeman ylempiä kenttiä, kuten Query, Mutation ja Subscription.
- Kenttä-ratkaisijat: Käsittelevät tyyppien sisäisiä kenttiä, usein sisäkkäisille kyselyille. Jos kentälle ei anneta erityistä ratkaisijaa, GraphQL käyttää oletusratkaisijaa, joka palauttaa arvon vanhemmasta objektista vastaavalla kentänimellä.
GraphQL-toiminnot
GraphQL tukee kolmen tyyppisiä toimintoja: kyselyitä, muutoksia ja tilauksia.
Query
: Käytetään tietojen LUKEMISEEN.Mutation
: Käytetään tietojen KIRJOITTAMISEEN, mukaan lukien operaatiot lisätä, muokata ja poistaa tietoja.Subscription
: Käytetään pyyntöön pysyvästä yhteydestä tietojen saamiseen, jolloin asiakas voi ilmoittaa, mitä tapahtumatyyppejä se on kiinnostunut ja mitä tietoja pitäisi palauttaa.
Erot GraphQL:n ja REST API:den välillä
GraphQL ja REST API:t ovat työkaluja tietojen vaihtamiseen erilaisten verkkopalveluiden välillä, mutta niiden erilaiset lähestymistavat ongelmien ratkaisemiseen tuovat esille keskeisiä eroja:
Tietojen hakeminen
REST API:n käyttö usein johtaa tietojen ylilataamiseen tai alilataamiseen, koska päätepisteet palauttavat kiinteitä vastauksia. GraphQL ratkaisee tämän antamalla asiakkaiden pyytää tarkalleen, mitä he tarvitsevat, mikä vähentää tarpeetonta tietoliikennettä. Tämä tekee GraphQL:sta ihanteellisen sovelluksille, joilla on monimutkaisia tietotarpeita, kuten mobiili- tai matalakaistasovelluksille.
Kuvittele edellä oleva esimerkki, jossa sinun on haettava käyttäjän staattisia tietoja, organisaatioita ja käyttäjälle annettuja organisaatiorooleja. REST API:n avulla sinun pitäisi tehdä useita pyyntöjä eri päätepisteille saadaksesi kaikki tiedot. GraphQL:n avulla voit kuitenkin hakea kaikki tiedot yhdellä pyynnöllä.
Joustavuus
REST:n päätepisteisiin perustuva rakenne on suoraviivainen ja toimii hyvin yksinkertaisten sovellusten kanssa, joilla on tavanomaiset CRUD-toiminnot. Tämä johtuu siitä, että REST API:t on suunniteltu olemaan resurssikeskeisiä, ja jokainen päätepiste edustaa tiettyä resurssia. Tämän lähestymistavan merkittävä rajoitus on, että se ei salli nopeaa iterointia ja asiakkaan vaatimusten muutoksia. Jokaisen asiakaspuolen muutoksen myötä palvelinta on päivitettävä vastaamaan uusia vaatimuksia joko lisäämällä uusia päätepisteitä tai päivittämällä olemassa olevia. Tämä johtaa usein moniin toistuviin päätepisteisiin ja monimutkaiseen API-versioiden hallintaan.
Toisaalta GraphQL on joustavampi ja antaa asiakkaiden pyytää vain tarvitsemansa tiedot. Tämä joustavuus on erityisen hyödyllinen, kun asiakkaan vaatimukset muuttuvat usein, koska se poistaa tarpeen muuttaa palvelinpuolen API:n toteutusta. Asiakkaat voivat pyytää uusia kenttiä tai sisäkkäisiä tietoja vaatimatta muutoksia palvelimeen.
Välimuisti
Vaikka GraphQL on tehokkaampi ja joustavampi tietojen haun kannalta, sillä on myös joitakin haittoja. Yksi tärkeimmistä ongelmista on välimuisti.
REST API:lla on kypsä ekosysteemi. Sen tilattoman ja standardoidun luonteen vuoksi on helppo välimuistittaa vastauksia sekä palvelin- että asiakastasoilla. Tämä voi merkittävästi vähentää palvelimelle tehtävien pyyntöjen määrää ja parantaa suorituskykyä.
GraphQL:ään ei kuitenkaan ole sovellettavissa monia käytettävissä olevia REST API:n välimuistiteknologioita sen joustavuuden vuoksi. On tarpeen käsitellä välimuistia asiakaspuolella, perustuen erityisiin tapauksiin, mikä lisää asiakaskehityksen työmäärää.
Plussat ja miinukset
Nimi | Plussat | Miinukset |
---|---|---|
REST API | - Yksinkertainen ja laajalti omaksuttu, laajoilla työkaluilla ja yhteisön tuella. - Selkeä rakenne, joka tekee siitä helpon ymmärtää aloittelijoille. - Sisäänrakennettu tuki välimuistitukselle HTTP-standardien avulla. | - Tietojen ylilataaminen tai alilataaminen - Muutokset vaativat usein uusien versioiden luomista, mikä lisää ylläpitokustannuksia. |
GraphQL | - Tarkka tietojen haku parantaa suorituskykyä ja tehokkuutta. - Skeeman kehitys vähentää versionhallinnan tarvetta. - Voimakkaat työkalut, kuten introspektio ja tyypintarkastus, parantavat kehityskokemusta. | - Monimutkaisempi asennus ja oppimiskäyrä verrattuna REST:iin. - Vaatii mukautettuja välimuistiratkaisuja, koska se ei luota HTTP-välimuistiseen. - Yhden päätepisteen suunnittelu voi vaikeuttaa virheenkorjausta ja seurantaa. |
Johtopäätökset
Vaikka GraphQL on saavuttanut vahvaa vauhtia tulokkaana viime vuosina, REST API:lla on edelleen merkittävä asema pitkän aikaa sen atomi- ja tarkkuussuunnittelunsa ansiosta.
REST ja GraphQL palvelevat erilaisia tarpeita ja loistavat eri tilanteissa. REST:n yksinkertaisuus tekee siitä täydellisen valinnan suoraviivaisille sovelluksille ja mikropalveluille. GraphQL erottuu tilanteissa, joissa vaaditaan joustavaa ja tehokasta tietojen hakua, erityisesti sovelluksissa, joissa on erilaisia asiakkaita tai monimutkaisia suhteita tietojen välillä. Valinta näiden kahden välillä riippuu projektisi erityisvaatimuksista, tiimisi asiantuntemuksesta ja pitkän ajan skaalautuvuustarpeista.