使用大量用例在GraphQL中创建突变

时间:2018-04-12 04:28:56

标签: graphql graphene-python

我是GraphQL的新手,需要一些建议(最佳实践)来创建GraphQL中的突变(特别是graphene-python)。假设我们有一些Task和一个User。现在我想创建Task变异,其中包括三种情况:

  1. 创建Task
  2. 创建Task并将现有User分配给此Task
  3. 创建Task并将新创建的User分配给此Task
  4. 那么,将这个实现为单个QraphQL"入口点"是一个好主意,还是为第三个案例(可能)创建另一个变异更好?

          mutation {
           createTask(taskTitle: "Do some stuff"){
            task {
             id
            }
           }
          }
    
          mutation {
           createTask(taskTitle: "Do some stuff",
                      user: {id: "ggdf00askladnl42"}){
            task {
             id
            }
           }
          }
    
          mutation {
           createTask(taskTitle: "Do some stuff",
                      user: {email: "j.doe@example.com", fullName: "John Doe"}){
            task {
             id
            }
           }
          }
    

    graphene-python中的相应变异:

    class CreateTODO(graphene.Mutation):
    
        class Arguments:
            task_title = graphene.NonNull(graphene.String)
            user = UserInput()
    
        task = graphene.Field(lambda: Task)
    
        def mutate(self, info, task_title, user=None):
            #
            #  Do some stuff here
            #
            return CreateTODO(task=task) 
    

1 个答案:

答案 0 :(得分:0)

对于3.如果事实证明您无论如何都需要createUser突变,那么它将成为一个更简单的实现来启动两个独立的突变:

  1. createUser
  2. createTask(使用从createUser
  3. 返回的用户

    但是,您无法将这两个突变合并为一个HTTP请求。