2015-08-23 14 views
6

Attualmente sto giocando con una serie di nuove tecnologie di Facebook.Come creare un elenco di oggetti personalizzati in GraphQL

Ho un piccolo problema con gli schemi GraphQL. Ho questo modello di un oggetto:

{ 
     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' 
      }, 
     ]; 
    } 

Ora voglio creare un modello GraphQL per questo. Ho fatto questo:

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

    }) 
}); 

So che ci sono modi più eleganti per strutturare i dati in primo luogo. Ma per il gusto di sperimentare, ho voluto provarlo in questo modo.

Tutto funziona correttamente, oltre alla matrice di messaggi, poiché non si specifica il tipo di matrice. Devo specificare che tipo di dati vanno in quella matrice. Ma dal momento che si tratta di un oggetto personalizzato, non so cosa passare in GraphQLList().

Qualche idea su come risolvere questo oltre a creare un proprio tipo per i messaggi?

risposta

7

È possibile definire il proprio personalizzato messageType allo stesso modo definito theadType, e allora non new GraphQLList(messageType) specificare il tipo del tuo elenco di messaggi.

+0

Grazie per la risposta, ho un problema "..deve avere una sotto-selezione." quando richiedo un sottoelemento puoi dare un esempio di ottenere query per recuperare i messaggi. –

0

Non penso che sia possibile farlo in GraphQL. Pensa che è un po 'contrario alla filosofia GraphQL di chiedere i campi "di cui hai bisogno" in ogni componente, senza chiedere "tutti".

Quando l'app viene ridimensionata, il tuo approccio comporterà una maggiore quantità di dati. So che allo scopo di testare la libreria sembra un po 'troppo, ma sembra che questo sia il modo in cui è progettato. Tipi consentiti in corrente libreria GraphQL (0.2.6) sono:

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

Perché il downvote? Come Peter Hilton ha detto che devi usare un GraphQLList per ottenere quello che volevi ma hai detto esplicitamente che non volevi – MaC

Problemi correlati