Евгений Шкодин
Фронтенд-разработчик @ Злые Марсиане
Frontend
Frontend
Евгений Шкодин
Фронтенд-разработчик @ Злые Марсиане
Фронтенд
Бэкенд
Facebook мобильные платформы, 2011
Facebook нативные приложения, 2012
RESTful API
FQL
GraphQL для внутреннего пользования, 2012
Публичный релиз спецификации GraphQL,
Июль 2015
Наши дни
GET /photos?top=3
{
description
src
img_src
comments
likes
}
GET /friends?top=3
{
name
url
avatar_url
city
job_title
job_company
}
GET /user/:id/main_view
{
name
avatar_url
bio
photos(3) {
src
}
friends(3) {
name
avatar_url
}
}
RESTful API и AdHoc запросы
RESTful API и AdHoc запросы
RESTful API и AdHoc запросы
RESTful API и AdHoc запросы
RESTful API и AdHoc запросы
Объекты
Свойства
Взаимоотношения
(о данных)
Что такое GraphQL?
Что такое GraphQL?
{
me {
name
}
}
{
"me": {
"name": "Evgenii Shkodin"
}
}
Основные понятия
Query
Mutation
Subscription
Основные понятия
query GET_MAIN_DATA {
me {
}
}
name
bio
avatarLg: avatar_url(size: 168)
avatarSm: avatar_url(size: 40)
socials {
url
}
photos(limit: 3) {
src
}
friends(limit: 3) {
name
avatar_url(size: 100)
}
Query
Mutation
Subscription
Основные понятия
mutation CREATE_POST($value: String!) {
createPost(value: $value) {
}
}
author {
name
avatar_url(size: 40)
}
body
id
date
...
Основные понятия
Query
Mutation
Subscription
subscription FEED_UPDATES {
postAdded {
}
}
author {
name
avatar_url(size: 40)
}
body
id
date
...
Основные понятия
query getUser($withFriends: Boolean) {
me {
name
friends @include(if: $withFriends) {
name
}
}
}
schema: {
query: Query
mutation: Mutation
subscription: Subscription
}
Query
Mutation
Subscription
Основные понятия
Основные понятия
Типизация
type Query {
}
me: User
user(id: ID!): User
type Mutation {
}
type Subscription {
}
createPost(input: PostInput!): Post!
editPost(id: ID!, input: PostInput!): Post!
deletePost(id: ID!): ID!
postAdded: Post!
Типизация
type User {
id: ID!
name String
balance: Float!
friends(limit: Int! = 10): [User!]
friends_count: Int
bio: String
isPremium: Boolean!
}
Query: {
user(obj, args, context, info) {
return context.db.loadUserByID(args.id)
}
}
User: {
name(obj, args, context, info) {
return obj.name
}
}
запросить у GraphQL схемы всю информацию о мутациях и запросах, которые она поддерживает
Внутребраузерное IDE для исследования GraphQL API
(демо)
Инструмент командной строки для разработки с GraphQL
(демо)
Command | Description |
---|---|
graphql create [directory] | Cоздать по шаблону новый GraphQL проект |
graphql get-schema | Скачать схему |
graphql schema-status | Показать источник и временную отметку схемы |
graphql query <file> | Выполнить запрос/мутацию |
graphql diff | Показать различие между двумя схемами |
Интроспекция 💜 IDE
(демо)
GraphQL расширение для VSCode
GraphQL расширение для VSCode
GraphQL расширение для VSCode
GraphQL расширение для VSCode
Расширь GraphQL API fake-данными без единой строчки кода
(demo)
https://github.com/APIs-guru/graphql-faker
Client
Server
Engine
Apollo Boost — самый простой, zero-config, способ начать использовать Apollo Client
https://github.com/apollographql/apollo-client/tree/master/packages/apollo-boost
npm install apollo-boost graphql graphql-tag
import ApolloClient from "apollo-boost";
import gql from "graphql-tag";
const client = new ApolloClient({
uri: "/graphql"
});
client
.query({
query: gql`
{
character(id: "1") {
name
}
}
`
})
.then(result => console.log(result));
Конвертация GraphQL типов в TypeScript интерфейсы (и Flow-аннотации)
(demo)
https://github.com/avantcredit/gql2ts
Загрузка важных данных в первую очередь
(demo)
https://github.com/avantcredit/gql2ts
query GET_FEED($page: Int!) {
me {
feed(page: $page) {
}
}
}
author {
name
avatar_url(size: 40)
}
body
...
date
id
comments @defer {
author {
name
avatarUrl(size: 40)
}
text
likes
}
Доклады
Статьи