Как правильно выполнить динамическую фильтрацию с помощью Graphql-Java?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как правильно выполнить динамическую фильтрацию с помощью Graphql-Java?

Сообщение Anonymous »

Предположим, что, используя приведенную ниже схему, как запрос groups, так и коллекция участников (из типа Team) привязаны к данным, обслуживаемым различными службами с помощью BatchLoaders . Кроме того, давайте предположим, что эти сервисы не предлагают никакого механизма, а уровень GraphQL просто сшивает два набора данных.

Код: Выделить всё

type Query {
teams(teamID:Int, namePrefix:String):[Team]
}

type Team {
id: Int
name: String!
members: [User]
}

type User {
id: ID!
name: String!
teamId: Int!
team: [Team]
}
Цель состоит в том, чтобы получить только команды и участников, имя которых равно «Джон», при выполнении следующего запроса:

Код: Выделить всё

query {
teams {
id
name
members {
id
name
}
}
}
данные команд:

Код: Выделить всё

[
{
"id": 1,
"name": "Team A",
},
{
"id": 2,
"name": "Team B",
}
]
данные пользователя:

Код: Выделить всё

[
{
"id": 10,
"name": "John",
"teamId": 1
},
{
"id": 20,
"name": "Dave",
"teamId": 1
},
{
"id": 30,
"name": "Bob",
"teamId": 2
}
]
ожидаемый результат:

Код: Выделить всё

{
"data": {
"teams": [
{
"id": 1,
"name": "Team A",
"members": [
{
"id": 10,
"name": "John"
},
]
}
]
}
}
Вопрос: существует ли какой-либо стандартизированный способ решения этой проблемы? Если нет, то какой подход наиболее целесообразен?
Я понимаю, что для этого мы можем использовать директивы времени выполнения, и в настоящее время я оценил два подхода с использованием графа grql-java :
  • Используйте DirectiveWiring и оберните сборщик данных кодом, выполняющим фильтрацию;
  • Используйте SimplePerformantInstrumentation и манипулируйте результатом, используя инструментExecutionResult;
В варианте 1 существует проблема, заключающаяся в том, что коллекция членов еще не будет решено, учитывая, что BatchLoader еще не выполнялся, а в варианте 2 единственный способ выполнить фильтрацию, который я нашел, - это повторно просмотреть данные из ExecutionResult и выполнить фильтр поиска в глубину ненужные элементы из ответа.

Подробнее здесь: https://stackoverflow.com/questions/787 ... aphql-java
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»