Skip to content

hnkisdead/gql-backend

Repository files navigation

Демо graphql в django

Начало работы

  1. Устанавливаем Python 2
    # MacOS
    brew install python@2
    
    # Ubuntu
    apt install python2
  2. Клонируем репозиторий
    git clone https://github.com/subv13/gql.git /путь/до/проекта
  3. Создаём виртуальные окружение c python 2
    virtualenv /путь/до/проекта/venv -p python2
  4. Устанавливаем зависимости
    # Python 2
    source venv/bin/activate
    pip install -r requirements.txt 
  5. Устанавливаем хуки гита - запускают линтеры и форматтеры на коммиты.
    pre-commit install
  6. Накатываем миграции
    ./manage.py migrate
  7. Создаём суперпользователя
    ./manage.py createsuperuser
  8. Загружаем фикстуры
     ./manage.py loaddata tablet.json
  9. Запускаем сервер
    ./manage.py runserver
  10. Открываем GraphiQL

GraphQL

Что такое GraphQL

Что такое graphql

Материалы

  1. Официальный гайд о GraphQL
  2. Спецификация GraphQL
  3. Хороший вводный доклад про GraphQL
  4. Анатомия запроса GraphQL

Описание схемы

Основная библиотека для описание схемы GraphQL в python - graphene. Так же есть библиотека для graphene-django упрощающая интеграцию с Django

Материалы

  1. Общие правила написания схем GraphQL
  2. Репозиторий с правилами из доклада выше
  3. Описание подходов к пагинации
  4. Хороший подход к описанию сортировок и фильтров

Правила написания схем GraphQL в python

Не нужно складывать описание всей схемы в один файл

Для того чтобы схема не превращалась в файл из тысяч строк лучше разбивать её на пакеты и модули. Например Разбиение на пакеты и модули

Не использовать класс graphene.Mutation

Описание резолверов выглядит хорошо, а вот описание мутаций выглядит как что-то не из python. Не до конца понятно почему мутации реализовали в таком виде, когда их можно описать как обычные поля и будет намного pythonic. Например Мутации

Документировать сложные части схемы с помощь markdown

GraphiQl и другие клиенты могут рендерить markdown написанный в description. Его можно писать в multiline строках, но важно чтобы не было отступов, поэтому лучше выносить в отдельную константу. Например Документация в markdown

Тесты

Наиболее удобный способ писать тесты для graphql - snapshot-тесты. Например

  1. Тестовый клиент
  2. Обёртка для получения запросов для теста. В python их удобней хранить отдельными файлами, если хранить строками в коде, то нет подсветки синтаксиса и валидации
  3. Сравнение со snapshot

Авторизация

В каждый резолвер и мутацию приходит аргумент info в котором есть context который по сути request из django из него можно достать информацию о сессии, юзере, etc

Производительность

Для сокращения запросов есть история с даталоадерами ссылка, ссылка, ссылка

Для защиты от сложных запросов есть несколько разных подходов ссылка

Генерация типов для фронтенда

Как генерировать правильно типы для фронтенда для разных релизов, новых веток, etc?

CI/CD

Репортер схемы в репозиторий схем??? ссылка

Метрики

Что делать с newrelic, sentry, etc?

Обработка ошибок

Как лучше возвращать ошибки? ссылка ссылка ссылка ссылка

Ошибки в Apollo Server ссылка

About

Демо graphql в django

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages