简体   繁体   中英

GraphQL Root Query: Same schema, different types

I'm pretty new to GraphQL and within my root query I have two fields that are very similar aside from their "type" property, that I would like to combine.

allPosts returns an array of post objects, while post returns a single post.

Each field is using the same schema, and the loaders/resources are being determined within those respective fields based on the argument passed in.

const RootQuery = new graphql.GraphQLObjectType({
    name: 'Query',
    description: 'Root Query',
    fields: {
      allPosts: {
          type: new graphql.GraphQLList(postType),
          args: {
              categoryName: {
                  type: graphql.GraphQLString
              }
          },
          resolve: (root, args) => resolver(args)
      },
      post: {
          type: postType,
          args: {
              slug: {
                  type: graphql.GraphQLString
              }
          },
          resolve: (root, args) => resolver(args)
      },
});

Is it possible to combine these two fields into one and have the type determined by the argument passed in or another variable?

No, you can't!

Once you define a field as GraphQLList , you always get an array. There is no chance that you suddenly get an object instead of array of . Same apply to other case when you define field as GraphQLObjectType (or any other scalar type) and you want get an array as result.

Those two fields have really different purposes.

Anyway, you can always add a limit logic to your allPosts field and limit the result to one. But, nevertheless you get always array with only one post

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM