2015-08-23 74 views
6

我目前正在玩Facebook的一堆新技術。如何在GraphQL中創建自定義對象列表

我有一個GraphQL模式的小問題。 我有這個模型的對象:

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

現在我想爲此創建GraphQL模型。我這樣做:

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

    }) 
}); 

我知道有更優雅的方式來構造數據的第一位。但爲了試驗,我想這樣嘗試。

除了我的消息數組之外,一切正常,因爲我沒有指定數組類型。我必須指定哪種數據進入該數組。但由於它是一個自定義對象,我不知道要傳入GraphQLList()。

任何想法如何解決這個問題,除了創建一個消息自己的類型?

回答

7

您可以定義自己的自定義messageType你定義theadType以同樣的方式,然後你就new GraphQLList(messageType)指定消息列表的類型。

+0

感謝你的迴應,我遇到了一個問題「..必須有一個子選擇。」當我要求子元素。你能給出一個獲取查詢來獲取消息的例子嗎? –

0

我不認爲你可以在GraphQL中做到這一點。認爲這與GraphQL原理有點矛盾,即要求每個組件中的「您需要」字段不要求「全部」。

當應用程序擴展時,您的方法會挑戰更高的數據負載。我知道,爲了測試庫的目的看起來有點太多,但它似乎就是這樣設計的。不允許在當前GraphQL庫(0.2.6)類型有:

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

爲什麼downvote?正如彼得·希爾頓所說的,你必須使用GraphQLList來實現你想要的,但你明確地說過你並不需要 – MaC

相關問題