我有一个有两个字段的 graphql 查询。它们来自单独的、缓慢的源,其中一个或两个可能会导致错误,在本例中表示为 null。
如果一个或两个字段都不为空,那么我想返回我可以返回的值。如果两者都为 null,那么我想返回 GraphQL 错误。我可以使用这样的查询来做到这一点:
[ExtendObjectType(OperationTypeNames.Query)]
public class FooQuery
{
[GraphQLName("searchFoo")]
public async Task<Foo> SearchFoo(FooRequest request)
{
var foo = new Foo {
Bar = GetBar(), // Slow, may return null
Baz = GetBaz() // Slow, may return null
}
if (Bar == null && Baz == null) {
throw new GraphQLException(...);
}
return foo;
}
}
用户可能只对
Bar
感兴趣,因此未在其请求中包含 Baz
。
问:有没有办法可以检测到所要求的字段,并快捷地处理
Baz
?
我知道这意味着
Bar
的错误响应将导致整个查询返回错误,即使数据实际上可用于 Baz
。我们已经有客户端调用此查询,所以我不想将其拆分为单独的查询,因为这需要更改我无法控制的客户端代码。
这可以通过 Hot Chocolate 14 中的选择 api 来完成。
这是一个 YouTube 片段,展示了它是如何工作的。 https://youtu.be/XZVpimb6sKg