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

Posted

技术标签:

【中文标题】如何在 GraphQL 中创建自定义对象列表【英文标题】:How to create a list of custom objects in GraphQL 【发布时间】:2015-11-16 23:09:08 【问题描述】:

我目前正在玩 Facebook 的一堆新技术。

我对 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()。

除了为消息创建自己的类型之外,知道如何解决这个问题吗?

【问题讨论】:

【参考方案1】:

我认为你不能在 GraphQL 中做到这一点。认为这有点违背 GraphQL 哲学,即在每个组件中要求“你需要”的字段而不是要求“全部”。

当应用程序扩展时,您的方法会引发更多的数据负载。我知道为了测试这个库看起来有点太多了,但它似乎就是这样设计的。当前 GraphQL 库 (0.2.6) 中允许的类型有:

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

【讨论】:

为什么投反对票?正如彼得希尔顿所说,您必须使用 GraphQLList 来实现您想要的,但您明确表示您不想要【参考方案2】:

您可以像定义theadType 一样定义自己的自定义messageType,然后您可以使用new GraphQLList(messageType) 来指定消息列表的类型。

【讨论】:

感谢您的回复,我遇到了一个问题“..必须有一个子选择。”当我请求子元素时。你能举一个获取查询来获取消息的例子吗?

以上是关于如何在 GraphQL 中创建自定义对象列表的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 中创建自定义下拉列表?

如何在 QML 中创建自定义对象?

在 SQL Server 中创建自定义日期范围列表以便于使用

如何在android中创建自定义导航抽屉

在片段中创建自定义列表视图时出错。必需的活动,找到的片段

在片段中创建自定义列表视图时出错所需活动,找到片段