如何在GraphQL中创建自定义对象列表

问题描述:

我目前正在玩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()。

任何想法如何解决这个问题,除了创建一个消息自己的类型?

您可以定义自己的自定义messageType你定义theadType以同样的方式,然后你就new GraphQLList(messageType)指定消息列表的类型。

+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