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

时间:2018-12-27 22:05:30

标签: graphql apollo-server

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

看来我无法做到

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

我必须诉诸类似的东西

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

2 个答案:

答案 0 :(得分:2)

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

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左右)中提到的原因,我相信您的第二个选择是更好的设计选择。希望有帮助!

答案 1 :(得分:2)

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

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

查询应如下所示

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

或用于用户名过滤器

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>