GraphQL - '要么/或'用于多个必需的输入字段

时间:2017-01-24 19:29:11

标签: python types schema graphql relay

我正在开发一个符合Relay标准的GraphQL架构,并希望包含一个突变,该突变需要一个输入对象,该对象需要一个参数(一个记录的ID)或另外两个参数(一个记录号和一个记录的目录号)。我使用的是Python和Graphene库。这是当前输入对象的一个​​片段,它不允许使用ID而不是数字/目录:

class CreateRecord(relay.ClientIDMutation):
    "The parameters of a newly created record."
    # Relay-compliant mutations need to specify an input class.
    class Input:
        "The available inputs for the CreateRecord mutation."
        part_id = graphene.Int(description='The ID of the record.')
        part_number = graphene.String(description='The record number.',
                                      required=True)
        catalog = graphene.String(description='The catalog of the record.',
                                  required=True)

为了实现这一目标,我已经研究了接口和工会,但到目前为止还没有运气。如果没有更灵活的输入对象,我可能需要创建另一个突变(如CreateRecordUsingID)。有没有办法实现这一点,或者更普遍的是在GraphQL架构中支持这个功能?

1 个答案:

答案 0 :(得分:1)

无法在类型系统中表达条件非零值。所以你必须自己在分辨率逻辑中验证这一点。

但是,为什么不将它分成两个单独的显式操作呢?一个需要ID和一个需要记录和目录号码?是的,你必须以不同的方式命名它们,但显而易见是一件好事,你将会使用而不是反对类型系统。

关于变异设计的文章系列很好,this entry尤其与你的案例有关。