Korvaako GraphQL REST API:t?

Korvaako GraphQL REST API:t?

GraphQL on nousemassa uusissa ratkaisuissa vaihtoehdoiksi REST-palveluille.

Hyvä REST API design lähtee siitä, että pyritään tekemään Web Front-End -kehittäjän elämä mahdollisimman helpoksi. Tämä vaatii sitä, että ymmärretään käyttötapaukset, miten ja mihin apia tullaan hyödyntämään. GraphQL antaa nyt uuden tavan julkaista tietovarastoja client-kehittäjälle. GraphQL on query-kieli HTTP:n yli, sekä datan hakemiseen, että muokkaamiseksi. Se mahdollistaa, että API:n käyttäjä voi määritellä mitä dataa haluaa ja missä muodossa. Clientiin ei tarvitse ladata tarpeetonta dataa ja data saadaan siinä muodossa, että sitä on helppo selainsovelluskehityksessä käsitellä. Eikä palvelun tekijän tarvitse niin hyvin tuntea client-kehittäjän eri käyttötapauksia. Lisäksi etuina on, että kun mahdollisesti perinteissä REST API -ratkaisussa jouduttaisiin tekemään useampia pyyntöjä useaan API endpointtiin, GraphQL:llä riittääkin yksi query.

GraphQL on Facebookin kehittämä open source querykieli HTTP: yli. REST API:t keskittyvät URI:n voimaan kuinka sillä voidaan indentifioida resurssi ja HTTP verbeillä (GET, POST, PUT, DELETE..), mitä resurssille halutaan tehdä. GraphQL taas on kuin “SQL-kieli HTTP:n yli”. Queryllä määritellään, mitä halutaan hakea, lisätä, päivittää… Varsinaisesti GraphQL ei ota kantaa varsinaiseen siirtoprotokollaan.

Kun lähdetään toteuttamaan sovellukseen GraphQL-ratkaisua ensimmäiseksi tietovarasto(t) ja mahdolliset samaan ratkaisuun integroitavat muut dataa tarjoavat palvelut tulee julkaista GraphQL-palveluna ulos. Valmiita GraphQL Server -ratkaisuja on mm. Apollo Server tai esimerkiksi AWS AppSync.

Client-kehitystä varten suosittu Apollo tarjoaa kirjastot niin Reactia kuten myös esimerkiksi Angularia varten.

GraphQL-kieli tarjoaa datan hakemisen lisäksi, myös ratkaisun kaikkiin CRUD-operaatiohin. Näistä käytetään termiä mutations. Lisäksi hyvin kiinnostava tekniikka GraphQL:ssä on subscriptions. Siinä client voi tilata queryllä dataa palvelimelta ja palvelin lähettää dataa sitä mukaa kun sitä tulee. Tekniikka hyödyntää Web Socketia. Tällä client-sovellukseen saada tuotua lähes reaaliaikaisesti data palvelimelta datan muuttuessa.

Kiinnostus GraphQL:ää vasten on ollut selkeästi nousemassa. Npmjs.org julkaisi juuri käyttäjiltään tekemän kyselyn tuloksia JavaScript 2019 trendeistä. 23%:ia npm:n käyttäjistä oli käyttänyt GraphQL:ää joskus ja sen päälle jopa 49%:ia kehittäjistä harkitsee käyttävänsä sitä tulevaisuudessa.

Aihetta käsitelllään lisää Sovelton kurssilla GraphQL.