Mutations

Relay 使用一个常见的模式来处理 mutation,它们是在 mutation 类型 上的 根字段并伴随一个单一参数:input,而 输入和输出都包含一个客户端 mutation 标识符用来协调请求和响应。

按照惯例,mutation 被命名成动词,它们的输入是在一样的名字后面附加"Input",而它们回传一个对象是一样的名字附加"Payload"。

所以针对我们的 introduceShip,我们建立两个类型: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 输入对象 Mutations 规范。