Shopify umożliwia nam korzystanie z GraphQL oraz REST API, dzięki którym możemy komunikować się z back-endem sklepu z perspektywy kodu na froncie. W przeszłości REST było ogólno przyjętym standardem w projektowaniu i tworzeniu API, jednak od kilku lat GraphQL zyskuje na popularności i zbiera coraz większą rzeszę fanów.
Facebookowa rewolucja
Facebook zaprezentował GraphQL jako rewolucyjną alternatywę dla REST’owych API, więc różnica pomiędzy jednym a drugim podejściem jest spora. REST to ogólny standard architektoniczny, w jakim tworzy się API, podczas gdy GraphQL oprócz tego jest jeszcze językiem zapytań (query language) i zestawem narzędzi, które operują na jednym endpoincie przy użyciu protokołu HTTP.
Plusem w konsumowaniu REST API jest prostota, nie potrzebujemy do tego żadnych bibliotek ani zewnętrznych paczek. Wysyłamy zapytanie (request) za pomocą np. fetch’a (który jest dostępny natywnie w JavaScript) lub axios’a, po czym serwer zwraca nam odpowiedź (response). Z kolei jednym z REST’owych problemów jest “over fetching”. Chodzi o to, że nie mamy możliwości ograniczenia pól zwracanych przez API, zawsze otrzymamy pełny zestaw danych. W przypadku GraphQL możemy sprecyzować zapytanie o pola, jakie chcemy otrzymać w response.
Dla przykładu wyobraźcie sobie, że mamy tablicę z filmami, wewnątrz której każdy obiekt zawiera informacje o pojedynczym filmie; title, description, director itd. a na froncie chcemy wyświetlić jedynie tytuły filmów. Korzystając z GraphQL, możemy sprecyzować request, aby otrzymać dane z konkretnego pola, np. ‘title’ i nie musimy czekać, aż serwer zwróci cały zestaw danych, żeby później wyświetlić same tytuły filmów.
To więcej niż API
Jak wspomniałem wyżej, GraphQL to także zestaw narzędzi, czego przykładem jest GraphiQL. To zintegrowane środowisko, narzędzie, które pomaga nam w konstruowaniu prawidłowej struktury zapytań oraz mutacji (nowszym i ciekawszym odpowiednikiem tego IDE jest GraphQL Playground). Dzięki Apollo mamy dostęp do klienta (CLI), dzięki któremu możemy zarządzać stanem aplikacji w React na podstawie płynnie wykonywanych operacji GraphQL. Learning curve może być także minusem tego środowiska, jednak czas poświęcony na jego naukę z pewnością się opłaci.
Oba te standardy tworzenia API posiadają swoje plusy i minusy, więc nie ma tu jednego złotego środka. Korzystanie z GraphQL wymaga od nas poznania całego środowiska związanego z nim, podczas gdy REST API możemy konsumować, używając do tego chociażby domyślnego interfejsu w JavaScript.