🐙

GraphQLのフラグメント、データが存在しない場合、ミューテーションについて

2023/07/30に公開

GraphQLのフラグメント、データが存在しない場合、ミューテーションについて記載します。

フラグメント

フラグメントとは複数の場所で使えるように共通化した選択セットのことを指します。具体例を示します。ユーザーのid、name、locationを共通化しています。

fragment userInfo on User {
  id
  name
  location
}

{
  user(login: "1s22s1") {
    ...userInfo
    following(first: 3) {
      edges {
        node {
          ...userInfo
        }
      }
    }
  }
}

レスポンスになります。

{
  "data": {
    "user": {
      "id": "MDQ6VXNlcjc3NDk3NTQz",
      "name": "1s22s1",
      "location": "Kouchi",
      "following": {
        "edges": [
          {
            "node": {
              "id": "MDQ6VXNlcjMxMjAzNjc=",
              "name": "Alexander Wang",
              "location": "Bay Area"
            }
          },
          {
            "node": {
              "id": "MDQ6VXNlcjE2NzYwNTQ3",
              "name": "Satoshi Terasaki",
              "location": "Miyagi/Japan"
            }
          }
        ]
      }
    }
  }
}

データが存在しない場合

データが存在しない場合、errorsに理由が記載されます。実際に存在しないユーザーのデータを取得してみます。

query {
  user(login: "存在しないユーザー") {
    createdAt
    bio
  }
}

レスポンスになります。

{
  "data": {
    "user": null
  },
  "errors": [
    {
      "type": "NOT_FOUND",
      "path": [
        "user"
      ],
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "message": "Could not resolve to a User with the login of '存在しないユーザー'."
    }
  ]
}

ミューテーション

ミューテションは、データの作成・更新・削除を担います。今回は、GitHubでIssueを作成します。

mutation CreateIssue {
  createIssue(
    input: {repositoryId: "R_kgDOIsUWbw", title: "ふたりしてひかりのように泣きました あのやわらかい草の上では"}
  ) {
    issue {
      number
    }
  }
}

レスポンスになります。また、該当レポジトリを見るとIssueが作成されていました。

{
  "data": {
    "createIssue": {
      "issue": {
        "number": 4
      }
    }
  }
}

Discussion