Apollo / GraphQL Same Query with Different Parameters

两盒软妹~` 提交于 2019-12-11 03:36:08

问题


How would I go about having an Apollo query with different parameters. Let's say my app has the concept of users and I want my API to be able to find a user either by ID or username.

It doesn't seem I can do this

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

do I have to resort to something like this

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

回答1:


Create a new input type with ID and username as fields and specify it as parameter.

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

input UserFilter{
    ID : Int,
    Username : String
}

Query should look like this ...

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

OR for username filter

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



回答2:


I believe your second option is the best however you could do something like this.

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

If the parameters are not required then your resolver could use some logic to determine if it should get the user based on the id or the username.

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

However for reasons gone over in this talk https://youtu.be/pJamhW2xPYw?t=750 (maybe see at about 12:30), I believe your second option is a better design choice. Hope that helps!



来源:https://stackoverflow.com/questions/53951318/apollo-graphql-same-query-with-different-parameters

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!