2017-07-08 4 views
1

Ich versuche, einen GraphQL-Server mit der .NET-Implementierung zu implementieren - ConventionsArgument Überlastungen für GraphQL Feld

Auf dem Server ich mein Schema wie diese

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;} 
} 

so sein will, dass Anfragen von der Kunde kann

{ 
    Droids{ 
    name 
    } 
} 

oder

wie folgt aussehen 0

Die aktuelle Implementierung von Conventions sieht aus, als würde es Überladungen ignorieren, der erzeugte Graph enthält das String-Argument nicht und die zweite Abfrage schlägt fehl.

Weiß jemand, ob dies mit der aktuellen Version gemacht werden kann? Wenn nicht, wo sind die Erweiterungspunkte, die ich betrachten muss?

Antwort

3

Konventionen unterstützen Methodenüberladungen nicht, da es keine Möglichkeiten gibt, diese in GraphQL darzustellen - soweit ich weiß, können Sie nicht zwei Felder mit demselben Namen und unterschiedlichen Unterschriften haben.

Wenn Sie Ihren Code auf die folgenden ändern, sollten Sie allerdings in Ordnung sein:

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;} 
} 

Auf diese Weise können Sie die folgende Abfrage ausführen:

{ 
    droids{ # note also the lowercase 'd' here 
    name 
    } 
    droid(name:"super droid"){ 
    name 
    } 
} 
+0

Ja, nach der Untersuchung Sie richtig sind. Die aktuelle graphql-Spezifikation lässt meinen gewünschten Implementierungstyp auf dem Server nicht zu. – OrdinaryOrange

Verwandte Themen