То что нужно знать: alembic, sqlalchemy, flask, postgres, docker, git, json, REST API
То с чем придется работать: flask, postgres, alembic, sqlalchemy, REST API, json, docker
Используя минимум библиотеку flask:
- Создать сущности книг и авторов в базе.
- Реализовать запросы на добавление, удаление и редактирование сущностей.
- Реализовать запрос на получение списка книг с авторами и без.
- Тесты pytest:
- Создание автора
- Создание книги
- Получение книг без авторов
- Получение книг с авторами
Сущности:
- Book: идентификатор, название, кол-во страниц, дата создания
- Author: идентификатор, фио, дата создания
Примечание: Данное приложение поднять на docker-compose.
- Выбрать папку для скачивания репозитория
- git clone https://github.com/evergreenacorn/flask_rest-api_test_task.git
- cd flask_rest-api_test_task/ && docker-compose up -d
- docker-compose exec flaskapp flask db init
- docker-compose exec flaskapp flask db migrate
- docker-compose exec flaskapp flask db upgrade
- Существует 2 основных API:
- books: /api/books
- authors: /api/authors
- CRUD-функции для каждого маршрута({model} - books|authors) осуществлены согласно REST:
- /api/{model} - GET(список всех записей {model})
- /api/{model}/<int:id> - GET(детальная информация записи {model})
- /api/{model} - POST(создание новой записи {model})
- /api/{model}/<int:id> - PUT(обновление записи {model})
- /api/{model}/<int:id> - DELETE(удаление записи {model})
- Включение/исключение списка авторов в ресурс, предоставляемый по api, происходит с передачей параметра в url: /api/books?authors=yes|no, где yes или no указываются на выбор, или при переходе по /api/books - выполняется неявный /api/books?authors=yes.
- При создании новой записи book -> /api/books (POST-запрос), есть возможность передать список id существующих авторов в теле запроса, чтобы привязать авторов к книге. Пример: { ..., "authors": [1, 2]}.
docker-compose exec flaskapp pytest
- Обернуть запросы к БД в api, в тех местах, где они могут упасть в try-except.
- Переписать views, используя flask CBV.
- !Важно! Исправить коды возвращаемых запросов по api -> а также в тестах api.
- Добавить схему author в схему book(вложенное поле).
- Фильтр books?authors=yes|no должен возвращать json с отображением|без авторов.
- Возвращать в api не словарь, а jsonify(data).
- Вынести тесты в директорию с app.
- Вынести методы моделей такие как: update_or_create, delete в менеджер модели.
- *Добавить валидацию значений полей, обернув метод декоратором @validate('field_name') -> marshmallow
- **Вынести api в blueprint
- ***Mock'и в тестах.
- ****Добавить ветку|репозиторий с реализацией проекта, используя pydantic.