Mutations

Relay 使用一個常見的模式來處理 mutation,它們是在 mutation type 上的 root 欄位並伴隨一個單一參數:input,而 input 跟 output 都包含一個客戶端 mutation 識別碼用來協調請求和回應。

慣例上,mutation 被命名成動詞,它們的 input 是在一樣的名字後面附加「Input」,而它們回傳一個物件是一樣的名字附加「Payload」。

所以針對我們的 introduceShip mutation,我們建立兩個 type:IntroduceShipInputIntroduceShipPayload

input IntroduceShipInput {
  factionId: ID!
  shipName: String!
  clientMutationId: String!
}

type IntroduceShipPayload {
  faction: Faction
  ship: Ship
  clientMutationId: String!
}

有了 input 和 payload,我們可以發送以下的 mutation:

mutation AddBWingQuery($input: IntroduceShipInput!) {
  introduceShip(input: $input) {
    ship {
      id
      name
    }
    faction {
      name
    }
    clientMutationId
  }
}

用這些參數:

{
  "input": {
    "shipName": "B-Wing",
    "factionId": "1",
    "clientMutationId": "abcde"
  }
}

而我們會得到這個結果:

{
  "introduceShip": {
    "ship": {
      "id": "U2hpcDo5",
      "name": "B-Wing"
    },
    "faction": {
      "name": "Alliance to Restore the Republic"
    },
    "clientMutationId": "abcde"
  }
}

伺服器應該有怎樣行為的完整細節可以在 GraphQL Input Object Mutations 規範中找到。