我有一个REST API服务器的API响应,我使用REACT + Apollo和apollo-link-rest进行了调用。但是API的响应看起来像这样
[
[
{
"name": "joe"
"address": "123 street hello city"
},
{
"name": "joe2"
"address": "1233 street2 hello2 city"
}
],
2356
]
如何使用这种响应创建查询,该查询的数组的最后一项是数字,而数组的第一项则由用户列表组成?
到目前为止,我只有这个查询。
const QueryTest = gql`
query people {
people @rest(type: "People", path: "/allpersons")
}
`;
答案 0 :(得分:0)
第一个:您需要在name
查询(内部)中使用address
和people
道具-“询问您需要什么”-以获取结果。
2nd:使用apollo-link-rest
通常需要type patching-一种用于使现有(REST)响应适应/转换为当前需求(结构)的技术。可以将其与response transformer结合使用,但不需要执行此步骤。
有时您需要为嵌套类型(阿波罗标准化缓存要求)添加id
(从其他字段计算,是唯一的)或在所需/必需类型之上定义其他“响应类型”-Google以获取类型补丁示例(例如patchDeeper
用法)或教程...定义修补程序,使用调试器...
当您知道期望什么/需要什么时,要容易得多-将响应与有效的graphql响应进行比较。
答案 1 :(得分:0)
遇到同样的问题,您可以在链接中使用 responseTransformer
来转换响应。
const restLink = new RestLink({
uri: '...',
responseTransformer: async response =>
response.json()
.then((data: any) => {
if (Array.isArray(data)) return { data }
else return data
})
});
所以你应该能够像这样使用查询:
const QueryTest = gql`
query people {
people @rest(type: "People", path: "/allpersons") {
data
}
}
`;
其中 data
将包含:
[
[
{
"name": "joe"
"address": "123 street hello city"
},
{
"name": "joe2"
"address": "1233 street2 hello2 city"
}
],
2356
]