Работа с типом объектов в поле GraphQL - PullRequest
0 голосов
/ 05 ноября 2018

Я думаю, что мне чего-то не хватает в документах, но я не уверен, как обращаться с объектами как с типом в новом GraphQLObjectType. Я пытаюсь настроить запросы данных о погоде из этого образца данных , и я не уверен, как обрабатывать вложенные объекты. В настоящее время у меня есть:

// Creating a Type for the Weather Object
const WeatherType = new GraphQLObjectType({
    name: 'Weather',
    fields: () => ({
        weather: { type: GraphQLObject? },
    })
});

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

// Creating a Type for the Weather Object
const WeatherType = new GraphQLObjectType({
    name: 'Weather',
    fields: () => ({
        weather: { 
            main: { type: GraphQLString },
            // And so on
        },
    })
});

Есть ли ссылки на примеры этого?

1 Ответ

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

При построении схемы с вложенными пользовательскими типами вы просто устанавливаете тип поля на ссылку вашего другого созданного типа:

const WeatherType = new GraphQLObjectType({
  name: 'Weather',
  fields: {
    id: {
      type: GraphQLInt,
    }
    main: {
      type: GraphQLString,
    }
    description: {
      type: GraphQLString,
    }
    icon: {
      type: GraphQLString,
    }
  }
})

const MainType = new GraphQLObjectType({
  name: 'Main',
  fields: {
    temp: {
      type: GraphQLFloat,
    }
    pressure: {
      type: GraphQLFloat,
    }
    humidity: {
      type: GraphQLFloat,
    }
    tempMin: {
      type: GraphQLFloat,
      resolve: (obj) => obj.temp_min
    }
    tempMax: {
      type: GraphQLFloat,
      resolve: (obj) => obj.temp_max
    }
  }
})

const WeatherSummaryType = new GraphQLObjectType({
  name: 'WeatherSummary',
  fields: {
    weather: {
      type: new GraphQLList(WeatherType),
    }
    main: {
      type: MainType,
    }
  }
})

Будьте осторожны при формировании существующих ответов JSON в схемах GraphQL - это легко пережить из-за различий в структуре. Например, поле main в вашем примере ответа является объектом, но поле weather на самом деле является массивом, поэтому мы должны заключить его в GraphQLList при указании типа для поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...