Base FastAPI project for applying general RestAPI Application cases.
- Minimal functionality.
- Convincing architecture.
- Easy to read.
- Compatibility.
- Versatility.
- user
- post [user (1 : n) post]
- tag [post (n : n) tag]
- Python3.9+
- Fastapi 0.78.0
- Database
- MySQL5.7+
- Migration with alembic
- pytest with real DB
- Load with two ways (eager, lazy)
- Modeling with schema (1:1, 1:n, n:n)
- dependency-injector
- service-repository pattern
- JWT authentication
- role separation each endpoint
- Deployment
- container environment(k8s, docker)
- raw WAS(Web Application Server)
- db(alembic)
alembic upgrade head
: apply every migrationsalembic downgrade base
: rollback every migrationsalembic revision --autogenerate -m "revision_name"
: create new migrationalembic history
: get alembic revision history
- How to migration
- Create or modify models from
app/model/*.py
alembic -x ENV=[dev|stage|prod] revision --autogenerate -m "revision_name"
- Check auto generated migration file from
app/migrations/versions/*.py
alembic -x ENV=[dev|stage|prod] upgrade head
If ENV does not exist, it will be applied to the test.
- Create or modify models from
- server
uvicorn app.main:app --reload
: base- options
- host:
--host 0.0.0.0
- port:
--port 8000
- host:
- test
pytest
: basepytest --cov=app --cov-report=term-missing
: coverage with stdoutpytest --cov=app --cov-report=html
: coverage with html
# mysql case
ENV=dev
DATABASE=test_database
DB=mysql
DB_USER=root
DB_PASSWORD=qwer1234
DB_HOST=localhost
DB_PORT=3306
# postgres case
ENV=dev
DATABASE=test_databasef
DB=postgresql
DB_USER=gyu
DB_PASSWORD=
DB_HOST=localhost
DB_PORT=5432