Slide 1

Slide 1 text

В случае Апипокалипсиса Используй GraphQL Несмеянов Кирилл [email protected]

Slide 2

Slide 2 text

О себе PHP back-end developer at Rambler&Co Maintainer of Laravel Framework Russian Community

Slide 3

Slide 3 text

Глава 1 GraphQL - что ты за зверь?

Slide 4

Slide 4 text

GraphQL - Это платформа Backend + Frontend - Состоит из полутора языков - Был придуман в 2012ом году в Facebook - Был разработан Frontend разработчиками

Slide 5

Slide 5 text

Запрос

Slide 6

Slide 6 text

Запрос

Slide 7

Slide 7 text

Запрос Ответ

Slide 8

Slide 8 text

RESTful /v1/api/docs/graphql/object? field[] = id field[] = title field[] = content field[] = updatedAt.RFC3339

Slide 9

Slide 9 text

Всё в порядке? /v1/api/docs/graphql/object? fields = id, title, content, updatedAt.RFC3339

Slide 10

Slide 10 text

Точно? /v1/api/docs/graphql/object? fields = id, title, content, updatedAt /v1/api/docs/graphql/object/updatedAt? format = RFC3339

Slide 11

Slide 11 text

Хм... /v1/api/docs/graphql/object? fields = id, title, content, updatedAt /v1/api/docs/graphql/object/updatedAt/format? type = RFC3339

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

GraphQL

Slide 14

Slide 14 text

Итог - Батчинг запросов - Статическая типизация - Сложные запросы - Автодокументация - Автокомплит в IDE

Slide 15

Slide 15 text

Глава 2 Погружаясь в дебри библиотек

Slide 16

Slide 16 text

Webonyx - Копипаста с JS - Отвратный код - Зато работает

Slide 17

Slide 17 text

Youshido - Почти копипаста с JS - Почти читаемый код - Половина не работает (не работало)

Slide 18

Slide 18 text

Объявление

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

Глава 2: Часть 2 Schema Definition Language (SDL)

Slide 21

Slide 21 text

GraphQL SDL

Slide 22

Slide 22 text

Выбор очевиден!

Slide 23

Slide 23 text

История - Кусок проекта graph.cool - Внедрён в спецификацию в 2018ом году

Slide 24

Slide 24 text

Статус - Несовместим с ранними JS-решениями - Спецификация не утверждена - Актуальный драфт: facebook.github.io/graphql/draft - Обсуждение: github.com/facebook/graphql/pull/90 - Прочее: github.com/graphql/graphql-js

Slide 25

Slide 25 text

Youshido: NO Webonyx: YES / NO / МОЖБЫТЬ

Slide 26

Slide 26 text

Railt - PHP 7.1+ - Слабая связанность - Полная поддержка спецификации SDL - Релиз? Какой релиз?

Slide 27

Slide 27 text

Глава 3 Практика

Slide 28

Slide 28 text

GraphQL SDL

Slide 29

Slide 29 text

Роутинг

Slide 30

Slide 30 text

Ответ «findByUrn»

Slide 31

Slide 31 text

Возвращает объект?

Slide 32

Slide 32 text

Сериализация

Slide 33

Slide 33 text

Ответ «toArray»

Slide 34

Slide 34 text

Отношения

Slide 35

Slide 35 text

Отношения

Slide 36

Slide 36 text

Ответ «findNav»

Slide 37

Slide 37 text

Ответ «findNav»

Slide 38

Slide 38 text

No content

Slide 39

Slide 39 text

Глава 4 Послесловие

Slide 40

Slide 40 text

Планы по фреймворку - Стабилизация, документация, тесты, релиз. - Subscriptions - Синтаксические расширения

Slide 41

Slide 41 text

Планы по SDL: Что есть? - Полная поддержка последнего драфта - LSP наследование - DOCUMENT (глобальные) директивы

Slide 42

Slide 42 text

Планы по SDL: Что в планах? - Неймспейсы - Дженерики - Наследование скаляров - Вложенные и анонимные типы - … ?

Slide 43

Slide 43 text

Спасибо! Nikita Stenin Alexey Devyatov Roman Soharev bigperson Big-Shark HunterNNm Oleg Arkhipov Sergey Protko Lee Byron Ivan Enderlin batFormat Lex111 mdnsk Andrei Sosnov

Slide 44

Slide 44 text

В случае Апипокалипсиса Используй GraphQL Несмеянов Кирилл github.com/SerafimArts dribbble.com/SerafimArts Fin Railt railt.org github.com/railt