Я создаю 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, необходимо явно передать идентификатор, например, так:
POST /employees
{
Employee(id: 1234) {
id,
firstName,
lastName,
manager(id: 5432) {
firstName,
lastName
}
}
}
Это не работает, потому что ему сначала нужно знать, что такое идентификатор менеджера, прежде чем он сможет это сделать. выполнить этот запрос. Как я могу выполнить этот запрос GraphQL поэтапно, где я сначала получаю объект сотрудника, а затем извлекаю объект менеджера, как только я знаю его или ее идентификатор? Кроме того, как передать контекст родителя в распознаватель, чтобы он мог получить свойство ID?