【问题标题】:Hot Chocolate top-level properties from multiple sources来自多个来源的热巧克力顶级属性
【发布时间】:2022-11-05 00:27:50
【问题描述】:

我有一个实体(客户)需要从多个来源提取数据。架构大致如下所示:

{
   id: string
   name: string
   address: string
   contact: string
   status: string
}

idnameaddress 来自 EF 数据上下文。 contactstatus 字段来自单身的REST 端点,如下所示:

GET /url/customer?id=1234
{
  id: '1234'
  contact: 'joe@bloggington.com'
  status: 'ACTIVE'
}

如果我将contactstatus 都放入单个字段/对象(即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;
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2022-10-25
      • 2020-12-22
      • 2021-11-24
      • 2020-07-08
      • 2020-11-13
      • 1970-01-01
      • 2022-01-04
      • 2020-08-21
      • 2021-09-09
      相关资源
      最近更新 更多