所以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 次 |
| 最近记录: |