5. WHAT IS GRAPHQL?
ref: GraphQL.org
“GraphQL is a query language for your API,
and a server-side runtime for executing queries
by using a type system you define for your data”
6. “GraphQL is a query language for your API,
and a server-side runtime for executing queries
by using a type system you define for your data”
Type SystemQuery LanguageAPI
7. “GraphQL is a query language for your API,
and a server-side runtime for executing queries
by using a type system you define for your data”
API
11. “GraphQL is a query language for your API,
and a server-side runtime for executing queries
by using a type system you define for your data”
Type SystemQuery LanguageAPI
21. 데이터의 응답 형태를 예측할 수 있다.
클라이언트에 최적화된 데이터 형태를 가져올 수 있다.
Query Language
22. “GraphQL is a query language for your API,
and a server-side runtime for executing queries
by using a type system you define for your data”
Type SystemQuery LanguageAPI
27. Type System
Type (Object)
type User {
name: String
}
Scalar Type
1.INT
2.String
3.Float
4.ID
5.Enum
6.Boolean
Shape
1.list = [INT]
2.interface
3.Union
4.fragment
5.alias
6.! = Non-Null
28. Type System
Type
type User {
name: String
}
Scalar Type
1.INT
2.String
3.Float
4.ID
5.Enum
6.Boolean
Custom Type
31. type User {
name: String
avatar: Url
age: Int
createdAt: Date
id: String
}
type Query {
profile(id: String): User
}
Server
32. Client
type User {
name: String
avatar: Url
age: Int
createdAt: Date
id: String
}
{
profile(id=“Lutece”)
{
name
}
}
type Query {
profile(id: String): User
}
Server
33. Client
type User {
name: String
avatar: Url
age: Int
createdAt: Date
id: String
}
{
profile(id=“Lutece”)
{
name
}
}
type Query {
profile(id: String): User
}
Server
query
34. Client
type User {
name: String
avatar: Url
age: Int
createdAt: Date
id: String
}
{
profile(id=“Lutece”)
{
name
}
}
type Query {
profile(id: String): User
…
}
Server
query
Resolver
35. Type System
resolver: {
Query: {
profile: (obj, args, context, info){
const profileList = … (from DB, 외부 API..)
return profileList
.find(({ id }) => id === args.id)
},
profiles: () {…}
articles: () {…}
}
}
Resolver
36. Type System
{
profile(id=“Lutece”) {
name
}
}
Query
resolver: {
Query: {
profile: (obj, args, context, info){
const profileList = … (from DB, 외부 API..)
return profileList
.find(({ id }) => id === args.id)
},
profiles: () {…}
articles: () {…}
}
}
Resolver
37. Type System
{
profile(id=“Lutece”) {
name
}
}
Query
resolver: {
Query: {
profile: (obj, args, context, info){
const profileList = … (from DB, 외부 API..)
return profileList
.find(({ id }) => id === args.id)
},
profiles: () {…}
articles: () {…}
}
}
Resolver
type User {
name: String
avatar: Url
age: Int
createdAt: Date
id: String
}
type Query {
profile(id: String): User
…
}
Type System
38. Type System
{
profile(id=“Lutece”) {
name
}
}
Query
resolver: {
Query: {
profile: (obj, args, context, info){
const profileList = … (from DB, 외부 API..)
return profileList
.find(({ id }) => id === args.id)
},
profiles: () {…}
articles: () {…}
}
}
Resolver
type User {
name: String
avatar: Url
age: Int
createdAt: Date
id: String
}
type Query {
profile(id: String): User
…
}
Type System
39. Type System
{
profile(id=“Lutece”) {
name
}
}
Query
resolver: {
Query: {
profile: (obj, args, context, info){
const profileList = … (from DB, 외부 API..)
return profileList
.find(({ id }) => id === args.id)
},
profiles: () {…}
articles: () {…}
}
}
Resolver
type User {
name: String
avatar: Url
age: Int
createdAt: Date
id: String
}
type Query {
profile(id: String): User
…
}
Type System
{
data: {
“profile”: {
“name”: “SeonghoonBaek”
}
}
}
40. Client
type User {
name: String
avatar: Url
age: Int
createdAt: Date
id: String
}
{
profile(id=“Lutece”)
{
name
}
}
type Query {
profile(id: String): User
}
Server
query
Resolver
{
data: {
“profile”: {
“name”: “SeonghoonBaek”
}
}
}
49. Resource
GraphQL Flow
type User {
name: String
avatar: Url
age: Int
createdAt: Date
id: String
}
type Query {
profile(id: String): User
}
50. GraphQL Flow
type User {
name: String
avatar: Url
age: Int
createdAt: Date
id: String
}
type Query {
profile(id: String): User
}
51. GraphQL Flow
type User {
name: String
avatar: Url
age: Int
createdAt: Date
id: String
}
type Query {
profile(id: String): User
}
{
profile(id=“Lutece”) {
name
avatar
age
createdAt
}
}
{
profile(id=“Lutece”) {
avatar
name
}
}
52. GraphQL Flow
type User {
name: String
avatar: Url
age: Int
createdAt: Date
id: String
}
type Query {
profile(id: String): User
}
{
profile(id=“Lutece”) {
name
avatar
age
createdAt
}
}
{
profile(id=“Lutece”) {
avatar
name
}
}
{
data: {
“profile”: {
“name”: “SeonghoonBaek”
“age” : 29
“avatar” : “https:…”
“createdAt: “19..”
“id”: “123123”
}
}
}
{
data: {
“profile”: {
“name”: “SeonghoonBaek”
“avatar” : “https:…”
}
}
}
Resolver