Abstruct

GraphQLの学習にて、基本的な言語仕様をまとめたので載せておきます。

本ページで載せているクエリの動作確認用のサイト:https://docs.github.com/ja/graphql/overview/explorer

1. Alias

  • user1, user2 がエイリアス。
    • 同じフィールドをエイリアスを使うことで列挙できる。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
  user1: user(login: "takuto-n") {
    bio
    login
  }
  user2: user(login: "satou") {
    bio
    login
  }
}

2. Fragment

  • fragmentで指定フィールドを定義できる。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
{
  user1: user(login: "takuto-n"){
    ...commonFields // fragment spead
  }
  user2: user(login: "satou"){
    ...commonFields // fragment spead
  }
}

fragment commonFields on User {
  bio
  login
  avatarUrl
  bioHTML
  company
  companyHTML
  createdAt
}

3. Operation Name

  • Queryに操作名をつけれる。
    • getUser1, getUser2 が操作名。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
query getUser1{
  user(login: "takuto-n") {
    bio
  }
}
query getUser2{
  user(login: "satou") {
    bio
  }
}

4. Variables

  • 変数を定義したら、$変数名 で使える。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
// Query
query($login: String!){
  user(login: $login) {
    bio
    name
  }
}

//query variables
{
  "login": "takuto-n"
}

5. Mutations

  • Mutation経由で、状態を変更できる。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
query repository {
  repository(owner: "takuto-n", name: "takuto-n.github.io"){
    id
    name
    url
  }
}

mutation addStar{
  addStar(input: {
    starrableId: "MDEwOlJlcG9zaXRvcnkyMDc4MzgyNDk="
  }){
    starrable{
      id
      viewerHasStarred
    }
  }
}

mutation removeStar{
  removeStar(input: {
    starrableId: "MDEwOlJlcG9zaXRvcnkyMDc4MzgyNDk="
  }){
    starrable{
      id
      viewerHasStarred
    }
  }
}

6. Inline Fragments & Typename

  • Inline Fragments
    • ... on [型名] で展開できる。
  • Typename
    • __typename で型名を取れる。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
query search {
  search(query: "We work hard", type: USER, first: 2) {
    nodes {
      __typename
      ... on User {
        id
        name
        url
      }
      ... on Organization {
        id
        name
        url
        projectsUrl
      }
    }
  }
}

7. Type System(Scaler System, Object Types, Schemas)

  • Scaler Types
    • Int, String, Booleanなど
  • Object Types
    • 自前で定義した型
  • Schemas
    • スキーマは、各タイプの操作、クエリ、およびミューテーション(オプション)のルートタイプを提供することによって作成されます。

参考:https://www.tutorialspoint.com/graphql/graphql_type_system.htm

8. Pagination

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// Query
query searchRepositories($first: Int, $after: String, $last: Int, $before: String, $query: String!) {
  search(first: $first, after: $after, last: $last, before: $before, query: $query, type: REPOSITORY) {
    repositoryCount
    pageInfo {
      endCursor
      hasNextPage
      hasPreviousPage
      startCursor
    }
    edges {
      cursor
      node {
        ... on Repository {
          id
          name
          url
        }
      }
    }
  }
}

// Query Variables
{
  "first": 5,
  "after": null,
  "last": null,
  "before": null,
  "query": "フロントエンドエンジニア"
}