Написание мутации graphql-client c#
Я пытался написать мутацию, но это дает мне ошибку.
в виде
{"errors":[{"message":"Syntax Error: Expected $, found Name \"objects\"","locations":[{"line":2,"column":27}],"extensions":{"code":"GRAPHQL_PARSE_FAILED"}}]}
Код, который я написал, таков.
[HttpGet("GraphDataCreate")]
public async Task<dynamic> ReturnGraphDataCreate()
{
using var graphQLClient = new GraphQLHttpClient("https://api.spacex.land/graphql/", new NewtonsoftJsonSerializer());
var trial = new GraphQLRequest
{
Query = @"
query insert_users(objects: { name: $name, rocket: $rocket }) {
returning {
id
name
rocket
timestamp
twitter
}
}",
OperationName = "insert_users",
Variables = new
{
name = "AdiAntNam",
rocket = "SPUTNIK5V"
}
};
var graphQLResponse = (object)(null);
try
{
graphQLResponse = await graphQLClient.SendQueryAsync<dynamic>(trial);
}
catch (Exception ex)
{
var err = ex;
string err1 = ex.Message;
string err2 = ex.InnerException.Message;
}
return Task.FromResult(graphQLResponse);
}
Что же мне не хватает в этой части? Ссылка, которую я взял, взята отсюда.
https://github.com/graphql-dotnet/graphql-client
1 ответ
Проблема с примером заключается в том, что записанный тип данных трудно уследить.
PersonAndFilms($id: ID)
теперь ID - это тип данных, поэтому я предполагал, что это просто объявленное имя переменной, поэтому я был в замешательстве.
Итак, я написал это как запрос
insert_users(objects: { name: $name, rocket: $rocket })
что было непонятно для GraphQL, поскольку для него требуется тип данных, поэтому я переписал свой запрос, как показано ниже.
var trial = new GraphQLRequest
{
Query = @"
mutation xyz($nameU: String, $rocketU: String)
{
insert_users(objects: { name: $nameU , rocket: $rocketU })
{
returning
{
id
name
rocket
timestamp
twitter
}
}
}",
OperationName = "xyz",
Variables = new
{
nameU = "AdiAntNam2",
rocketU = "SPUTNIK5V"
}
};
Теперь мутация
xyz($nameU: String, $rocketU: String)
он читает правильный тип данных. Пример верен кое-что в проекте, но сбивает с толку конечного пользователя, так как
$id: ID
не очень понятно, поэтому лучше использовать пример, как мой.