Graphql Vs Rest Api
Graphql Vs Rest Api
Graphql Vs Rest Api
309
Journal of Computer Sciences Institute 16 (2020) 309-316
użytkownikom, dla których priorytetem jest natychmia- siedmiu systemów z REST do GraphQL i w związku
stowa i nieprzerwana dostępność usług w sieci [6]. z tym dzięki zastosowaniu GraphQL nastąpiło zmniej-
szenie rozmiaru dokumentów JSON, zwracanych przez
1.2. Testowanie wydajności
interfejsy REST API o 94% w liczbie pól i 99% w licz-
Do sprawdzenia czy system, przy obciążeniu zgodnym bie bajtów (oba wyniki są medianą).
z planowanym wykorzystaniem, będzie nadal działał Brito i Valente [3] wykonali doświadczenie w celu
prawidłowo, a odpowiedzi będą generowane w akcep- porównania wysiłku, jaki trzeba włożyć w generowanie
towanym czasie, służą testy wydajnościowe [5]. Prze- zapytań do GraphQL i implementacje usług webowych
znaczone są one do oceny niezawodności, a co się z tym REST. Badania, w których wzięło udział 22 studentów,
wiąże, jakości oprogramowania internetowego. Odpo- wykazały, że budowanie zapytań GraphQL jest szybsze
wiadają na pytanie, jak duże obciążenie badany system niż implementacja usług REST.
jest w stanie wytrzymać. Głównym celem testów wy- Analizą porównawczą wydajności rozwiązań wyko-
dajnościowych jest zbadanie systemu pod symulowa- rzystujących GraphQL i REST zajmował się Cederlund
nym działaniem wirtualnych użytkowników [7]. Naj- w swojej dysertacji [11]. Jako przypadków testowych
ważniejszym parametrem do oceny wydajności jest używał rzeczywistych aplikacji do oceny opóźnienia,
czas, w którym dany system lub aplikacja musi wyko- objętości danych i liczby zapytań. Przypadki testowe
nać żądaną akcję. Aplikacje internetowe są trudne do zostały tak zaprojektowane, aby możliwe było testowa-
przetestowania, szczególnie pod względem wydajno- nie pojedynczych żądań oraz równoległych i sekwen-
ściowym ze względu na to, że występują kwestie nie- cyjnych przepływów danych. W badaniach skoncentro-
przewidywalne takie jak wielkość obciążenia czy czas wano się na pomiarach czasów odpowiedzi zmieniają-
reakcji [8]. cych się w zależności od wielkości przesyłanych da-
Testowanie wydajności najczęściej odbywa się nych. Wyniki analiz pokazały, że zastosowanie Gra-
w sposób automatyczny i sprowadza się w większości phQL zmniejszyło czas odpowiedzi dla równoległych
przypadków do sprawdzenia poprawnego działania i sekwencyjnych przepływów danych, jednak użycie
badanego systemu pod określonym obciążeniem [7]. pojedynczego, zwykłego endpointa REST gwarantowa-
Zalety testowania automatycznego to przyspieszenie ło najlepszą wydajność.
niektórych czynności, a tym samym skrócenie czasu Taskula w swojej pracy dyplomowej [12] porówny-
całego procesu, eliminacja błędów ludzkich, możliwość wał dwa rozwiązania REST i GraphQL, które wykorzy-
generowania różnego rodzaju raportów, a także reduk- stywał do pobierania danych. W ramach studium przy-
cja kosztów na etapie testowania. Narzędziami stoso- padku wykonane zostały pomiary wydajności, która
wanymi w automatyzacji testów wydajnościowych są te zamieniała się wraz ze zmianami rozmiaru transferowa-
służące do nagrywania, symulowania i rejestrowania nych danych. Okazało się, że w wielu przypadkach
procesu działania aplikacji. testowych GrahpQL lepiej wykorzystywał dane, nato-
miast REST mógł się równać tylko w przypadku inten-
1.3. Przegląd literatury
sywnego filtrowania pól. Dodatkowo w pracy porów-
Na forach i blogach wśród deweloperów oprogramowa- nywano złożoność i możliwość dalszego rozwijania
nia trwa dyskusja na temat, który z istniejących modeli aplikacji z API wykonanego na bazie REST oraz Gra-
architektur (SOAP, REST, GraphQL) będzie najbardziej phQL. Analiza jakościowa wykazała, że realizacja API
optymalny dla danego typu aplikacji. Kwestia ta jest w technologii GraphQL skutkowała mniejszą jego zło-
ciągle przedmiotem badań, których wyniki pojawiają się żonością oraz dawała w przyszłości większe możliwości
w publikacjach naukowych i studenckich pracach dy- rozwoju.
plomowych. W wyniku przeprowadzenia pilotażowego testu [13],
W pracy [9] porównywano wydajność 3 aplikacji porównującego REST z GraphQL okazało się, że pierw-
webowych udostępniających usługi internetowe jedno- sze, starsze rozwiązanie jest szybsze dla prostych
cześnie za pomocą dwóch technologii REST i Gra- ustrukturyzowanych zapytań, takich jak pobieranie
phQL. Zaobserwowano, że w dwóch aplikacjach migra- informacji tylko z jednego źródła lub tabeli. Ponadto
cja do GraphQL spowodowała wzrost wydajności, bio- okazało się, że różnica w wydajności w zakresie czasu
rąc pod uwagę średnią liczbę żądań na sekundę i szyb- odpowiedzi rośnie wykładniczo wraz z rozmiarem bazy
kość przesyłania danych. Jednak dla obciążeń powyżej danych. Pobierając z kolei więcej informacji, GraphQL
3000 żądań usługi oparte na GraphQL działały mniej generuje wolniejsze odpowiedzi w zakresie od 64% do
wydajnie (wyniki w zakresie od 98 do 2159 kB/sek.) od 115%. W przypadku większych baz danych i konstruo-
usług typu REST. Natomiast w przypadku typowych waniu bardziej złożonych zapytań GraphQL lepiej się
obciążeń (100 żądań), usługi oparte na architekturach sprawdzał. Różnica pomiędzy GraphQL i REST wyno-
REST i GraphQL osiągały podobną wydajność z zakre- siła 25%.
su 6,34 – 7,68 żądań/sek. W ramach pracy [14], zaproponowano metodologię,
Korzyści przejścia z API opracowanego na bazie która umożliwiła odpowiedź na pytanie, która technolo-
standardu REST do API zrealizowanego w standardzie gia GraphQL czy REST jest szybsza i lepiej zoptymali-
GraphQL, zebrane od specjalistów mających doświad- zowana. Badaniom poddano start-up - społecznościową
czenie w tym zakresie, poddano praktycznej ocenie w aplikację internetową, w której testowano korzyści
artykule [10]. W tym celu przeprowadzono migrację z migracji z REST do GraphQL. Badania obejmowały
310
Journal of Computer Sciences Institute 16 (2020) 309-316
dwie sytuacje: w pierwszej żądania były przesyłane aplikacji pobierają określone informacje z bazy danych,
w sposób sekwencyjny, a w drugiej równoległy. Głów- której diagram ERD został przedstawiony na rysunku 1.
ny wniosek płynący z pierwszej badanej sytuacji jest
taki, że GraphQL oferuje krótszy czas odpowiedzi dla
każdej sekwencji zapytań. Średnia różnica między
obiema technologiami wyniosła 159 ms, co czyni Gra-
phQL o 46% szybszym od REST. Z drugiej badanej
sytuacji wynika, że także i w tym przypadku GraphQL
był o 35% szybszy niż REST. Ten 11% spadek pomię-
dzy obiema sytuacjami można wytłumaczyć rodzajem
wykonywanych żądań. W przypadku wykonania se-
kwencyjnego drugiego testu, realizacja za pomocą
REST zajęłaby około 3 razy więcej czasu. W związku
z tym schemat równoległy sprawia, że REST staje się
bardziej konkurencyjny w stosunku do GraphQL. Bio-
rąc pod uwagę rozmiar odpowiedzi, w pierwszej sytua-
cji GraphQL był o 21% lżejszy, natomiast w drugiej
o 71%. Rysunek 1: Diagram związków encji
Przywołane prace i ich wyniki nie wskazują jedno-
znacznie, która technologia jest zdecydowanie lepsza. 2.2. Środowisko testowe
Odpowiedź na to pytanie jest uwarunkowana kilkoma Do przeprowadzenia badań wykorzystano dwa kompu-
czynnikami jak na przykład typ i przeznaczenie danego tery przenośne. Jeden z nich pełnił rolę serwera, na
oprogramowania oraz rodzaj i wielkość grupy poten- którym uruchomione zostały dwie usługi webowe:
cjalnych użytkowników. pierwsza zawierająca REST API, druga GraphQL API.
1.4. Cel i zakres pracy Drugi komputer pełnił rolę klienta, na którym zostało
zainstalowane narzędzie umożliwiające przeprowadze-
W Internecie znajduje się dużo publikacji pokazujących nie testów - JMeter w wersji 5.2.1. Parametry poszcze-
zalety i wady stylów wymiany danych REST i Gra- gólnych urządzeń wykorzystanych do badań oraz opis
phQL. Jednak wciąż niewiele artykułów odpowiada na serwera bazy danych, serwera HTTP i parametrów sieci
pytanie, które rozwiązanie jest lepsze, potwierdzając znajdują się w tabelach 1, 2 i 3.
równocześnie to w sposób ilościowy na podstawie wy-
ników z przeprowadzonych badań. Celem tej pracy jest Tabela 1: Opis komputera pełniącego rolę serwera
dalsze wypełnienie tej luki poprzez przeprowadzenie Procesor Intel(R) Core(TM) i7-6700HQ
analizy porównawczej wydajności dwóch technologii CPU @ 2.60 GHz, 2601MHZ,
internetowych REST i GraphQL. Rdzenie: 4, Procesory logicz-
Zakres pracy obejmował następujące elementy: ne: 8
opracowanie aplikacji testowych, przygotowanie ekspe- Pamięć RAM 16 GB
rymentu, dobór narzędzia diagnostycznego, zrealizowa- Karta sieciowa Intel(R) Dual Band Wireless-
nie zautomatyzowanych testów wydajnościowych oraz AC 3165
opracowanie wyników i ich interpretację. System operacyjny Microsoft Windows 10 Pro
W pracy postawiono tezę badawczą, którą sformu- Serwer bazy danych MariaDB 10.1.25
łowano w następujący sposób:
Serwer HTTP Apache Tomcat 9.0.3
Aplikacje wykorzystujące rozwiązanie GraphQL w sytu-
acjach, w których klient potrzebuje zestawu danych Tabela 2: Opis komputera pełniącego rolę klienta
w określonym formacie i możliwie najmniejszym roz- Procesor Intel(R) Core(TM) i3-2350M
miarze, mają lepszą wydajność w porównaniu do apli- CPU @ 2.30 GHz, 2300 MHz,
kacji stosujących REST. Rdzenie: 2, Procesory logicz-
2. Metoda badań ne: 4
Pamięć RAM 6 GB
2.1. Aplikacje testowe Karta sieciowa Intel(R) Centrino(R) Wireless-
Na potrzeby badań utworzono dwie usługi - aplikacje N 130
webowe zawierające te same funkcjonalności, ale wy- System operacyjny Windows 7 Home Premium
korzystujące odmienne style wymiany danych: REST Tabela 3: Opis sieci Wi-Fi
i GraphQL. W związku z tym w obu aplikacjach zaim-
plementowano odpowiednie API i poddano je testom Protokół Wi-Fi 4 (802.11n)
sprawdzającym ich wydajność. Zadaniem przygotowa- Pasmo sieci 2.4 GHz
nego oprogramowania było zarządzanie danymi doty- Średnia prędkość 16383 kbps
czącymi przeprowadzonych testów: informacjami na pobierania danych
temat uczniów, nauczycieli, kursów oraz budynków, Średnia prędkość 1052 kbps
w których odbywały się egzaminy. Warstwy serwerowe wysyłania danych
311
Journal of Computer Sciences Institute 16 (2020) 309-316
312
Journal of Computer Sciences Institute 16 (2020) 309-316
313
Journal of Computer Sciences Institute 16 (2020) 309-316
miast rozmiar wysłanych danych był zdecydowanie czekał na przetworzenie żądania średnio 144 ms.
większy po stronie aplikacji wykorzystującej GraphQL W GraphQL ta sama operacja była wykonywana
(727 bajtów) w porównaniu do REST (133 bajtów). w czasie średnio 123 ms.
Rysunek 9: Rozmiar otrzymanych danych - REST vs GraphQL. Rysunek 10: Porównanie rozmiarów danych w REST i GraphQL.
314
Journal of Computer Sciences Institute 16 (2020) 309-316
cydowanie ułatwia komunikację. Kolejną rzeczą, na usługę otrzymywał tę samą ilość danych (wszystkie
którą trzeba zwrócić uwagę jest to, że przy próbie usu- dane) i to ta część badań potwierdziła postawioną na
nięcia encji (również przy edycji danych), która nie początku pracy tezę. W obu technologiach, przy pobie-
istnieje w bazie, w podejściu REST klient otrzyma błąd raniu małych porcji danych (5 rekordów) przez 1 endpo-
wykonania żądania. W technologii GraphQL klient zaś int, przy dużym obciążeniu, lepiej wypadała usługa
otrzyma status 200 HTTP, oznaczający poprawne prze- stosująca GraphQL. Jednak w podobnych warunkach,
tworzenie żądania, co może powodować wyświetlanie w przypadku pobierania dużych porcji danych (100
niewłaściwego komunikatu po stronie klienta (tabela 6). rekordów) bardziej wydajna była usługa wykorzystująca
Tabela 5: Rezultat wykonania żądania usunięcia rekordu z bazy
interfejs REST. Rozmiar wysyłanych danych był więk-
danych w aplikacjach stosujących styl REST i GraphQL szy w GraphQL, ponieważ klient w przesyłanej wiado-
mości musiał przy pomocy języka zapytań zawrzeć
Czas Rozmiar Rozmiar
wszystkie informacje, które chciał uzyskać w odpowie-
Technologia
315
Journal of Computer Sciences Institute 16 (2020) 309-316
and Mobile Computing, Vol. 5, Issue 6, (2016) 507-512, Realy+GraphQL, Dissertation, KTH, 2016,
https://www.ijcsmc.com/docs/papers/June2016/V5I6201 http://urn.kb.se/resolve?urn=urn:nbn:se:kth:diva-196058,
697.pdf, [09.07.2020]. [27.08.2020].
[9] M. Seabra, F. Nazario, G. Pinto, REST or GraphQL?: A [12] T. Taskula, Advanced data fetching with graphql: Case
Performance Comparative Study, In Proceedings of the bakery service, Dissertation, Aalto University, 2019,
XIII Brazilian Symposium on Software Components, https://aaltodoc.aalto.fi/handle/123456789/37147,
Architectures, and Reuse (SBCARS '19). Association for [27.08.2020].
Computing Machinery, New York, NY, USA, 123–132.
[13] A. F. Helgason, Performance analysis of Web Services:
https://doi.org/10.1145/3357141.3357149, [27.08.2020].
Comparison between RESTful & GraphQL web services,
[10] G. Brito, T. Mombach, M. T. Valente, Migrating to Dissertation, University of Skövde, 2017, http://his.diva-
GraphQL: A Practical Assessment, In 2019 IEEE 26 th portal.org/smash/record.jsf?pid=diva2%3A1107850&ds
International Conference on Software Analysis, wid=-9534, [29.08.2020].
Evolution and Reengineering (SANER), 140-150,
[14] C. Oggier, How fast GraphQL is compared to REST
https://doi.org/10.1109/SANER.2019.8667986,
[27.08.2020]. APIs, Dissertation, Haaga-Helia University of Applied
Sciences, 2020, http://urn.fi/URN:NBN:fi:amk-
[11] M. Cederlund, Performance of frameworks for 2020052714286, [29.08.2020].
declarative data fetching: An evaluation of Falcor and
[15] Apache JMeter, http://jmeter.apache.org/, [09.07.2020].
316