【发布时间】:2015-11-17 06:09:07
【问题描述】:
我正在测试 sangria 来构建一个 graphql/relay 服务器。我有一个非常简单的 User 类:
case class User(
id: Int,
username: String,
gender: Gender.Value)
我想允许通过 ID 或用户名进行查询。我已经创建了一个允许这样做的架构,但字段有不同的名称:
val Query = ObjectType(
"Query", fields[UserRepo, Unit](
Field("user", OptionType(User),
arguments = ID :: Nil,
resolve = ctx => ctx.ctx.getUser(ctx arg ID)),
Field("userByUsername", OptionType(User),
arguments = Username :: Nil,
resolve = ctx => ctx.ctx.getUserByUsername(ctx arg Username))
))
不幸的是,我需要使用不同的字段名称来查询这些,user 和 userByUsername,例如:
curl -G localhost:8080/graphql
--data-urlencode 'query={userByUsername(username: "Leia Skywalker") {id, username, gender}}'
或
curl -G localhost:8080/graph
--data-urlencode "query={user(id: 1025) {id, username, gender}}"
如何创建一个架构,允许在 ID 或用户名上查询名为 user 的单个字段?例如。以下两个都应该返回相同的用户对象:
curl -G localhost:8080/graphql
--data-urlencode 'query={user(username: "Leia Skywalker") {id, username, gender}}'
或
curl -G localhost:8080/graph
--data-urlencode "query={user(id: 1025) {id, username, gender}}"
【问题讨论】: