Відповіді:
Недоліки:
Але це більш ніж протидіє цим:
graphql-spring-boot-starter
та graphql-java-tools
розпочати роботу. Створіть схему в ресурсі .graphqls та створіть класи Resolver і все закінчиться. Для отримання робочого тестового прикладу і запуску знадобилося близько 10 хвилин.
Я знайшов важливі проблеми для всіх, хто розглядає можливість використання GraphQL , і до цих пір основними моментами є:
Запит у невизначеній глибині : GraphQL не може здійснювати запит у невизначеній глибині, тому якщо у вас є дерево та хочете повернути гілку, не знаючи глибини, вам доведеться виконати деяку сторінку.
Конкретна структура відповіді : у GraphQL відповідь відповідає формі запиту, тому якщо вам потрібно відповісти в дуже конкретній структурі, вам доведеться додати шар перетворення, щоб змінити відповідь.
Кеш на мережевому рівні : Через звичайний спосіб GraphQL використовується через HTTP (POST в єдиній кінцевій точці), кеш на рівні мережі стає важким. Спосіб її вирішення - використовувати постійні запити.
Поводження з завантаженням файлів : нічого не стосується завантаження файлів у специфікації GraphQL, і мутації не приймають файли в аргументах. Для її вирішення можна завантажувати файли за допомогою API інших типів (наприклад, REST) та передавати URL-адресу завантаженого файлу до мутації GraphQL або вводити файл у контекст виконання, щоб у вас був файл всередині функцій резолюції.
Непередбачуване виконання : Характер GraphQL полягає в тому, що ви можете запитувати, комбінуючи будь-які поля, які ви хочете, але ця гнучкість не є безкоштовною. Є деякі проблеми, які добре знати, такі як запити продуктивності та N + 1.
Супер прості API : Якщо у вас є сервіс, який представляє дійсно простий API, GraphQL додасть лише додаткову складність, тому простий API REST може бути кращим.
Ця найбільша проблема, яку я бачу з graphQL, тобто якщо ви використовуєте реляційну базу даних, це приєднання .
Те, що ви можете дозволити / заборонити декілька полів, приєднує нетривіально (не просто). Що призводить до додаткових запитів.
Також вкладені запити у graphql призводять до кругових запитів і можуть завершити роботу сервера . Необхідно дотримуватися додаткової обережності.
Обмеження кількості дзвінків стає важким, тому що зараз користувач може запускати кілька запитів за один дзвінок.
ПОРАДА : Використовуйте завантажувач даних facebook, щоб зменшити кількість запитів у випадку javascript / вузла
cost
запит. Також це не викликає занепокоєння, якщо ви використовуєте заздалегідь задані запити, коли клієнт лише надсилає ідентифікатор.
З кожним роком вона стає все кращою і кращою, і, як і зараз, спільнота GraphQL зростає, і як результат, існує набагато більше рішень для багатьох проблем, які були висвітлені в інших відповідях раніше. Але, щоб визнати, що все ще тримає компанії від перекидання всіх ресурсів на GraphQL, я хотів би перерахувати деякі проблеми та рішення, за якими слідують невирішені.
Але є ще кілька випадків, які можна вважати недоліками:
Підводячи підсумок, GraphQL - це лише інструмент для конкретних цілей, і напевно, це не срібна куля для всіх проблем і, звичайно, не заміна REST.
Дійсно чудово мати єдину кінцеву точку та оголити всі дані. Нижче я знаходжу точки, які слід враховувати для GraphQL:
Також слід врахувати плюси після його впровадження:
Легко додавати умови, використовуючи аргументи та спеціальне замовлення після їх впровадження
Використовуйте безліч спеціальних фільтрів і позбудьтеся всіх дій, які потрібно створити, наприклад, користувач може мати ідентифікатор, ім’я та ін. Як аргументи та виконувати фільтрацію. Крім того, фільтри можна застосувати і до груп користувачів.
Я думаю, що graphql на даний момент повинен бути частиною архітектури бекенда, для завантаження файлу ви все ще потрапляєте у звичайний api