深度融合的碎片



我正在使用GraphQL API(我不拥有(来访问数据。我大量使用片段,我不止一次遇到的一个问题是片段似乎无法深度融合。考虑以下查询:

fragment BasicInfo on Person {
id
name
address {
city
country
}
}
query ProfileCard($id: ID) {
personById(id: $id) {
...BasicInfo
id
age
address {
streetName
streetNumber
}
}
}

在这里,我们运行一个基本查询,从个人资料卡中获取一些信息,包括此人的年龄和一些地址(街道名称和号码(。简档卡使用的另一个组件也想要一些可以在BasicInfo片段中找到的信息。这包括他们的名字以及他们的城市和国家。

运行此查询将返回一个包含以下字段的对象:idnameageaddress.streetNameaddress.streetNumber

address.cityaddress.country都丢失了——查询似乎没有深度合并片段,只是在浅层插入了它。

是否可以强制我的碎片深度合并这甚至是预期的行为吗?我是否必须与API所有者联系以更正此问题?

我很难找到这样或那样的文档。

我刚刚在使用@apollo/client时遇到了类似的问题,有趣的是,它也与地址模型有关。我的第二个片段似乎被完全忽略了,没有被合并。我在下面写了一个foobar代码示例:

type Request = {
id: string
stops: Array<Stop>
}
type Stop = {
id: string;
address: Address;
}
type Address = {
id: string;
address1: string;
name: string;
}
const ROOT_FRAGMENT = gql`
fragment foo_Request on Request {
id
stops {
...bar_Stop
...qux_Stop
}
${STOP_FRAGMENT_1}
${STOP_FRAGMENT_2}
}
`;
const STOP_FRAGMENT_1 = gql`
fragment bar_Stop on Stop {
id
address {
id
address1
}
}
}
`;
const STOP_FRAGMENT_2 = gql`
fragment qux_Stop on Stop {
id
address {
id
name
}
}
}
`;
/*
expected: 
{
id: "request-1"
stops: [
{
id: "stop-1",
address: {
id: "address-1",
address1: "123 my way",
name: "Home",
},
},
],
}
actual: 
{
id: "request-1"
stops: [
{
id: "stop-1",
address: {
id: "address-1",
address1: "123 my way",
},
},
],
}
*/

请尝试使用别名。类似的东西

fragment BasicInfo on Person {
id
name
cityCountryAddress: address {
city
country
}
}

最新更新