【问题标题】:Create mutations in GraphQL with a lot of use cases使用大量用例在 GraphQL 中创建突变
【发布时间】:2018-09-22 02:27:18
【问题描述】:

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

  1. 创建Task
  2. 创建Task 并将现有的User 分配给这个Task
  3. 创建Task并将新创建的User分配给这个Task

那么,将其实现为单个 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) 

【问题讨论】:

    标签: graphql graphene-python


    【解决方案1】:

    对于 3.,如果事实证明您无论如何都需要一个 createUser 突变,那么从两个单独的突变开始将是一个更简单的实现:

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

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

    【讨论】:

      猜你喜欢
      • 2018-07-27
      • 2019-07-26
      • 2021-11-24
      • 2018-09-19
      • 2021-11-20
      • 2016-09-08
      • 1970-01-01
      • 2020-07-15
      • 2019-11-21
      相关资源
      最近更新 更多