$30 off During Our Annual Pro Sale. View Details »

Кирилл Несмеянов — В случае АПИпокалипсиса используй GraphQL!

Badoo Tech
April 09, 2018
8.4k

Кирилл Несмеянов — В случае АПИпокалипсиса используй GraphQL!

Выступление на Badoo PHP Meetup 7.04.2018. Доклад посвящён проблеме текущих реализаций API. Теории серверного технологического стека GraphQL, как "серебрянной пули" в решении проблем. Языку GraphQL SDL и его развитию в виде диалекта в рамках фреймворка Railt."

Badoo Tech

April 09, 2018
Tweet

More Decks by Badoo Tech

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  5. Запрос

    View Slide

  6. Запрос

    View Slide

  7. Запрос Ответ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  12. View Slide

  13. GraphQL

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  18. Объявление

    View Slide

  19. View Slide

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

    View Slide

  21. GraphQL SDL

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  28. GraphQL SDL

    View Slide

  29. Роутинг

    View Slide

  30. Ответ «findByUrn»

    View Slide

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

    View Slide

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

    View Slide

  33. Ответ «toArray»

    View Slide

  34. Отношения

    View Slide

  35. Отношения

    View Slide

  36. Ответ «findNav»

    View Slide

  37. Ответ «findNav»

    View Slide

  38. View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide