Сопоставление запроса GraphQL с Select () linq с sql - PullRequest
8 голосов
/ 17 июня 2020

Я создаю веб-API с ядром. NET, используя GraphQL и DocumentDb.

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

Лучшая стратегия здесь - использовать Select() для указания c свойств, которые нам нужны получить. Но я понятия не имею, как построить выражение на основе такого сложного запроса клиента.

Любая помощь очень ценится.

Спасибо

Ответы [ 2 ]

3 голосов
/ 17 июня 2020

Для выражения SQL, если мы хотим запросить jedis, и нам нужны имя столбца и сторона, мы можем использовать сценарий, как показано ниже:

SELECT name, side
FROM jedis;

Давайте обновим код нашим запросом, например так:

var json = schema.Execute(_ =>
{
    _.Query = "{ jedis { name, side } }";
});

Console.WriteLine(json);

и результат: enter image description here

Для получения более подробной информации вы можете обратиться к этой статье и этой один .

2 голосов
/ 21 июня 2020

Но я понятия не имею, как построить выражение из такого сложного запроса клиента.

Какой у вас сложный запрос? Просто нужно получить только те поля, которые существуют в запросе grapql? Я знаю по крайней мере один компонент, который уже тестировался в производстве. Если вам нужно решение из коробки (похоже, у вас уже был GraphQL. Net, поэтому он находится под. net stack lib), может быть, например, NReco.GraphQL , может помочь вам решить проблема (просто нужно настроить определения схемы graphql в json -файле и строку подключения к db), которая переводит запрос graphql (даже связанный, даже с агрегатными функциями) в запрос sql с точно такими же полями, что и у вас в запросе graphql.

...