Преобразовать snake_case в имена полей camelCase в apollo-server-express - PullRequest
0 голосов
/ 21 декабря 2018

Я новичок в GraphQL и Apollo Server, хотя я нашел документацию и Google для ответа.Я использую apollo-server-express для извлечения данных из стороннего REST API.REST API использует snake_case для своих полей.Есть ли простой или канонический способ Apollo Server для преобразования всех разрешенных имен полей в camelCase?

Я бы хотел определить свои типы, используя регистр верблюдов, например:

type SomeType {
  id: ID!
  createdTime: String
  updatedTime: String
}

, но RESTAPI возвращает объект наподобие:

{
  "id": "1234"
  "created_time": "2018-12-14T17:57:39+00:00",
  "updated_time": "2018-12-14T17:57:39+00:00",
}

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

Query: {
    getObjects: () => new Promise((resolve, reject) => {
        apiClient.get('/path/to/resource', (err, response) => {
            if (err) {
                return reject(err)
            }

            resolve(normalizeFields(response.entities))
        })
    })
}

Этот подход кажется подверженным ошибкам, учитывая, что я ожидаю суммурешателей быть значительными.Такое ощущение, что нормализация имен полей не должна быть обязанностью распознавателя.Есть ли какая-либо особенность сервера Apollo, которая позволит мне полностью нормализовать имена полей или переопределить разрешение полей по умолчанию?

Ответы [ 2 ]

0 голосов
/ 22 декабря 2018

Решение, предложенное @Webber, действительно.

Также можно передать параметр fieldResolver в конструктор ApolloServer для переопределения преобразователя полей по умолчанию, предоставляемого пакетом graphql.

const snakeCase = require('lodash.snakecase')

const snakeCaseFieldResolver = (source, args, contextValue, info) => {
  return source[snakeCase(info.fieldName)]
}

const server = new ApolloServer({ 
  fieldResolver: snakeCaseFieldResolver,
  resolvers,
  typeDefs
})

См. Преобразователь полей по умолчанию в graphql исходный код

0 голосов
/ 21 декабря 2018

Я полагаю, что вы можете поместить функцию normalizeFields в промежуточное ПО graphql прямо перед тем, как она вернет результаты на клиентскую сторону.Примерно так: Middleq Graphql .

Промежуточное ПО было бы хорошим централизованным местом для размещения вашей логики, поэтому вам не нужно добавлять функцию каждый раз, когда у вас появляется новый преобразователь.

...