我正在构建一个API,它允许您在GraphQL中获取分层对象树。这些对象不在数据存储中,而是来自一些上游API。例如:
public class Employee
{
public int Id { get; set; }
public string FirstName { get; set; }
public string Surname { get; set; }
public int ManagerId { get; set; }
}我想用一个引用管理器的实际Employee对象替换ManagerId属性。我走了这么远;
class EmployeeType : ObjectGraphType<Employee>
{
Field(x => x.Id);
Field(x => x.FirstName);
Field(x => x.Surname);
Field<EmployeeType>(
"manager",
arguments: new QueryArguments(new QueryArgument<IdGraphType> { Name = "id" }),
resolve: context =>
{
int id = context.GetArgument<int>("id");
return GetEmployeeById(id);
});
}这个想法是有一个为管理器定制的解析器,它将去并从API中获取它。问题是调用此API的人需要显式传入ID,如下所示;
POST /employees
{
Employee(id: 1234) {
id,
firstName,
lastName,
manager(id: 5432) {
firstName,
lastName
}
}
}这是行不通的,因为他们首先需要知道经理的ID是什么,然后才能执行这个查询。如何分阶段执行这个GraphQL查询,首先获取employee对象,然后在知道他或她的ID后获取经理对象?此外,如何将父对象的上下文向下传递到解析器中,以便它可以获得ID属性?
发布于 2019-10-09 23:11:31
我找到答案了!我可以使用Source属性获取父对象。现在我不需要在解析器中为EmployeeType指定任何参数;我可以这样做:
Field<EmployeeType>(
"manager",
resolve: context =>
{
int id = context.Source.ManagerId;
return GetEmployeeById(id);
});https://stackoverflow.com/questions/58298369
复制相似问题