Odpowiedzi:
Niedogodności:
Ale te są więcej niż przeciwstawiane przez te:
graphql-spring-boot-starter
i graphql-java-tools
zacząć. Utwórz swój schemat w zasobie .graphqls i utwórz klasy Resolver i gotowe. Uruchomienie działającego przykładu testowego zajęło około 10 minut.
Znalazłem kilka ważnych obaw dla każdego, kto rozważa użycie GraphQL , a do tej pory główne punkty to:
Zapytanie w nieokreślonej głębokości : GraphQL nie może wykonywać zapytań na nieokreślonej głębokości, więc jeśli masz drzewo i chcesz zwrócić gałąź bez znajomości głębokości, będziesz musiał zrobić trochę paginacji.
Specyficzna struktura odpowiedzi : W GraphQL odpowiedź odpowiada kształtowi zapytania, więc jeśli potrzebujesz odpowiedzieć w bardzo specyficznej strukturze, musisz dodać warstwę transformacji, aby zmienić kształt odpowiedzi.
Pamięć podręczna na poziomie sieci : Ze względu na powszechny sposób używania GraphQL przez HTTP (POST w jednym punkcie końcowym) pamięć podręczna na poziomie sieci staje się trudna. Sposobem na rozwiązanie tego problemu jest użycie trwałych zapytań.
Obsługa przesyłania plików : W specyfikacji GraphQL nie ma nic o przesyłaniu plików, a mutacje nie akceptują plików w argumentach. Aby rozwiązać ten problem, możesz przesłać pliki za pomocą innego rodzaju interfejsów API (takich jak REST) i przekazać adres URL przesłanego pliku do mutacji GraphQL lub wstrzyknąć plik w kontekście wykonania, dzięki czemu będziesz mieć plik wewnątrz funkcji resolvera.
Nieprzewidywalne wykonanie : Naturą GraphQL jest to, że możesz wykonywać zapytania łącząc dowolne pola, ale ta elastyczność nie jest darmowa. Istnieją pewne obawy, które warto znać, takie jak wydajność i zapytania N + 1.
Super Simple APIs : jeśli masz usługę, która udostępnia naprawdę proste API, GraphQL doda tylko dodatkową złożoność, więc prosty REST API może być lepszy.
Ten największy problem, który widzę z GraphQL, tj. Jeśli używasz z relacyjną bazą danych, dotyczy złączeń .
Fakt, że możesz zezwolić / zabronić kilku pól, sprawia, że łączenia są nietrywialne (nie proste). Co prowadzi do dodatkowych zapytań.
Również zapytania zagnieżdżone w graphql prowadzą do zapytań cyklicznych i mogą spowodować awarię serwera . Należy zachować szczególną ostrożność.
Ograniczanie szybkości połączeń staje się trudne, ponieważ teraz użytkownik może uruchamiać wiele zapytań w jednym połączeniu.
WSKAZÓWKA : Użyj dataloadera Facebooka, aby zmniejszyć liczbę zapytań w przypadku javascript / node
cost
do żądania. Nie stanowi to również problemu, jeśli używasz predefiniowanych zapytań, w których klient wysyła tylko identyfikator.
Z każdym rokiem jest coraz lepiej, a na razie społeczność GraphQL rośnie, w wyniku czego istnieje znacznie więcej rozwiązań wielu problemów, które zostały wcześniej podkreślone w innych odpowiedziach. Ale żeby przyznać, że firmy wciąż powstrzymują przed wyrzuceniem wszystkich zasobów do GraphQL, chciałbym wymienić kilka problemów i rozwiązań, a następnie nierozwiązane.
Ale jest jeszcze kilka przypadków, które można zaliczyć jako wady:
Podsumowując, GraphQL to tylko narzędzie do konkretnych celów i na pewno nie jest srebrną kulą dla wszystkich problemów i oczywiście nie zastępuje REST.
Wspaniale jest mieć jeden punkt końcowy i udostępniać wszystkie dane. Poniżej znajdują się punkty, które należy wziąć pod uwagę w przypadku GraphQL:
Należy również wziąć pod uwagę Plusy po jego wdrożeniu:
Łatwe dodawanie warunków za pomocą argumentów i niestandardowego porządku po wdrożeniu
Używaj wielu niestandardowych filtrów i pozbądź się wszystkich działań, które należy utworzyć, na przykład użytkownik może mieć identyfikator, nazwę itp. Jako argumenty i wykonać filtrowanie. Dodatkowo filtry można zastosować również na grupach użytkowników.
Myślę, że w tej chwili graphql musi być częścią architektury zaplecza, ponieważ w celu przesłania plików nadal korzystasz ze zwykłego interfejsu API