DOCS

Почему GraphQL

Узнайте, почему мы рекомендуем интеграцию через GraphQL вместо REST.

В Zonos мы предлагаем два основных типа API для интеграции: GraphQL и REST. Хотя REST API существует дольше и может быть более знаком многим, мы перешли на GraphQL, чтобы обеспечить большую гибкость и более быструю инновацию. Несмотря на то что оба варианта по-прежнему поддерживаются, это руководство объясняет, почему GraphQL не только является будущим наших интеграций, но и будущим интеграций в целом и более мощным инструментом для удовлетворения ваших потребностей сегодня.

Что такое GraphQL? 

GraphQL — это альтернативный способ взаимодействия с API, хорошо подходящий для сложных структур данных и создания на их основе интерфейсов. Вместо того чтобы рассматривать данные как отдельные, независимые элементы, GraphQL показывает, как части данных связаны и соотносятся между собой, облегчая запрос и получение информации.

Думайте о GraphQL как о языке запросов, который позволяет вам взаимодействовать с API так, как если бы вы разговаривали непосредственно с базой данных. Использование GraphQL позволяет вам подойти как можно ближе к базе данных, позволяя выбирать нужные вам данные и способ их получения, обеспечивая значительное преимущество в производительности.

GraphQL был создан Facebook для решения проблемы масштабирования со сложными структурами данных. В результате их успешного внедрения все больше и больше компаний начали понимать преимущества использования GraphQL для своих API.

Уже знакомы с REST? GraphQL покажется вам знакомым.

API GraphQL легче использовать, чем вы можете подумать. Если вы привыкли работать с REST API, вот как основные концепции из REST переводятся в GraphQL.

ФункцияRESTGraphQL
EndpointЗапросы отправляются на несколько разных endpoint для разных действийВсе запросы отправляются на один endpoint (например, /graphql)
Получение данныхИспользуйте методы GET на определённых endpoint для получения данныхИспользуйте запросы для запроса именно нужных вам данных, уменьшая чрезмерное или недостаточное получение
Изменение данных/действияИспользуйте HTTP методы такие как POST, PUT, PATCH или DELETE для изменения или обработки данных.Используйте мутации для выполнения операций (например, создание сторон, расчёт стоимости доставки)
Формат ответаФиксированные форматы ответов возвращают все предварительно определённые поля, независимо от того, нужны они или нетГибкие ответы позволяют указывать точно, какие поля включать, уменьшая ненужную передачу данных (если эта гибкость кажется сложной, просто используйте предварительно написанные примеры запросов в нашей документации для опыта, похожего на REST)
Связь данныхЧасто требуется несколько запросов для получения связанных данныхВложенные запросы позволяют получить связанные данные в одном запросе (например, детали стороны и элементы отправки вместе). Пользователи также могут создавать рабочие процессы для управления несколькими мутациями в одном запросе GraphQL, уменьшая сложность и повышая эффективность

Преимущества GraphQL

Аналогия 

Представьте, что вы в ресторане с меню, которое позволяет вам заказывать блюда ровно так, как вы их хотите, по сравнению с другим рестораном, где вы можете выбрать только из установленных комплексов. GraphQL похож на первый ресторан:

  • Получите ровно то, что вам нужно: С GraphQL вы можете запросить ровно те данные, которые вам нужны, ни больше, ни меньше. Представьте, что вам нужно только имя и цена блюда, а не весь список ингредиентов. С REST API вам пришлось бы получить все детали блюда и игнорировать части, которые вам не нужны.
  • Составьте пользовательское блюдо: Наш GraphQL API можно легко комбинировать для создания более пользовательских решений, похожих на буфет, где вы можете создать уникальное блюдо ровно так, как вам нужно, используя ингредиенты, которые у них уже есть. И наоборот, REST API похож на пекарню с готовыми товарами в упакованных корзинах — вы можете заказать только то, что уже было создано, и вы не можете выбрать, чтобы взять домой только кусок, который вам нужен.
  • Меньше ожидания: Поскольку вы можете получить всю необходимую информацию в одном запросе, это похоже на то, что вы просите официанта принести ваши закуски, основное блюдо и десерт все сразу, вместо ожидания между блюдами. Большинство REST API требуют отправки нескольких запросов для получения различных фрагментов информации.
  • Легко менять заказы: Если потребности вашего приложения в данных изменятся, GraphQL упрощает корректировку. Вы просто меняете запрос на то, что вам нужно. С REST вам может потребоваться ждать, пока кухня (бэкенд) создаст новое блюдо (endpoint) для меню, что требует больше времени.

GraphQL предоставляет большую гибкость, эффективность и простоту для получения данных чем REST API, особенно при изменении или увеличении ваших потребностей.

Как Zonos использует GraphQL 

При модернизации нашей платформы за последние пару лет Zonos решила разрабатывать новую функциональность на GraphQL для нашего API вместо REST. Мы решили сделать это потому, что наши данные сложны и взаимосвязаны, во многом как данные, которые привели Facebook к созданию GraphQL. Эта сложность усложняет создание масштабируемых REST API, потому что способы, которыми разработчикам нужно получать и использовать данные, варьируются кардинально между реализациями, а REST не гибкий.

GraphQL аккуратно решает эту проблему, позволяя разработчикам, реализующим наш API, выбирать ровно те данные, которые им нужны, и способ их получения. Это позволяет им вписаться в свои рабочие процессы без того, чтобы Zonos приходилось выполнять индивидуальную работу (пока они ждут) для каждой ситуации.

Комбинированный результат использования GraphQL и модернизаций в нашей платформе сделал наш API более производительным, сделал интеграцию Zonos в ваши системы быстрее и сделал возможным для Zonos быстрее доставлять новые функции.

Лучшие функции

Zonos постоянно разрабатывает новые функции, и GraphQL является первой (и обычно единственной) для получения этих обновлений. Напротив, наши REST API считаются устаревшими и не могут получить доступ ко многим нашим новым функциям.

Примеры функций, ограниченных GraphQL:

  • Inclusive pricing
  • Labels API
  • New Checkout и Hello
  • Размеры коробок в ответе API
  • Отчётность в Dashboard
  • Возможность запросить расценку DDP, если возможна, но по-прежнему вернуть расценку DDU, если DDP недоступна в этой стране с этим уровнем обслуживания
  • Детальная разбивка пошлин, налогов и сборов (информация на уровне товаров, специфические сборы) — Dashboard работает на GraphQL и показывает эти данные для всех магазинов, но ответ REST API не включает этот уровень детализации
  • Тестовый режим (скоро)

Была ли эта страница полезной?