REST vs. GraphQL – Building APIs for abstract applications
Öysti, Simo (2021)
Öysti, Simo
2021
Julkaisun pysyvä osoite on
https://urn.fi/URN:NBN:fi:amk-2021120924723
https://urn.fi/URN:NBN:fi:amk-2021120924723
Tiivistelmä
Ohjelmointirajapinnat ovat vahvasti läsnä nykypäivän digitaalisissa ekosysteemeissä. Niitä hyödyntäviä sovelluksia on laajalti, aina mobiili- ja web-sovelluksista fyysisten laitteiden, jopa robotti-imurien ja älyvalaisimien ohjelmistoihin. Ohjelmointirajapintoja hyödynnetään enenevässä määrin maailmanlaajuisen digitaalisen transformaation myötä, mikä lisää sovellusten valmiutta keskustella keskenään. Ohjelmistointegraatioiden jatkuvasti lisääntyvän kysynnän ansiosta ohjelmointirajapinnoista on tullut standardisoitu osa nykypäivän sovelluskehitystä.
Tarve ohjelmistointegraatiolle Jyväskylän yliopistolla nousi esille, kun tutkimustietojärjestelmä tarvitsi joustavan ratkaisun mahdollistaakseen datansa hyödyntämisen muille osapuolille. Tärkeimmät vaatimukset tuotteelle olivat hyvä käyttöoikeuksienhallinta, liiallisen datan kerralla hakemisen välttäminen ja kattava lokitus. Huomioiden ohjelmointirajapintojen kasvavan kysynnän, haluttiin lisäksi löytää ja toteuttaa tarpeeksi hyvin abstraktoitu ratkaisu, jotta mitkä tahansa muut sovellukset voisivat suoraan hyödyntää samaa lähestymistapaa tulevissa integraatioissa.
Ratkaisu, joka tähdättiin vastaamaan niin monen sovelluksen tarpeisiin kuin mahdollista, oli GraphQL:ää hyödyntävä kirjoitussuojattu ohjelmointirajapinta. Tuote toteutettiin paikalliselle RHEL 8-palvelimelle virtuaaliympäristössä. Se sisälsi Hasura GraphQL-palvelimen, joka toimi Podman-konteissa ja sen edessä toimi lisäksi käänteisenä välityspalvelimena Apache. Ulkoinen PostgreSQL-tietokanta yhdistettiin Hasuraan toimiakseen pääasiallisena tietolähteenä. Lisäksi autentikaatiopalvelin pystytettiin Node.js:n avulla tarjoamaan käyttäjille autentikaatiota ja siten mahdollistamaan roolikohtaisen auktorisoinnin.
Tutkimusprojektin lopputuotoksena syntyi kaikin puolin toimiva tutkimusprototyyppi, joka vaatisi ainoastaan vähäistä konfiguraatiota sopiakseen täysin toimeksiantajan tarkempiin tarpeisiin. Samalla toteutus pysyi niin abstraktina, että sitä voitaisiin suoraan käyttää muiden sovellusten kanssa ilman olemassaolevaa tietämystä tutkimusprojektiin liitetyistä teknologioista.
Tutkimusprojektin tavoitteena oli tutkia olennaisia teknologioita, joiden perusteella toteutettaisiin uusi käytännöllinen API Jyväskylän yliopistolle tukemaan ohjelmistointegraatioiden lisääntyvää tarvetta. Nämä tavoitteet saavutettiin, sillä valmista tuotetta voitaisiin välittömästi hyödyntää tietyssä määrin. Myös vaihtoehtoisia kehityskohteita korostettiin, joiden pohjalta toimeksiantaja voisi helposti edelleen laajentaa toiminnallisuutta tulevien tarpeiden mukaiseksi. APIs can be found everywhere in today’s digital ecosystems. There exists a wide variety of clients that utilize them, ranging from mobile or web applications to the software of physical devices, even robot vacuums or smart lighting appliances. Through the global digital transformation, APIs are utilized increasingly, allowing applications to readily communicate with one another. Due to the continuously increasing demand for such integrations, APIs have become a standardized part of modern-day application development.
A need for enabling such integrations arose at the University of Jyväskylä, where the current research information system needed a flexible solution to enable other parties to utilize the data within. Main requirements for the product were good permissions management, no over-fetching of data, and comprehensive logging. Considering the increasing need and popularity of APIs, interest was also taken in finding and implementing an abstract enough solution, so that any other applications could directly utilize the same approach in future integrations.
The solution, aimed to cater to the needs of as many applications at once as possible, was a read-only API utilizing GraphQL. The product was implemented on top of an on-premises RHEL 8 server in a virtual environment. It consisted of a Hasura GraphQL server running within Podman containers, having an additional Apache reverse proxy on the front. An external PostgreSQL database was connected to Hasura to function as the primary data source. Additionally, an authentication server was set up with the help of Node.js to provide users with authentication and thus enable role-based authorization.
The resulting product of the research project became a fully functional proof of concept, requiring only further minor configurations to fully fit the specific needs of the employer. At the same time, the implementation remained abstract enough so that it could be directly applied to other applications, without any existing knowledge of the technologies related to the research project.
The purpose of the research project was to investigate relevant technologies, based on which a new practical API for the University of Jyväskylä was to be created to support the increasing demand for application integrations. These objectives were achieved, as the final product was something that could be immediately utilized to some extent. Optional future improvements were also highlighted, based on which the employer could easily further expand functionality according to future needs.
Tarve ohjelmistointegraatiolle Jyväskylän yliopistolla nousi esille, kun tutkimustietojärjestelmä tarvitsi joustavan ratkaisun mahdollistaakseen datansa hyödyntämisen muille osapuolille. Tärkeimmät vaatimukset tuotteelle olivat hyvä käyttöoikeuksienhallinta, liiallisen datan kerralla hakemisen välttäminen ja kattava lokitus. Huomioiden ohjelmointirajapintojen kasvavan kysynnän, haluttiin lisäksi löytää ja toteuttaa tarpeeksi hyvin abstraktoitu ratkaisu, jotta mitkä tahansa muut sovellukset voisivat suoraan hyödyntää samaa lähestymistapaa tulevissa integraatioissa.
Ratkaisu, joka tähdättiin vastaamaan niin monen sovelluksen tarpeisiin kuin mahdollista, oli GraphQL:ää hyödyntävä kirjoitussuojattu ohjelmointirajapinta. Tuote toteutettiin paikalliselle RHEL 8-palvelimelle virtuaaliympäristössä. Se sisälsi Hasura GraphQL-palvelimen, joka toimi Podman-konteissa ja sen edessä toimi lisäksi käänteisenä välityspalvelimena Apache. Ulkoinen PostgreSQL-tietokanta yhdistettiin Hasuraan toimiakseen pääasiallisena tietolähteenä. Lisäksi autentikaatiopalvelin pystytettiin Node.js:n avulla tarjoamaan käyttäjille autentikaatiota ja siten mahdollistamaan roolikohtaisen auktorisoinnin.
Tutkimusprojektin lopputuotoksena syntyi kaikin puolin toimiva tutkimusprototyyppi, joka vaatisi ainoastaan vähäistä konfiguraatiota sopiakseen täysin toimeksiantajan tarkempiin tarpeisiin. Samalla toteutus pysyi niin abstraktina, että sitä voitaisiin suoraan käyttää muiden sovellusten kanssa ilman olemassaolevaa tietämystä tutkimusprojektiin liitetyistä teknologioista.
Tutkimusprojektin tavoitteena oli tutkia olennaisia teknologioita, joiden perusteella toteutettaisiin uusi käytännöllinen API Jyväskylän yliopistolle tukemaan ohjelmistointegraatioiden lisääntyvää tarvetta. Nämä tavoitteet saavutettiin, sillä valmista tuotetta voitaisiin välittömästi hyödyntää tietyssä määrin. Myös vaihtoehtoisia kehityskohteita korostettiin, joiden pohjalta toimeksiantaja voisi helposti edelleen laajentaa toiminnallisuutta tulevien tarpeiden mukaiseksi.
A need for enabling such integrations arose at the University of Jyväskylä, where the current research information system needed a flexible solution to enable other parties to utilize the data within. Main requirements for the product were good permissions management, no over-fetching of data, and comprehensive logging. Considering the increasing need and popularity of APIs, interest was also taken in finding and implementing an abstract enough solution, so that any other applications could directly utilize the same approach in future integrations.
The solution, aimed to cater to the needs of as many applications at once as possible, was a read-only API utilizing GraphQL. The product was implemented on top of an on-premises RHEL 8 server in a virtual environment. It consisted of a Hasura GraphQL server running within Podman containers, having an additional Apache reverse proxy on the front. An external PostgreSQL database was connected to Hasura to function as the primary data source. Additionally, an authentication server was set up with the help of Node.js to provide users with authentication and thus enable role-based authorization.
The resulting product of the research project became a fully functional proof of concept, requiring only further minor configurations to fully fit the specific needs of the employer. At the same time, the implementation remained abstract enough so that it could be directly applied to other applications, without any existing knowledge of the technologies related to the research project.
The purpose of the research project was to investigate relevant technologies, based on which a new practical API for the University of Jyväskylä was to be created to support the increasing demand for application integrations. These objectives were achieved, as the final product was something that could be immediately utilized to some extent. Optional future improvements were also highlighted, based on which the employer could easily further expand functionality according to future needs.