Чтение \ изменение graphql

Я хочу иметь возможность проверять, подтверждать и изменять некоторые существующие операторы graphql. Например, я генерирую следующее, используя шаблон и получаю данные из Elasticsearch

mutation  {
  productUpdate(
    input: {
      id: "gid://shopify/Product/1388950487084",
      tags: ["one","two"]
    } 
  )
  {
    product {
      id
      tags
    }
    userErrors {
      field,
      message
    }
  }
}

Исходя из этого, я хочу сказать, что проверьте значение id, например, получите доступ к этому значению

mutation.productUpdate.input.id

Я отправляю сообщения только третьей стороне, я не размещаю схему или что-то в этом роде.

Нужно ли мне использовать библиотеку, чтобы иметь доступ к полезной нагрузке и изменять ее? И если да, то что было бы самым легким?

Спасибо

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
213
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

mutation ProductUpdate($id: ID!, $tags: [String!]) {
  productUpdate(input: {id: $id, tags: $tags}) {
    product { id tags }
    userErrors { field message }
  }
}

Если вы разберете спецификацию GraphQL более подробно, она состоит из нескольких основных частей: объектной модели; грамматика для разбора схем и запросов GraphQL; правила проверки для обеспечения соответствия запроса схеме; правила выполнения для фактического выполнения запроса по схеме; и транспортная часть HTTP (только в спецификации). В основном библиотеки GraphQL, которые я видел (на нескольких языках), объединяют все это в кучу, но опытные пользователи могут разбирать их по частям.

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

  1. Получите схему из службы (для ее получения существует стандартный запрос GraphQL, и многие библиотеки могут принимать эту форму JSON в качестве входных данных).

  2. Разберите предложенный вами запрос, используя выбранную вами библиотеку, в абстрактное синтаксическое дерево (AST).

  3. Найдите интересующее вас значение в структуре AST; измените его, если это то, что вы пытаетесь сделать, и это разрешено.

  4. Проверьте запрос на соответствие AST с помощью библиотеки GraphQL.

  5. Сериализуйте AST обратно в запрос GraphQL.

  6. Отправьте запрос на сервер обычным способом.

Если вы не контролируете запрос, схема переменных, которую я описал изначально, может вызвать небольшие проблемы. Вы можете обнаружить (как в моем примере запроса), что значение поля является ссылкой на переменную. Вы можете переписать его, но наличие неиспользуемых переменных - ошибка валидации, так что вам может потребоваться (возможно) удалить и переменные, что может вызвать затруднения.

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

mozman2 21.12.2018 15:39

Другие вопросы по теме