我正在使用Nodejs调用一个报告API,它给我一个JSON的响应。api可以用不同的ID调用(在这种情况下是不同的报告ID)。例如:
https://report.domain.io/report/1
https://report.domain.io/report/2
依此类推。由于id在不同的时间会给我不同的响应。属性/s的名称会不同。所以我不能将其映射到GraphQLObjectType中。例如,如果JSON响应如下:
[
{
"modelbrand": "Sony",
"modelcode": "F3111",
"avg_free_storage": 225401514
},
{
"modelbrand": "Sony",
"modelcode": "F3111",
"avg_free_storage": 224547840
}
]
然后我可以用GraphQL映射它,如下所示:
Report() {
return new graphql.GraphQLObjectType({
name: "Report",
description: "This represents report",
fields: () => ({
"modelbrand": {type: graphql.GraphQLString},
"modelcode": {type: graphql.GraphQLString},
"avg_free_storage": {type: graphql.GraphQLString}
})
});
}
因为我知道属性是固定的。但是如果属性/s的名称(如模型品牌,模型代码)更改为其他内容(显然它会因不同的报告而不同),那么我无法在GraphQLObjectType中映射它。在这种情况下,我需要另一种类型(应该是JSON类型)来映射这些响应。不幸的是,它不能作为GraphQL的原始类型。我没有找到任何自定义/标量类型或节点库来解决这个问题。堆栈溢出有一个解决方案,但似乎它不起作用。
我可以得到一个解决方案吗?一个Nodejs示例将不胜感激。谢谢。
请参考这个graph ql-type-json。这可以用作自定义标量json类型。
在模式文件
scalar JSON
type User {
id: ID!
userDetails: JSON
}
type Query {
getUser(id: ID!): User
}