GraphQL SPQR - Как получить список полей, запрошенных клиентом с помощью запроса - PullRequest
2 голосов
/ 08 мая 2020

есть ли способ получить список полей, запрошенных клиентом в запросе GraphQL?

Предположим, у меня есть следующие типы:

type Book {

  isbn: String
  title: String
  genre: String
  author: Author
}

type Author {

  name: String
  surname: String
  age: Int
}

Есть ли способ на стороне Java внутри метода, аннотированного с помощью @GraphQLQuery, узнать, что поля были запрошены клиентом?

Например, имея следующие запросы:

query {

  book ( isbn = "12345" ) {
  
    title
    genre
  }
}

query {

  book ( isbn = "12345" ) {
  
    title
    author {
    
      name
      surname
    }
  }
}

Я могу знать, что в первом запросе запрашивались поля заголовок и жанр Книги, а второе требуемое название из Книги, а также имя и фамилия автора?

Спасибо, Массимо

1 Ответ

2 голосов
/ 08 мая 2020

Вы можете получить эту информацию через @GraphQLEnvironment. Если вам просто нужны немедленные подполя, вы можете ввести такие имена:

@GraphQLQuery
public Book book(String isbn, @GraphQLEnvironment Set<String> subfields) {
    ...
}

Если вам нужны все подполя или другая информация о выборе, вы можете ввести ResolutionEnvironment и получить оттуда DataFetcherEnvironment . Это, в свою очередь, дает вам доступ ко всему SelectionSet.

@GraphQLQuery
public Book book(String isbn, @GraphQLEnvironment ResolutionEnvironment env) {
    DataFetchingFieldSelectionSet selection = env.dataFetchingEnvironment.getSelectionSet();
     ...
}
...