#graphql #graphql-dotnet #graphql.net
#graphql #graphql-dotnet #graphql.net
Вопрос:
В GraphQL .Net большая часть кода примера содержит один объект графика мутаций верхнего уровня, в котором определено много фактических мутаций.
Вот пример со страницы мутаций GraphQL .NET:
public class StarWarsSchema : Schema
{
public StarWarsSchema(IServiceProvider provider)
: base(provider)
{
Query = provider.Resolve<StarWarsQuery>();
Mutation = provider.Resolve<StarWarsMutation>();
}
}
public class StarWarsMutation : ObjectGraphType
{
public StarWarsMutation(StarWarsData data)
{
Field<HumanType>(
"createHuman",
arguments: new QueryArguments(
new QueryArgument<NonNullGraphType<HumanInputType>> {Name = "human"}
),
resolve: context =>
{
var human = context.GetArgument<Human>("human");
return data.AddHuman(human);
});
}
}
И это кажется нормальным, когда у вас 1-5 мутаций, но со временем в некоторых более крупных проектах можно получить десятки мутаций. Для работы кажется достаточным объединить их в один большой класс, хотя также кажется, что не хватает некоторой организации. Я попытался поместить дочернюю мутацию GraphTypeObject в поле родительской мутации, но у меня возникли небольшие проблемы с вызовом субмутации. Возможно, я неправильно настроил его.
Это просто заставляет меня задуматься, конечно, должен быть пользователь с более чем дюжиной мутаций, который мог бы организовать свои мутации, не помещая все свои мутации в один объект мутаций верхнего уровня.
Как сначала организовать более нескольких мутаций в GraphQL .Net GraphType?
Ответ №1:
https://graphql-dotnet.github.io/docs/getting-started/query-organization
Вы можете «группировать» запросы или мутации вместе, добавляя поле верхнего уровня. «Хитрость» заключается в возврате пустого объекта в распознавателе.
public class StarWarsSchema : Schema
{
public StarWarsSchema(IServiceProvider provider)
: base(provider)
{
Query = provider.Resolve<StarWarsQuery>();
Mutation = provider.Resolve<StarWarsMutation>();
}
}
public class StarWarsMutation : ObjectGraphType
{
public StarWarsMutation(StarWarsData data)
{
Field<CharacterMutation>(
"characters",
resolve: context => new { });
}
}
public class CharacterMutation : ObjectGraphType
{
public CharacterMutation(StarWarsData data)
{
Field<HumanType>(
"createHuman",
arguments: new QueryArguments(
new QueryArgument<NonNullGraphType<HumanInputType>> {Name = "human"}
),
resolve: context =>
{
var human = context.GetArgument<Human>("human");
return data.AddHuman(human);
});
}
}
Эта организация отражается в том, как вызываются мутации (или запросы). Если вы просто хотите, чтобы они отображались извне в виде плоского списка (что было бы равно одному гигантскому файлу), вы также можете разбить его на столько файлов, сколько захотите, используя частичные классы.
Комментарии:
1. Спасибо, это было именно то, что я искал.