所以GraphQL
如果可能的话,我正在尝试做一个这样的事情:
{
people {
_id
name
acted {
_id
title
coactors {
name
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以我正在做的事情是让演员(人),然后让他们表演的电影,效果很好。所以我试图让那部电影中的合作演员。我正在考虑将当前演员的 id 作为这样的参数传递给 co-actors 字段:
{
people {
_id
name
acted {
_id
title
coactors(actor: people._id) {
name
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
显然,我收到了一个错误,不知道是否可以在内部进行。
所以这是我的类型:
const MovieType = 新 GraphQLObjectType({ name: '电影', 字段:() => ({ _ID: { 类型:GraphQLInt }, 标题: { 类型:GraphQLString }, 标语: { 类型:GraphQLString }, 发布:{ 类型:GraphQLInt }, 演员:{ 类型:新的 GraphQLList(PersonType), 解决:(电影)=> { 返回 []; } }, 合作者:{ 类型:新的 GraphQLList(PersonType), 参数:{ 演员:{ 类型:GraphQLInt } }, 解决:(电影,参数)=> { getCoActorsFor(movie, args.actor) // 我该如何做这样的事情 .then((演员) => { 回归演员; }) } } }) }); const PersonType = new GraphQLObjectType({ name: '人', 字段: ()=> ({ _ID: { 类型:GraphQLInt }, 姓名: { 类型:GraphQLString }, 出生:{ 类型:GraphQLInt }, 扮演:{ 类型:新的 GraphQLList(MovieType), 解决:(人)=> { 返回 []; } } }) });
如果不将查询分成两个查询,这是不可能的,因此您可以将第一个的结果作为变量提供给第二个。
代替使用变量,您可以让“acted”返回的电影对象包含对演员的引用,例如当您要求“coactors”时,您手头有该信息来做您想做的事情。
然而,这种类型的 API 也是一种反模式——如果子对象依赖于来自父对象的上下文,那么缓存和理解就会困难得多。我认为您应该问自己为什么 Movie 对象除了返回演员之外还必须返回合作演员。如果 coactors 只是相同的 actor 列表,但删除了原始 actor,这似乎很容易发生在客户端上,因为上下文信息更容易获得。
归档时间: |
|
查看次数: |
4562 次 |
最近记录: |