Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Как мы не внедрили GraphQL

Как мы не внедрили GraphQL

Александр Полищук (ООО "Код Безопасности", Team Lead) @ MoscowPython Meetup 70

"В один прекрасный момент мы пришли к тому, что нам необходимо переписать наше самописное API. Помимо классического REST мы решили рассмотреть и GraphQL. О результатах — в докладе (спойлер в названии)".

Видео: http://www.moscowpython.ru/meetup/70/no-graphql/

Moscow Python Meetup

November 28, 2019
Tweet

More Decks by Moscow Python Meetup

Other Decks in Programming

Transcript

  1. Наша команда • 6 человек • Python + JS •

    Основной Python Framework - Django
  2. Наша команда • 6 человек • Python + JS •

    Основной Python Framework - Django • Основная библиотека JS - React
  3. Функции Django в проектах • Принять данные от администратора •

    Провести валидацию данных • Сохранить данные в БД
  4. Функции Django в проектах • Принять данные от администратора •

    Провести валидацию данных • Сохранить данные в БД • Раздать данные сервисам в нужном им формате
  5. Минусы самописного API • Код очень плохо читаем • Много

    непонятных и ненужных зависимостей внутри
  6. Минусы самописного API • Код очень плохо читаем • Много

    непонятных и ненужных зависимостей внутри • Проблема с расширяемостью
  7. Минусы самописного API • Код очень плохо читаем • Много

    непонятных и ненужных зависимостей внутри • Проблема с расширяемостью • Скорость работы этого API под большим вопросом (см. пункт 2)
  8. Почему GraphQL • Давно на слуху • Разрабатывается и используется

    Facebook • «Имеет ряд преимуществ перед REST» (с)
  9. Почему GraphQL • Давно на слуху • Разрабатывается и используется

    Facebook • «Имеет ряд преимуществ перед REST» (с) • «Убийца REST» (с)
  10. Проблема с разрешениями • Делать проверки в mutate (или иных

    методах) • Писать кастомные методы проверки (aka «костыли»)
  11. Проблема с разрешениями • Делать проверки в mutate (или иных

    методах) • Писать кастомные методы проверки (aka «костыли») • django-graphene-permissions
  12. Преимущества GraphQL • Единая точка входа, но есть проблема с

    настройкой пермишнов • Все запросы через POST
  13. Преимущества GraphQL • Единая точка входа, но есть проблема с

    настройкой пермишнов • Все запросы через POST • Хорошая расширяемость, но нужна синхронизация схемы с клиентом
  14. Преимущества GraphQL • Единая точка входа, но есть проблема с

    настройкой пермишнов • Все запросы через POST • Хорошая расширяемость, но нужна синхронизация схемы с клиентом • Атрибуты в запросе, но клиент должен сам писать все запросы
  15. Преимущества GraphQL • Единая точка входа, но есть проблема с

    настройкой пермишнов • Все запросы через POST • Хорошая расширяемость, но нужна синхронизация схемы с клиентом • Атрибуты в запросе, но клиент должен сам писать все запросы • Получение нескольких объектов по параметрам в одном запросе, но это надо описывать
  16. Преимущества GraphQL • Единая точка входа, но есть проблема с

    настройкой пермишнов • Все запросы через POST • Хорошая расширяемость, но нужна синхронизация схемы с клиентом • Атрибуты в запросе, но клиент должен сам писать все запросы • Получение нескольких объектов по параметрам в одном запросе, но это надо описывать • Хорошая интеграция с Django, можно использовать формы и даже сериалайзеры DRF
  17. Недостатки GraphQL • Документация • Синтаксис запросов, но это больше

    вопрос привычки • Много схем, но в DRF тоже надо писать сериалайзеры
  18. Недостатки GraphQL • Документация • Синтаксис запросов, но это больше

    вопрос привычки • Много схем, но в DRF тоже надо писать сериалайзеры • Формат ошибок
  19. Недостатки GraphQL • Документация • Синтаксис запросов, но это больше

    вопрос привычки • Много схем, но в DRF тоже надо писать сериалайзеры • Формат ошибок • Производительность
  20. Недостатки GraphQL • Документация • Синтаксис запросов, но это больше

    вопрос привычки • Много схем, но в DRF тоже надо писать сериалайзеры • Формат ошибок • Производительность • Формат ответа – только JSON
  21. В итоге • Практически все преимущества выливаются в большой объем

    работы на клиенте • Для решения задач приходится гуглить, документации совсем недостаточно, снова потери времени
  22. В итоге • Практически все преимущества выливаются в большой объем

    работы на клиенте • Для решения задач приходится гуглить, документации совсем недостаточно, снова потери времени • Надо привыкать к языку запросов - время
  23. В итоге • Практически все преимущества выливаются в большой объем

    работы на клиенте • Для решения задач приходится гуглить, документации совсем недостаточно, снова потери времени • Надо привыкать к языку запросов - время • По производительности сильно уступает DRF
  24. Спасибо за внимание DRF Docs: https://www.django-rest-framework.org/ Graphene Docs: https://graphene-python.org/ Demo:

    https://github.com/alpolishchuk/graph-rest Статья на Хабре: https://habr.com/ru/post/461939/ Twitter: @alpolishchuk Facebook: alxpolishchuk