GraphQL pojawił się w 2015 roku i wzbudził duże zainteresowanie. Od tamtej pory debata "GraphQL czy REST" nie ucichła. Obie technologie rozwiązują podobny problem, ale robią to inaczej i każda ma swoje zastosowanie.
Czym różni się GraphQL od REST
W REST każdy zasób ma swój endpoint. Chcesz pobrać użytkownika z jego zamówieniami i adresami - robisz kilka zapytań: GET /users/5, GET /users/5/orders, GET /users/5/addresses.
W GraphQL jest jeden endpoint. Definiujesz zapytanie opisujące dokładnie co chcesz pobrać i dostajesz tylko to. Możesz w jednym żądaniu pobrać użytkownika z jego ostatnimi zamówieniami i adresami dostawy.
Kiedy GraphQL ma sens
- Klienci z różnymi potrzebami danych - aplikacja mobilna potrzebuje mniej danych niż wersja webowa. GraphQL pozwala każdemu klientowi pobrać tylko to czego potrzebuje.
- Unikanie over-fetchingu - gdy REST zwraca więcej danych niż klient potrzebuje, GraphQL pozwala to precyzyjnie kontrolować.
- Agregowanie danych z wielu źródeł - GraphQL może być warstwą łączącą kilka różnych serwisów w jedno API.
Kiedy REST jest lepszym wyborem
REST jest prostszy w implementacji. Obsługuje HTTP cache na poziomie infrastruktury, lepiej radzi sobie z przesyłaniem plików i jest bardziej zrozumiały dla szerszego grona programistów. Dla standardowego API CRUD GraphQL wnosi złożoność bez wyraźnej korzyści.
Caching
Warstwa HTTP cache dla GraphQL jest trudniejsza niż dla REST, bo wszystkie zapytania trafiają na jeden endpoint POST. Trzeba stosować mechanizmy po stronie aplikacji lub klienta, co zwiększa złożoność całego rozwiązania.
Praktyczna decyzja
Jeśli budujesz API konsumowane przez jeden typ klienta, REST z dobrze zaprojektowanymi endpointami wystarczy. Jeśli obsługujesz wiele klientów z różnymi potrzebami danych, GraphQL jest wart rozważenia.