Apollo / GraphQL 具有不同参数的相同查询

Apollo / GraphQL Same Query with Different Parameters

我将如何使用不同的参数进行 Apollo 查询。假设我的应用有用户的概念,我希望我的 API 能够通过 ID 或用户名找到用户。

这个好像不行

type Query {
  user(id: ID!): User
  user(username: String!): User
}

我必须求助于这样的东西吗

type Query {
  userById(id: ID!): User
  userByUsername(username: String!): User
}

我相信你的第二个选择是最好的,但是你可以这样做。

type Query {
  user(id: ID, username: String): User
}

如果不需要参数,那么您的解析器可以使用一些逻辑来确定它是否应该根据 ID 或用户名获取用户。

if (args.id) {
  return getUserById(args.id)
} else {
  return getUserByUsername(args.username)
}

然而,由于本次演讲中讨论的原因 https://youtu.be/pJamhW2xPYw?t=750(可能会在 12:30 处看到),我相信您的第二个选择是更好的设计选择。希望对您有所帮助!

创建一个以 ID 和用户名作为字段的新输入类型,并将其指定为参数。

type Query {
  getUser(filters:UserFilter): User
}

input UserFilter{
    ID : Int,
    Username : String
}

查询应如下所示...

Query{
 getUser(filters:{ID:123123})
}

或用于用户名过滤器

Query{
 getUser(filters:{Username:"Tom"})
}