перегрузки аргументов для поля GraphQL

Я пытаюсь реализовать сервер GraphQL с использованием реализации .Net - Соглашения

На сервере я хочу, чтобы моя схема была такой

public class StarWarsQuery
{
    public IEnumerable<Droid> Droids()
    {
        return droidRepository.GetAllDroids();
    }

    public Droid Droids(string name)
    {
        return droidRepository.GetDroidByName(name);
    }
}

public class Droid
{
    string name { get; set;}
}

чтобы запросы от клиента могли выглядеть так

{
   Droids{
     name
   }
}

or

{
   Droids(name:"super droid"){
     name
   }
}

Текущая реализация соглашений выглядит так, как будто она игнорирует перегрузки, созданный граф не содержит строковый аргумент и второй запрос не выполняется.

Кто-нибудь знает, можно ли это сделать с текущей версией? Если нет, то где мне нужно искать точки расширения?


person OrdinaryOrange    schedule 08.07.2017    source источник


Ответы (1)


Соглашения не поддерживают перегрузку методов, поскольку в GraphQL нет способов представить это - насколько мне известно, у вас не может быть двух полей с одинаковым именем и разными подписями.

Если вы измените свой код на следующий, все должно быть в порядке:

public class StarWarsQuery
{
    public IEnumerable<Droid> Droids()
    {
        return droidRepository.GetAllDroids();
    }

    public Droid Droid(string name)
    {
        return droidRepository.GetDroidByName(name);
    }
}

public class Droid
{
    string name { get; set;}
}

Таким образом, вы можете выполнить следующий запрос:

{
  droids{ # note also the lowercase 'd' here
    name
  }
  droid(name:"super droid"){
    name
  }
}
person Tommy    schedule 13.07.2017
comment
Да, после расследования вы правы. Текущая спецификация graphql не позволяет реализовать желаемый тип реализации на сервере. - person OrdinaryOrange; 14.07.2017