2015-08-23 5 views
6

Ich spiele derzeit mit einer Reihe von neuen Technologien von Facebook.Wie erstellt man eine Liste von benutzerdefinierten Objekten in GraphQL

ich habe ein kleines Problem mit GraphQL Schemata. Ich habe dieses Modell eines Objekts:

{ 
     id: '1', 
     participants: ['A', 'B'], 
     messages: [ 
      { 
       content: 'Hi there', 
       sender: 'A' 
      }, 
      { 
       content: 'Hey! How are you doing?', 
       sender: 'B' 
      }, 
      { 
       content: 'Pretty good and you?', 
       sender: 'A' 
      }, 
     ]; 
    } 

Jetzt möchte ich für dieses eine GraphQL Modell erstellen. Ich tat dies:

var theadType = new GraphQLObjectType({ 
    name: 'Thread', 
    description: 'A Thread', 
    fields:() => ({ 
    id: { 
     type: new GraphQLNonNull(GraphQLString), 
     description: 'id of the thread' 
    }, 
    participants: { 
     type: new GraphQLList(GraphQLString), 
     description: 'Participants of thread' 
    }, 
    messages: { 
     type: new GraphQLList(), 
     description: 'Messages in thread' 
    } 

    }) 
}); 

Ich weiß, dass es elegantere Möglichkeiten gibt, die Daten an erster Stelle zu strukturieren. Aber um es auszuprobieren, wollte ich es so versuchen.

Alles funktioniert gut, außer meine Nachrichten Array, da ich nicht die Array-Typ angeben. Ich muss angeben, welche Art von Daten in dieses Array geht. Aber da es ein benutzerdefiniertes Objekt ist, weiß ich nicht, was ich in die GraphQLList() übergeben soll.

Jede Idee, wie dieses Problem zu beheben neben eine eigene Art von Nachrichten zu schaffen?

Antwort

7

Sie können Ihre eigenen messageType auf die gleiche Weise theadType definiert definieren, und dann tun Sie new GraphQLList(messageType) angeben Der Typ Ihrer Nachrichtenliste.

+0

Danke für die Antwort, ich bekomme ein Problem "..muss eine Unterauswahl haben." wenn ich ein Unterelement anfordere. Können Sie ein Beispiel für eine Abfrage zum Abrufen von Nachrichten geben? –

0

Ich glaube nicht, dass Sie dies in GraphQL tun können. Denken Sie, dass es ein bisschen gegen die Philosophie von GraphQL ist, nach den Feldern "Sie brauchen" in jeder Komponente zu fragen, anstatt nach "sie alle" zu fragen.

Wenn die App Skalen, wird Ihr Ansatz höhere Lasten von Daten provoque. Ich weiß, dass die Bibliothek zu Testzwecken ein bisschen zu viel aussieht, aber so scheint es zu sein. zulässigen Typen in aktuellen GraphQL Bibliothek (0.2.6) sind:

  • GraphQLSchema
  • GraphQLScalarType
  • GraphQLObjectType
  • GraphQLInterfaceType
  • GraphQLUnionType
  • GraphQLEnumType
  • GraphQLInputObjectType
  • GraphQLList
  • 0.123.
  • GraphQLNonNull
  • GraphQLInt
  • GraphQLFloat
  • GraphQLString
  • GraphQLBoolean
  • GraphQLID
+1

Warum der Downvote? Wie Peter Hilton sagte, müssen Sie eine GraphQLList verwenden, um zu erreichen, was Sie wollten, aber Sie sagten ausdrücklich, dass Sie nicht wollen – MaC