13. Schema
interface Person
{
name: String
!
}
type User implements Person
{
id: ID
!
name: String
!
}
type Article
{
id: ID
!
title: String
!
}
union Content = User |Articl
e
type Query
{
user(id: ID!): Use
r
}
type Mutation
{
changeUserName(input: ChangeUserNameInput
)
: ChangeUserNamePayload
}
Schemaのサンプル
15. Queryの特徴 1
type User
{
id: ID
!
name: String
!
address: String
!
}
type Query
{
user(id: ID!): Use
r
}
query GetUserA($id: ID!)
{
user(id: $id)
{
i
d
nam
e
}
}
query GetUserB($id: ID!)
{
user(id: $id)
{
i
d
nam
e
addres
s
}
}
定義されている返却値から
取得するデータを選択でき
る
18. Mutationの特徴
type User { …
}
type Mutation
{
changeUserName
(
input: ChangeUserNameInpu
t
): ChangeUserNamePayloa
d
}
input ChangeUserNameInput
{
id: ID
!
name: String
!
}
type ChangeUserNamePayload
{
id: ID
!
name: String
!
}
mutation ChangeUserName($input: ChangeUserNameInput!)
{
changeUserName(input: $input)
{
nam
e
}
}
引数はinput型として渡すこ
とが多い
19. Fragment
type User
{
id: ID
!
name: String
!
address: String
!
}
query SampleQueryA($userId: ID!)
{
user(id: $id)
{
i
d
nam
e
}
articles { …
}
}
query SampleQueryB($userId: ID!)
{
user(id: $id)
{
i
d
nam
e
}
news { …
}
}
複数のQuery, Mutationで同
様のデータを取得する
毎回書くのは手間となる
20. Fragment
type User
{
id: ID
!
name: String
!
address: String
!
}
Fragment UserFragment on User
{
i
d
nam
e
}
query SampleQueryA($userId: ID!)
{
user(id: $id)
{
…UserFragmen
t
}
articles { …
}
}
query SampleQueryB($userId: ID!)
{
user(id: $id)
{
…UserFragmen
t
}
news { …
}
}
Fragmentで反復して使う
データのまとまりを定義で
きる
69. Fragment
Colocation
query TopScreenQuery($searchWord: String!)
{
items(searchWord: $searchWord)
{
…HeaderFragmen
t
items
{
…ItemFragmen
t
}
…FooterFragmen
t
}
}
fragment HeaderFragment on Result
{
searchWor
d
}
Fragment ItemFragment on Item
{
nam
e
imageUr
l
}
Fragment FooterFragment on ItemsResult
{
coun
t
totalItemCount
}
Fragment Colocationの例
Header, List, Footer
があるような画面
70. Fragment Colocationの利点
• Over Fetchingを抑制しやすい
• UIコンポーネントに必要なデータのみを取得できる
• Under Fetchingを抑制しやすい
• 1画面に必要な情報をqueryでまとめて取得できる
• UIやデータ取得の修正が行いやすい