Operation Schema !13 query { viewer { id name } product(id: 5) { title quantity tags } } type Query { viewer: User product(id: ID!): Product … } type Product { title: String quantity: Float! tags: [String] user: User … } Operation Type Fileds Selection Set Input type Output type Wrapper type Object type Scalar type
!22 query { viewer { email name id } product(id: 5) { title quantity users { email name id } } } Фрагменты query { viewer { ...UserInfo } product(id: 5) { title quantity users { ...UserInfo } } } fragment UserInfo on User { email name id }
!23 Фрагменты мёржатся fragment UserInfo on User { id email name } fragment UserStatus on User { id name online } query { viewer { ...UserInfo ...UserStatus } } "data": { "viewer": { "id": 1, "name": "zloymult", "email": “[email protected]”, "online": true } }
persisted-queries: чуть сложнее !33 Мы отправляем тело. Теперь сервер запомнил id этого запроса { "id": 1, "variables": {} } Генерировать id, отправлять его на сервер. { "errors": [ {"message": "Give me the document!"} ] } Если сервер не знает такого запроса, он просит тело { "id": 1, "query": "query { viewer: { name } }", "variables": {} }
Unions !40 { info { id ... on User { name } ... on Product { title } } } union UserOrProduct = User | Product type Query { info: UserOrProduct } type User { id: ID! name: String } type Product { id: ID! title: String }
Interfaces !41 { info { id ... on User { name } ... on Product { title } } } interface Node = { id: ID! } type Product implements Node { id: ID! title: String } type User implements Node { id: ID! name: String } type Query { info: Node }
GraphQL vs REST !47 Надо сравнивать аккуратно GraphQL - query language + execution engine. Есть спека REST - архитектурный стиль OpenAPI (aka Swagger) - как описывать RESTful API
GraphQL vs OpenAPI (А REST так тоже можно научить!) !48 • Прикручиваем Swagger • Боремся с overfething за счет query-параметров • Придумываем что-то c underfetching • Придумываем что-то с сокетами
!54 Operation-Based Fragment-based Отличные доки Хорошие доки Не всегда нужна схема Нужна схема React, RN, Vue, Angular …. React, RN Свой компилятор Развивается быстрее Больше оптимизаций из коробки Есть GC