GraphQL列表或单个对象

时间:2016-09-21 07:24:05

标签: javascript graphql

我遇到了以下“问题”。我习惯拥有这样的API。

/users
/users/{id}

第一个返回用户列表。第二个只是一个对象。我想和GraphQL一样,但似乎失败了。我得到了以下架构

var schema = new GraphQLSchema({
  query: new GraphQLObjectType({
    name: 'Query',
    fields: {
      users: {
        type: new GraphQLList(userType),
        args: {
          id: {type: GraphQLString}
        },
        resolve: function (_, args) {
          if (args.id) {
            return UserService.findOne(args.id).then(user => [user]);
          } else {
            return UserService.find()
          }
        }
      }
    }
  })
});

如何修改用户类型以返回List或单个对象?

2 个答案:

答案 0 :(得分:8)

您不应将一个字段用于不同目的。而不是那样,做两个字段。一个用于单个对象,另一个用于对象列表。这是更好的练习,更适合测试

else

答案 1 :(得分:-1)

以上答案是正确的,通常的方法是添加单数和复数形式的查询。但是,在大型架构中,这可能会重复很多逻辑,并且可以使用例如Node接口和node,nodes查询进行抽象。但是,通常使用id作为参数来应用节点查询(在Relay viz node Fields中),但是您可以构建自己的抽象方式进行提取,以便只有带有类型参数的节点,并可以根据此说要获取哪种类型的列表。但是,更简单的方法是仅复制每种类型的逻辑,并使用单数和复数形式的查询,并对每种类型执行与上面或在此code snippet中相同的查询。有关在查询中甚至作为突变的输入实现GraphQL list修饰符的更多详细说明。我刚刚发布了article