我想知道是否有可能执行嵌套查询,其中子查询参数基于父结果。
例如基于给定的文档示例
const getLukeRestLink = gql`
query luke {
Luke @rest(type: "Person", path: "people/1/") {
name
films {
film @rest(type: "Film", path: filmUrl) { // the filmUrl is the url that is returned in the films field
title
}
}
}
}
`;
电影是一堆网址。
问是否可以将URL传递给电影查询路径参数?
这是可行的@ Paddy-Hamilton! 使用您的示例代码:
query luke {
Luke @rest(type: "Person", path: "people/1/") {
name
films {
url @export(as: "url")
film @rest(type: "Film", path: ":url") {
title
}
}
}
}
@export(as: …)
指令可让您公开先前选择的数据,以供进一步嵌套的剩余查询使用。 小麻烦:请记住,每个@rest
指令可能都是它自己的网络请求,因此在这种情况下,您将有N + 1个请求,其中N是Luke所在的电影数量。
您可能还会发现pathBuilder
有用,文档现在在tests/restLink.ts
文件中。
电影是URL的数组,它不是包含url属性的对象。
您可以修改此示例吗?
https://codesandbox.io/s/yw2766yl4x
@fbartho感谢您的解释和有关网络请求的奖金提示。
我认为在此示例中使用此嵌套请求方法的需要是由于api的结构所致,因此如果我想获取此数据,则只需要接受多个网络请求即可。 但是,谢谢,这将有助于构建我自己的数据库和api。
@ Paddy-Hamilton我们肯定在嵌套@rest(
查询中支持@export(as:
指令。 阿波罗-链结-休息和阿波罗-链结-状态的混合相互作用是一个非常酷的功能,但是我认为需要在阿波罗-链结的层面上进行讨论。 / cc @peggyrayzis您对这里有任何见解吗?
我不熟悉@match
指令,所以我很乐意讨论该指令的任何指针。
这个问题对我来说还没有解决,请看一下https://codesandbox.io/s/6yv8y2z9v3
它将加载一个网址https://swapi.co/api/https://swapi.co/api/films/2/,https://swapi.co/api/films/6/,https://swapi.co/api/films/3/,https://swapi.co/api/films/1/,https://swapi.co/api/films/7/
问题是电影是一个阵列。 我认为pathBuilder不能解决这个问题。
最有用的评论
这是可行的@ Paddy-Hamilton! 使用您的示例代码:
@export(as: …)
指令可让您公开先前选择的数据,以供进一步嵌套的剩余查询使用。 小麻烦:请记住,每个@rest
指令可能都是它自己的网络请求,因此在这种情况下,您将有N + 1个请求,其中N是Luke所在的电影数量。