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
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
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
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
- 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
- Object Types
- Schemas
- スキーマは、各タイプの操作、クエリ、およびミューテーション(オプション)のルートタイプを提供することによって作成されます。
参考:https://www.tutorialspoint.com/graphql/graphql_type_system.htm
- Relay-Style Cursor 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": "フロントエンドエンジニア"
}
|