Interagir avec l'API GraphQL
Interagir avec l'API GraphQLExécuter des mutations en masse

Exécuter des mutations en masse

Gato GraphQL fournit des champs de mutation « bulk » pour toutes les mutations du schéma, nous permettant de muter plusieurs ressources.

Par exemple, la mutation createPosts (la mutation pour une seule ressource est createPost) créera plusieurs articles :

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
    }
  }
}

Arguments

Toutes les mutations en masse acceptent deux arguments :

  • inputs (obligatoire) : le tableau d'éléments d'entrée, où chaque élément contient les données pour muter une ressource
  • stopExecutingMutationItemsOnFirstError (par défaut false) : indique si, au cas où l'un des inputs produit une erreur, l'exécution de la mutation sur les inputs suivants doit être interrompue.

Toutes les mutations sont exécutées dans le même ordre fourni dans l'argument inputs.

Cas d'utilisation

Les mutations en masse ouvrent des possibilités pour gérer notre site WordPress.

Par exemple, la requête GraphQL suivante utilise createPosts pour dupliquer des articles :

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
    }
  }
}