Berinteraksi dengan API GraphQL
Berinteraksi dengan API GraphQLMenjalankan bulk mutations

Menjalankan bulk mutations

Gato GraphQL menyediakan field-field mutasi "bulk" untuk semua mutasi dalam skema, yang memungkinkan kita memutasi banyak sumber daya sekaligus.

Misalnya, mutasi createPosts (mutasi sumber daya tunggal adalah createPost) akan membuat beberapa post sekaligus:

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

Argumen

Semua bulk mutations menerima dua argumen:

  • inputs (wajib): Array item input, di mana setiap item berisi data untuk memutasi satu sumber daya
  • stopExecutingMutationItemsOnFirstError (default false): Menunjukkan apakah, jika salah satu input menghasilkan error, eksekusi mutasi pada input berikutnya harus dihentikan.

Semua mutasi dijalankan sesuai urutan yang diberikan dalam argumen inputs.

Kasus penggunaan

Bulk mutations membuka berbagai kemungkinan untuk mengelola situs WordPress kita.

Misalnya, query GraphQL berikut menggunakan createPosts untuk menduplikasi post:

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