оптимизация решателя графа

Если у меня есть схема:

type Query {
  posts: [Post!]!
}
type Post {
  title: String!
  lotsofdata: String
}

и резольвер:

function posts(parent, args, context, info) {
  return readAllPosts(/*?*/)
}

И два возможных запроса. Запрос №1:

query {
  posts{
    title        
  }
}

и запрос №2:

query {
  posts{
    title 
    lotsofdata
  }
}

Можно ли оптимизировать преобразователь таким образом, чтобы запрос № 1 readAllPosts извлекал только заголовки из базы данных, а для запроса № 2 он извлекал и заголовки, и множество данных?

Я просмотрел аргументы parent, args, context и info, но не вижу ничего, что указывало бы на то, вызывается ли преобразователь в ответ на запрос типа №1 или №2.


person Adam Griffiths    schedule 28.03.2018    source источник
comment
Только что нашел этот github.com/graphql/graphql-js/issues/19 что кажется актуальным, но пару лет назад. Буду признателен за любой совет, как сделать это с помощью новейших инструментов graphql.   -  person Adam Griffiths    schedule 29.03.2018


Ответы (1)


не уверен, что это все еще актуально для вас, но это должно быть возможно, вы можете взглянуть на библиотеку под названием https://github.com/robrichard/graphql-fields#readme. Он проанализирует информационный аргумент в вашей функции распознавателя. Таким образом, вы можете получить информацию о выполненных полях в вашем преобразователе. Другая часть - использовать эту информацию для построения правильного оператора SQL или проекции или чего-то еще (в зависимости от того, какую базу данных вы используете). Я надеюсь, что это поможет. Лучший Дэвид

person David Mraz    schedule 17.08.2018
comment
Совершенно верно. Вам понадобятся Object.keys для данных, проанализированных в графических полях. - person Dan Crews; 21.08.2018