express-graphql: Как удалить внешний слой объекта «data». - PullRequest
0 голосов
/ 09 мая 2018

Я заменяю существующую конечную точку REST на GraphQL.

В нашей существующей конечной точке REST мы возвращаем массив JSON.

[{
    "id": "ABC"
  },
  {
    "id": "123"
  },
  {
    "id": "xyz"
  },
  {
    "id": "789"
  }
]

Кажется, что GraphQL оборачивает массив в два дополнительных слоя объектов. Есть ли способ удалить слои "data" и "Client"?

Данные ответа:

{
  "data": {
    "Client": [
      {
        "id": "ABC"
      },
      {
        "id": "123"
      },
      {
        "id": "xyz"
      },
      {
        "id": "789"
      }
    ]
  }
}

Мой запрос:

{
  Client(accountId: "5417727750494381532d735a") {
    id
  }
}

1 Ответ

0 голосов
/ 09 мая 2018

Нет. В этом была вся цель GraphQL. Чтобы иметь единственное конечное место и позволить пользователям извлекать другой тип / гранулярность данных, указав входные данные в формате запроса в отличие от API-интерфейсов REST, а затем сопоставить их с возвращенным выводом JSON.

'data' действует как контейнер родительского / корневого уровня для различных запрашиваемых вами сущностей. Без этих ключей в возвращаемых данных JSON не будет никакого способа отделить соответствующие данные. например

Ваш запрос может быть изменен, чтобы включить другую сущность, такую ​​как Владелец,

{
  Client(accountId: "5417727750494381532d735a") {
    id
  }
  Owner {
    id
  }
}

В этом случае на выходе будет что-то вроде

{
  "data": {
    "Client": [
      ...
    ],
    "Owner": [
      ...
    ]
  }
}

Без ключей «Клиент» и «Владелец» в выводе JSON невозможно разделить соответствующие значения массива.

В вашем случае вы можете получить только массив, выполнив data.Client на возвращенном выходе.

...