Дмитрий Соболев. GraphQL в проекте на Python

Дмитрий Соболев. GraphQL в проекте на Python

Когда мы начинали новый проект, передо мной встал вопрос: какой технологический стек использовать? Обычно используют то, что знают хорошо или хотя бы неплохо, чтобы во время выполнения проекта не возникло внезапных сюрпризов. Но с другой стороны новый проект — это возможность попробовать что-то новое и интересное. Размышляя так, я протащил в этот проект GraphQL. Знал я про него тогда немного, но прошло время, и в этом докладе я бы хотел подвести некий промежуточный итог: стоит или нет использовать эту технологию, её плюсы и минусы, а также некоторые подводные подводные камни, на которые я наткнулся в ходе работы.

49c3bfded3cf5f5100ef423140676288?s=128

Python Community Chelyabinsk

December 05, 2019
Tweet

Transcript

  1. GraphQL в проекте на Python Дмитрий Соболев 2019

  2. 2019 Пролог

  3. Что такое GraphQL? 2019

  4. 2019 • Очевидно, язык запросов • Не связан с источниками

    данных • Типизированный • Позволяет получить только то, что нужно и не больше.
  5. 2019 Информация о запросе: • тип (query) • название операции

    (ListUsers) • информация о переменных
  6. 2019 Что мы запрашиваем? • может быть больше одного поля

    в запросе • можно передать аргументы
  7. 2019 Что мы хотим получить? • По аналогии с корневым

    запросом, можно получить смежные данные
  8. 2019 Типы запросов • query получение данных все поля выполняются

    параллельно • mutation изменение данных поля выполняются по порядку • subscription получение обновлений в реальном времени
  9. 2019 Schema definition language

  10. 2019 Schema definition language Объявление директивы

  11. 2019 Schema definition language Объявление скалярного типа

  12. 2019 Schema definition language Объявление типа-структуры

  13. 2019 Schema definition language Объявление типа-структуры, которая подается как аргумент

    на вход.
  14. 2019 Schema definition language Специальные типы для определения возможных запросов

    и миграций
  15. 2019 Разбиение схемы

  16. 2019 https://graphql.org/learn/ https://graphql.github.io/graphql-spec/June2018

  17. А что там у питонистов? 2019

  18. 2019 Graphene • https://graphene-python.org • https://github.com/graphql-python/graphene • Порт GraphQL.js

  19. 2019 Graphene

  20. 2019 Tartiflette • https://tartiflette.io • https://github.com/tartiflette/tartiflette • Использует SDL •

    Асинхронная по-умолчанию
  21. 2019 Tartiflette

  22. Проблемы и возможные пути обхода 2019

  23. 2019 Определение типов

  24. 2019 Определение типов IPet

  25. 2019 Определение типов

  26. 2019 Определение типов

  27. 2019 Вложенные input

  28. 2019 Вложенные input

  29. 2019 Вложенные input

  30. 2019 Вложенные input

  31. 2019 Проблема N+1 Сколько будет вызовов при запросе 10 юзеров

    и 5 друзей?
  32. 2019 Проблема N+1. Что делать? • Ничего. • Каким-то образом

    попытаться вытащить объекты второго уровня пачкой. • Сделать умный query-builder, который подгружает смежные данные.
  33. 2019 Загрузка файлов 1. Предварительная загрузка файла на кеширующий сервер

    2. Кодирование содержимого в base64 3. https://github.com/jaydenseric/graphql-multipart-request-spec
  34. Выводы 2019

  35. 2019 • Неплохая замена swagger • Не нужен, если уже

    есть настроенный и хорошо работающий swagger • Хорошее решение для API Gateway
  36. 2019 Ссылки • https://graphql.org/learn/ • https://graphql.github.io/graphql-spec/June2018 • https://graphql.org • https://graphene-python.org/

    • https://tartiflette.io/ • https://github.com/jaydenseric/graphql-multipart-request-spec/ • https://github.com/dmitry-sobolev/graphql-meetup/
  37. Спасибо за внимание! 2019 Дмитрий Соболев