【问题标题】:Hot Chocolate top-level properties from multiple sources来自多个来源的热巧克力顶级属性
【发布时间】:2022-11-05 00:27:50
【问题描述】:
我有一个实体(客户)需要从多个来源提取数据。架构大致如下所示:
{
id: string
name: string
address: string
contact: string
status: string
}
id、name 和 address 来自 EF 数据上下文。 contact 和 status 字段来自单身的REST 端点,如下所示:
GET /url/customer?id=1234
{
id: '1234'
contact: 'joe@bloggington.com'
status: 'ACTIVE'
}
如果我将contact 和status 都放入单个字段/对象(即ContactStatus),那么为Customer 创建扩展名将是一个简单的案例。但这些领域并不相关,应该被视为不同顶层字段。
有没有办法确保在获取所有值时只调用一次 REST 端点?在获取一个或另一个时基本上解决了这两个字段?
Hot Chocolate v12.15.0, net6.0
【问题讨论】:
标签:
graphql
.net-6.0
hotchocolate
【解决方案1】:
是的,您可以使用批处理 api 来执行此操作
创建一个从 REST 端点加载数据的 DataLoader。这样,您还可以优化从其余端点的提取(如果端点支持 /url/customer?ids=1234,2345,5930 之类的东西)
例如class YourDataloader extends BatchDataLoader<int, AdditionalCustomerData>
然后你可以做
[ExtendObjectType<Customer>]
public class CustomerExtensions
{
public Task<string> GetContactAsync(
[Parent]Customer customer,
YourDataloader dataloader)
{
var result = await dataloader.LoadAsync(customer.Id);
return result.Contact;
}
public Task<Status> GetStatusAsync(
[Parent]Customer customer,
YourDataloader dataloader)
{
var result = await dataloader.LoadAsync(customer.Id);
return result.Status;
}
}