Чтение \ изменение графика - PullRequest
0 голосов
/ 19 декабря 2018

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

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

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

* 1005.* mutation.productUpdate.input.id

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

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

Спасибо

1 Ответ

0 голосов
/ 20 декабря 2018

Вы контролируете этот запрос?Обычно не рекомендуется напрямую вставлять значения в запрос следующим образом;вместо этого вы должны использовать переменные 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. Отправьте запрос на сервер, как обычно.

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

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