Свести ответ Apollo GraphQL (поле данных) - PullRequest
0 голосов
/ 05 октября 2018

Клиенту нужна определенная структура JSON, которую я хотел предоставить в ответе GraphQL.

К сожалению, мне нужно избавиться от поля «данных» верхнего уровня и сгладить ответ для этого клиента.

Есть ли способ сделать это с помощью резольвера?

От:

{ 
   "data" : {
      "myKey": 
         {...}
   }
}

Кому:

{ 
   "myKey": 
      {...}
}

Спасибо!

1 Ответ

0 голосов
/ 05 октября 2018

Технически * возможно, используя опцию formatResponse, переданную в конструктор ApolloServer:

const formatResponse = ({ data, errors }) => data
const server = new ApolloServer({ typeDefs, resolvers, formatResponse })

или сделать это для конкретного запроса (например,status), вы можете сделать:

    const formatResponse = res => {
      if (res.data && res.data.status) return res.data
      return res
    }

Тем не менее, я бы настоятельно рекомендовал против такого подхода по двум основным причинам.Во-первых, это нарушает спецификацию, что делает ваш API несовместимым с большинством клиентских библиотек, предназначенных для явной работы с API-интерфейсами GraphQL.Во-вторых, это оставляет вам необходимость либо вносить ваши ошибки (валидацию или иным образом) в ваши фактические данные где-либо, либо вообще их исключать.

Трудно представить сценарий, когда извлечение данных из ответа не должноне будет сделано клиентским приложением - и если у вас есть трудности с этим в конкретной среде, это звучит как хороший дополнительный вопрос!

...