Interagindo com a API GraphQL
Interagindo com a API GraphQLExecutando mutations em massa

Executando mutations em massa

O Gato GraphQL fornece campos de mutation "bulk" para todas as mutations do schema, permitindo que a gente mute múltiplos recursos.

Por exemplo, a mutation createPosts (a mutation para um único recurso é createPost) criará múltiplos posts:

mutation CreatePosts {
  createPosts(inputs: [
    {
      title: "First post"
      contentAs: {
        html: "This is the content for the first post"
      }
    },
    {
      title: "Second post"
      contentAs: {
        html: "Here is another content, for another post"
      }
      excerpt: "The cup is within reach"
    },
    {
      title: "Third post"
      contentAs: {
        html: "This is yet another piece of content"
      },
      authorBy: {
        id: 1
      },
      status: draft
    }
  ]) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
    post {
      id
      title
      content
      excerpt
      author {
        name
      }
      status
    }
  }
}

Argumentos

Todas as mutations em massa aceitam dois argumentos:

  • inputs (obrigatório): O array de itens de entrada, onde cada item contém os dados para mutar um recurso
  • stopExecutingMutationItemsOnFirstError (padrão false): Indica se, caso algum dos inputs produza um erro, a execução da mutation nos inputs seguintes deve ser interrompida.

Todas as mutations são executadas na mesma ordem fornecida no argumento inputs.

Casos de uso

As mutations em massa abrem possibilidades para gerenciar nosso site WordPress.

Por exemplo, a seguinte query GraphQL usa createPosts para duplicar posts:

query ExportPostData
{
  postsToDuplicate: posts {
    rawTitle
    rawContent
    rawExcerpt
    postInput: _echo(value: {
      title: $__rawTitle
      contentAs: {
        html: $__rawContent
      },
      excerpt: $__rawExcerpt
    })
      @export(as: "postInputs", type: LIST)
      @remove
  }
}
 
mutation CreatePosts
  @depends(on: "ExportPostData")
{
  createPosts(inputs: $postInputs) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
    post {
      id
      title
      content
      excerpt
    }
  }
}