REST API untuk aplikasi blog yang dibangun dengan FastAPI, SQLAlchemy, dan PostgreSQL.
- Autentikasi JWT
- Manajemen pengguna (admin dan penulis)
- Manajemen artikel blog (post)
- Kategori dan tag
- Komentar (termasuk komentar anonim)
- Upload thumbnail untuk artikel
- Endpoint publik untuk konten yang dipublikasikan
- Dokumentasi API dengan OpenAPI 3
- Python 3.8+
- PostgreSQL
- Docker dan Docker Compose (opsional)
Cara termudah untuk menjalankan aplikasi adalah dengan Docker Compose:
# Clone repositori
git clone https://github.com/yourusername/python-fastapi-blog-api.git
cd python-fastapi-blog-api
# Jalankan dengan Docker Compose
docker-compose up -dAplikasi akan tersedia di http://localhost:8000
# Clone repositori
git clone https://github.com/yourusername/python-fastapi-blog-api.git
cd python-fastapi-blog-api
# Buat virtual environment
python -m venv venv
source venv/bin/activate  # Untuk Linux/Mac
# atau
venv\Scripts\activate  # Untuk Windows
# Install dependensi
pip install -r requirements.txt
# Siapkan variabel lingkungan
export DATABASE_URL=postgresql://user:password@localhost:5432/blog
export SECRET_KEY=your-secret-key
export ALGORITHM=HS256
export ACCESS_TOKEN_EXPIRE_MINUTES=30
export MEDIA_ROOT=./media
# Jalankan aplikasi
uvicorn app.main:app --reloadpython-fastapi-blog-api/
├── app/
│   ├── api/
│   │   ├── deps.py           # Dependency injection
│   │   └── v1/               # API endpoints
│   ├── core/                 # Konfigurasi aplikasi
│   ├── crud/                 # CRUD operations
│   ├── db/                   # Database setup
│   ├── models/               # SQLAlchemy models
│   ├── schemas/              # Pydantic schemas
│   ├── tests/                # Unit tests
│   ├── utils/                # Utility functions
│   └── main.py               # FastAPI application
├── media/                    # Media uploads
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
└── README.md
Dokumentasi API tersedia di:
- Swagger UI: http://localhost:8000/api/docs
- ReDoc: http://localhost:8000/api/redoc
- POST /api/v1/auth/register- Registrasi pengguna baru
- POST /api/v1/auth/login- Login dan dapatkan token JWT
- POST /api/v1/auth/password-reset-request- Minta reset password
- POST /api/v1/auth/password-reset- Reset password
- GET /api/v1/users/- Daftar semua pengguna (admin)
- POST /api/v1/users/- Buat pengguna baru (admin)
- GET /api/v1/users/{user_id}- Detail pengguna
- PUT /api/v1/users/{user_id}- Update pengguna
- DELETE /api/v1/users/{user_id}- Hapus pengguna
- GET /api/v1/posts/- Daftar semua artikel
- POST /api/v1/posts/- Buat artikel baru
- GET /api/v1/posts/{post_id}- Detail artikel
- PUT /api/v1/posts/{post_id}- Update artikel
- DELETE /api/v1/posts/{post_id}- Hapus artikel
- POST /api/v1/posts/{post_id}/thumbnail- Upload thumbnail
- DELETE /api/v1/posts/{post_id}/thumbnail- Hapus thumbnail
- GET /api/v1/posts/public/- Daftar artikel yang dipublikasikan
- GET /api/v1/posts/public/{post_id}- Detail artikel yang dipublikasikan
- GET /api/v1/posts/public/slug/{slug}- Detail artikel berdasarkan slug
- GET /api/v1/comments/- Daftar semua komentar
- POST /api/v1/comments/- Buat komentar baru
- GET /api/v1/comments/{comment_id}- Detail komentar
- PUT /api/v1/comments/{comment_id}- Update komentar
- DELETE /api/v1/comments/{comment_id}- Hapus komentar
- POST /api/v1/comments/{comment_id}/approve- Setujui komentar (admin)
- GET /api/v1/comments/public/post/{post_id}- Daftar komentar yang disetujui untuk artikel
- POST /api/v1/comments/public/- Buat komentar anonim
# Jalankan semua test
pytest
# Jalankan test dengan coverage
pytest --cov=appMIT