Есть ли способ сгруппировать запросы в GraphQL? - PullRequest
0 голосов
/ 28 сентября 2018

Я пытаюсь сгруппировать запросы graphQL, чтобы получить более организованный ответ.

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

GraphQL Query

{
    Employees:allEmployees{
        id
        firstName
        lastName    
    }
}

Ответ

{
    "data": {
        "Employees": [
            "new":[
                {
                    "id": "1",
                    "firstName": "James",
                    "lastName": "Test"
                },
                {
                    "id": "3",
                    "firstName": "Charles",
                    "lastName": "Tes"
                }
            ],
            "updated":[
                {
                    "id": "4",
                    "lastName": "Test"
                },
            ],
            "deleted":[
                {
                    "id": "1",
                },
            ],
        }
    }
}

Я рассмотрел несколько вариантов получения именованного подзапроса (например, нового, обновленного и удаленного) с помощью псевдонимов фрагментов, но это не похоже набыть вещьюЯ смотрел на союзы, но это не то, что я искал.

В идеале я хотел бы запросить graphql как ...

{
    Employees:{
        new: allEmployees(status:"new"){
            id
            firstName
            lastName    
        }

        updated: allEmployees(status:"updated"){
            id
            firstName
            lastName    
        }

        deleted: allEmployees(status:"deleted"){
            id
        }
}

но яне думайте, что можно пропустить такой вложенный запрос.

Есть ли способ сделать что-то подобное?Я использую graphql с ruby ​​через gem graphql-ruby.

Пожалуйста, дайте мне знать, если кому-то нужна дополнительная информация?

Спасибо


Редактировать

Чтобы уточнить.У нас есть несколько объектов, которые будут следовать новому, обновленному, удаленному шаблону.Нужно попытаться получить ответ, в котором результаты вложены в родительское имя / псевдоним (Сотрудники, Пользователи)

{
    "data": {
        "Employees": [
            "new":[...],
            "updated":[...],
            "deleted":[...],
        ],
        "Users": [
            "new":[...],
            "updated":[...],
            "deleted":[...],
        ],
         ...                   
}

Именно поэтому мы хотим вкладывать

Ответы [ 2 ]

0 голосов
/ 30 сентября 2018

Я думаю, что ваши ожидания в отношении ответа очень вдохновлены использованием ruby.Я видел это ранее в некоторых проектах;) «Давайте упакуем все в один запрос, это оптимально» и «распределим данные ответов по компонентам».

Разработчики Ruby часто воспринимают реакцию как другой механизм шаблонов, отказываясь от него,отдельная жизнь, не разделяющая забот, не возлагает на себя ответственность за клиентское приложение.Один маршрут, одно представление, простое взаимодействие, нет истинного SPA ... и, наконец, плохой UX / удобство использования.Они слепы к этому: D

Клиент Apollo будет пакетировать отдельные запросы, будет хранить ответы в нормализованном кэше - нет необходимости делать это на бэкэнде .

0 голосов
/ 29 сентября 2018

GraphQL определенно поддерживает вложенные запросы и множественные запросы верхнего уровня, и graphql-ruby прекрасно их поддерживает.

Если ваша схема GraphQL выглядит следующим образом:

type Employee {
  id: ID!
  firstName: String
  lastName: String
}
enum Status { NEW, UPDATED, DELETED }
type Query {
  allEmployees(status: Status): [Employee!]!
}

, тогда вы могли бы написатьзапрос

fragment EmployeeData on Employee { id firstName lastName }
query Everyone {
  new: allEmployees(status: NEW) { ... EmployeeData }
  updated: allEmployees(status: UPDATED) { ... EmployeeData }
  deleted: allEmployees(status: DELETED) { ... EmployeeData }
}

Это не будет иметь конкретной формы, которую вы ищете - нет хороших способов добавить или удалить произвольные уровни в вашем запросе, такие как добавление метки «Сотрудники» илиудаление слоев из записей подключений в стиле React, но при этом можно получить данные, которые вы ищете.

...