Все статьи о GraphQL расскажут, насколько он прекрасен, но есть ли в нем недостатки или недостатки? Спасибо.
Все статьи о GraphQL расскажут, насколько он прекрасен, но есть ли в нем недостатки или недостатки? Спасибо.
Ответы:
Недостатки:
Но им более чем противостоят:
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 только добавит дополнительную сложность, поэтому простой REST API может быть лучше.
Самая большая проблема, которую я вижу с graphQL, т.е. если вы используете реляционную базу данных, связана с объединениями .
Тот факт, что вы можете разрешить / запретить несколько полей, делает объединение нетривиальным (не простым). Это приводит к лишним запросам.
Также вложенные запросы в graphql приводят к циклическим запросам и могут привести к сбою сервера . Следует проявлять особую осторожность.
Ограничение скорости вызовов становится затруднительным, поскольку теперь пользователь может запускать несколько запросов за один вызов.
СОВЕТ : используйте загрузчик данных facebook, чтобы уменьшить количество запросов в случае javascript / node
cost
запрос. Также это не проблема, если вы используете предопределенные запросы, когда клиент отправляет только идентификатор.
С каждым годом он становится все лучше и лучше, и на данный момент сообщество GraphQL растет, и, как следствие, существует гораздо больше решений для множества проблем, которые ранее были выделены в других ответах. Но чтобы признать, что компании по-прежнему не хотят бросать все ресурсы на GraphQL, я хотел бы перечислить некоторые проблемы и решения, за которыми следуют нерешенные.
Но есть еще пара случаев, которые можно отнести к минусам:
Подводя итог, можно сказать, что GraphQL - это всего лишь инструмент для определенных целей, и он, конечно, не панацея от всех проблем и, конечно же, не замена REST.
Действительно здорово иметь единую конечную точку и предоставлять все данные. Я нахожу следующие моменты, которые следует учитывать для GraphQL:
Также следует учитывать плюсы после его реализации:
Легко добавлять условия с помощью аргументов и настраиваемого порядка после реализации
Используйте множество настраиваемых фильтров и избавьтесь от всех действий, которые необходимо создать, например, пользователь может иметь идентификатор, имя и т. Д. В качестве аргументов и выполнять фильтрацию. Кроме того, фильтры могут применяться к группам пользователей.
Я думаю, что на данный момент graphql должен быть частью серверной архитектуры, для загрузки файла вы все равно используете обычный api