创建具有可索引字段签名的 GraphQLObjectType?
Creating a GraphQLObjectType with an indexable field signature?
我目前正在将 REST API 转换为 GraphQL,但我在其中一个端点遇到了一些障碍。
目前,这个端点returns一个对象,其键可以是一组无限的字符串,其值都匹配特定的形状。
所以,作为一个基本的例子,我有这种情况......
// 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 可以实现这种事情吗?我将如何为此创建一个 type/schema?
提前致谢!
我认为一种解决方案是使用 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 中 - 否则您将不得不使用其他方法的等效方法解析传入 JSON
响应的语言)。
这种解决方案的缺点是您无法选择要从查询中检索 obj
的哪些字段,但是,正如您所说,返回的对象可以有无限的集合应用程序前端可能不知道的字符串,因此无需选择它的键,对吗?
我目前正在将 REST API 转换为 GraphQL,但我在其中一个端点遇到了一些障碍。
目前,这个端点returns一个对象,其键可以是一组无限的字符串,其值都匹配特定的形状。
所以,作为一个基本的例子,我有这种情况......
// 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 可以实现这种事情吗?我将如何为此创建一个 type/schema?
提前致谢!
我认为一种解决方案是使用 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 中 - 否则您将不得不使用其他方法的等效方法解析传入 JSON
响应的语言)。
这种解决方案的缺点是您无法选择要从查询中检索 obj
的哪些字段,但是,正如您所说,返回的对象可以有无限的集合应用程序前端可能不知道的字符串,因此无需选择它的键,对吗?