我目前正在将REST API转换为GraphQL,但我在其中一个端点遇到了一些障碍。
目前,此端点返回一个对象,该对象的键可以是一组无限的字符串,而且所有值都匹配某个形状。
所以,作为一个基本的例子,我有这种情况......
// response
{
foo: { id: 'foo', count: 3 },
bar: { id: 'bar', count: 6 },
baz: { id: 'baz', count: 1 },
}
同样,密钥在运行时是未知的,可以是一组无限的字符串。
例如,在TypeScript中,通过使用可索引字段签名创建接口来处理这种情况,如此......
interface Data {
id: string;
count: number;
}
interface Response {
[key: string]: Data;
}
所以,我的问题是:graphql有可能这样吗?我将如何为此创建类型/架构?
提前致谢!
答案 0 :(得分:0)
我认为一种解决方案可以使用JSON.stringify()
方法
exampleQuery: {
type: GraphQLString,
resolve: (root, args, context) => {
let obj = {
foo: { id: 'foo', count: 3 },
bar: { id: 'bar', count: 6 },
baz: { id: 'baz', count: 1 }
};
return JSON.stringify(obj);
}
}
然后,在检索GraphQL查询的结果后,您可以使用JSON.parse(result)
(如果执行查询的部分也是用JavaScript编写的 - 否则您将不得不使用其他语言的等效方法来解析传入的{ {1}}回复)。
这种解决方案的缺点是您无法选择要从查询中检索的JSON
字段,但正如您所说,返回的对象可以具有无限的字符串集可能在应用程序的前端不知道,所以没有必要选择它的键,我是对的吗?