我正在构建一个 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; }
}
我想用引用经理ManagerId
的实际对象替换该属性。Employee
我到了这一步;
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 查询,我首先获取员工对象,然后在我知道他或她的 ID 后获取经理对象?此外,如何将父级的上下文传递给解析器,以便它可以获取 ID 属性?