GraphQL vaihtoehtona REST:lle
Sokka, Jarmo (2019)
Sokka, Jarmo
2019
All rights reserved. This publication is copyrighted. You may download, display and print it for Your own personal use. Commercial use is prohibited.
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-2019121727118
https://urn.fi/URN:NBN:fi:amk-2019121727118
Tiivistelmä
Tämän opinnäytetyön tarkoituksena oli selvittää GraphQL-kyselykielen yleinen toimintaperiaate ja toteuttaa esimerkkisovellus, joka koostuu GraphQL-rajapinnasta ja sitä hyödyntävästä asiakasohjelmasta. Työn toimeksiantajana oli Profit Software Oy, joka tarjoaa muun muassa järjestelmäratkaisuja ja konsultointipalveluita finanssialan yrityksille. Opinnäytetyön tavoitteena oli, että toimeksiantaja saisi sen perusteella yleiskuvan GraphQL:n toiminnasta ja pystyisi hyödyntämään sitä pohtiessaan erilaisia vaihtoehtoja API-rajapintojen toteuttamiseksi.
Työn teoriaosuudessa käytiin kyselyesimerkein läpi GraphQL:n toimintaperiaate ja ominaisuudet sekä tuotiin esiin GraphQL:n vahvuuksia perinteiseen REST-arkkitehtuurin mukaiseen API-rajapintaan verrattuna. Vahvuuksien, kuten datakeskeisen lähestymistavan ja vahvan tyypityksen ohella, pyrittiin kuitenkin myös käymään läpi GraphQL:n käyttöön liittyviä haasteita ja löytämään niihin ratkaisuja.
Käytäntöosuudessa kuvattu esimerkkisovellus toteutettiin sekä toimeksiantajalle että opinnäytetyön tekijälle ennestään tutuilla teknologioilla. GraphQL-rajapinta toteutettiin hyödyntäen ASP.NET Core -ohjelmistokehystä ja GraphQL .NET -kirjastoa. Asiakasohjelma on vastaavasti React-sovellus, jonka toteutuksessa hyödynnettiin valmista Create React App -pohjaa. Sovelluksen GraphQL:n käyttö toteutettiin React Relay -ohjelmistokehyksen avulla.
Opinnäytetyön lopputuloksena todettiin, että GraphQL tarjoaa mielenkiintoisen datakeskeisen lähestymistavan API-rajapintojen ja niitä hyödyntävien asiakassovellusten kehitykseen. Melko nuorena teknologiana se ei kuitenkaan ole vielä saavuttanut REST-arkkitehtuurin kaltaista laajaa suosiota. Sillä on kuitenkin ehdottomasti edellytykset kasvattaa suosiotaan. Opinnäytetyön mahdollisiksi jatkokehityskohteiksi ehdotettiin muun muassa perehtymistä myös vaihtoehtoisiin GraphQL-rajapintojen ja niitä hyödyntävien asiakasohjelmien kehitykseen tarkoitettuihin kirjastoi-hin ja ohjelmistokehyksiin. The purpose of this thesis was to study core concepts of GraphQL query language. The thesis also described an implementation of a GraphQL server and a client application using the server. The assigner of the thesis was Profit Software Oy, which is a software and consultancy services vendor focusing on financial sector. The aim of the thesis was that the assigner could get an overview of GraphQL and make use of the thesis when considering different alternatives to build modern APIs.
The theoretical part of the thesis focused on describing the principal of GraphQL. With sample queries GraphQL was compared to a traditional REST API. The comparison demonstrated many obvious strengths of GraphQL but also pointed out some challenges that may be encountered when using or implementing GraphQL API.
The sample application described in the practical section of the thesis was implemented using familiar technologies for both the assigner and the author. ASP.NET Core framework and GraphQL .NET library was used to build the GraphQL server and the client application was built with React using the Create React App template. GraphQL support for the client application was obtained with React Relay framework.
The results of this graduate study indicate that GraphQL offers an interesting data-centric approach to a development of modern APIs as well as to a development of client applications using those APIs. As a quite new technology GraphQL has not yet managed to reach such a broad audience as REST architecture for example. But it certainly has all the possibilities to be a successor of REST in the future. As a result of this thesis, was also established that further study is needed to examine and compare other frameworks and libraries that can be used to build GraphQL server and client applications.
Työn teoriaosuudessa käytiin kyselyesimerkein läpi GraphQL:n toimintaperiaate ja ominaisuudet sekä tuotiin esiin GraphQL:n vahvuuksia perinteiseen REST-arkkitehtuurin mukaiseen API-rajapintaan verrattuna. Vahvuuksien, kuten datakeskeisen lähestymistavan ja vahvan tyypityksen ohella, pyrittiin kuitenkin myös käymään läpi GraphQL:n käyttöön liittyviä haasteita ja löytämään niihin ratkaisuja.
Käytäntöosuudessa kuvattu esimerkkisovellus toteutettiin sekä toimeksiantajalle että opinnäytetyön tekijälle ennestään tutuilla teknologioilla. GraphQL-rajapinta toteutettiin hyödyntäen ASP.NET Core -ohjelmistokehystä ja GraphQL .NET -kirjastoa. Asiakasohjelma on vastaavasti React-sovellus, jonka toteutuksessa hyödynnettiin valmista Create React App -pohjaa. Sovelluksen GraphQL:n käyttö toteutettiin React Relay -ohjelmistokehyksen avulla.
Opinnäytetyön lopputuloksena todettiin, että GraphQL tarjoaa mielenkiintoisen datakeskeisen lähestymistavan API-rajapintojen ja niitä hyödyntävien asiakassovellusten kehitykseen. Melko nuorena teknologiana se ei kuitenkaan ole vielä saavuttanut REST-arkkitehtuurin kaltaista laajaa suosiota. Sillä on kuitenkin ehdottomasti edellytykset kasvattaa suosiotaan. Opinnäytetyön mahdollisiksi jatkokehityskohteiksi ehdotettiin muun muassa perehtymistä myös vaihtoehtoisiin GraphQL-rajapintojen ja niitä hyödyntävien asiakasohjelmien kehitykseen tarkoitettuihin kirjastoi-hin ja ohjelmistokehyksiin.
The theoretical part of the thesis focused on describing the principal of GraphQL. With sample queries GraphQL was compared to a traditional REST API. The comparison demonstrated many obvious strengths of GraphQL but also pointed out some challenges that may be encountered when using or implementing GraphQL API.
The sample application described in the practical section of the thesis was implemented using familiar technologies for both the assigner and the author. ASP.NET Core framework and GraphQL .NET library was used to build the GraphQL server and the client application was built with React using the Create React App template. GraphQL support for the client application was obtained with React Relay framework.
The results of this graduate study indicate that GraphQL offers an interesting data-centric approach to a development of modern APIs as well as to a development of client applications using those APIs. As a quite new technology GraphQL has not yet managed to reach such a broad audience as REST architecture for example. But it certainly has all the possibilities to be a successor of REST in the future. As a result of this thesis, was also established that further study is needed to examine and compare other frameworks and libraries that can be used to build GraphQL server and client applications.