Rewrite README with comprehensive documentation
- Add modern formatting with emojis and clear sections - Include detailed API reference with request/response examples - Add project structure overview - Include development, deployment, and contribution guidelines - Enhance quick start instructions with virtual environment setup - Add health check documentation and code quality tools
This commit is contained in:
parent
ae91c493c6
commit
974e0edf44
266
README.md
266
README.md
@ -1,72 +1,232 @@
|
|||||||
# Todo API
|
# FastAPI Todo Application
|
||||||
|
|
||||||
A simple todo application built with FastAPI and SQLite.
|
A modern, fast, and feature-rich todo management API built with FastAPI, SQLAlchemy, and SQLite.
|
||||||
|
|
||||||
## Features
|
## 🚀 Quick Start
|
||||||
|
|
||||||
- Create, read, update, and delete todos
|
### Prerequisites
|
||||||
- SQLite database with Alembic migrations
|
- Python 3.8+
|
||||||
- FastAPI with automatic API documentation
|
- pip package manager
|
||||||
- Health check endpoint
|
|
||||||
- CORS enabled for all origins
|
|
||||||
|
|
||||||
## Installation
|
### Installation & Setup
|
||||||
|
|
||||||
1. Install dependencies:
|
1. **Clone and navigate to the project:**
|
||||||
```bash
|
```bash
|
||||||
pip install -r requirements.txt
|
git clone <repository-url>
|
||||||
|
cd todoapp
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Create a virtual environment (recommended):**
|
||||||
|
```bash
|
||||||
|
python -m venv venv
|
||||||
|
source venv/bin/activate # On Windows: venv\Scripts\activate
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Install dependencies:**
|
||||||
|
```bash
|
||||||
|
pip install -r requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **Initialize the database:**
|
||||||
|
```bash
|
||||||
|
alembic upgrade head
|
||||||
|
```
|
||||||
|
|
||||||
|
5. **Start the server:**
|
||||||
|
```bash
|
||||||
|
uvicorn main:app --host 0.0.0.0 --port 8000
|
||||||
|
```
|
||||||
|
|
||||||
|
The API will be available at `http://localhost:8000`
|
||||||
|
|
||||||
|
## 📋 Features
|
||||||
|
|
||||||
|
- ✅ **Full CRUD Operations** - Create, read, update, and delete todos
|
||||||
|
- 🔍 **Pagination Support** - Efficient handling of large todo lists
|
||||||
|
- 📊 **SQLite Database** - Lightweight, serverless database
|
||||||
|
- 🔄 **Database Migrations** - Version-controlled schema changes with Alembic
|
||||||
|
- 📚 **Auto-generated Documentation** - Interactive API docs with Swagger UI
|
||||||
|
- 🌐 **CORS Enabled** - Cross-origin requests supported
|
||||||
|
- 💪 **Type Safety** - Full Pydantic validation and type hints
|
||||||
|
- 🏥 **Health Monitoring** - Built-in health check endpoint
|
||||||
|
- 🎯 **Production Ready** - Structured codebase with best practices
|
||||||
|
|
||||||
|
## 🛠 Tech Stack
|
||||||
|
|
||||||
|
- **FastAPI** - Modern, fast web framework for building APIs
|
||||||
|
- **SQLAlchemy** - SQL toolkit and ORM
|
||||||
|
- **Alembic** - Database migration tool
|
||||||
|
- **Pydantic** - Data validation using Python type annotations
|
||||||
|
- **SQLite** - Lightweight, file-based database
|
||||||
|
- **Uvicorn** - Lightning-fast ASGI server
|
||||||
|
|
||||||
|
## 📡 API Reference
|
||||||
|
|
||||||
|
### Base Endpoints
|
||||||
|
| Method | Endpoint | Description |
|
||||||
|
|--------|----------|-------------|
|
||||||
|
| GET | `/` | API information and links |
|
||||||
|
| GET | `/health` | Health check status |
|
||||||
|
| GET | `/docs` | Interactive API documentation |
|
||||||
|
| GET | `/redoc` | Alternative API documentation |
|
||||||
|
| GET | `/openapi.json` | OpenAPI specification |
|
||||||
|
|
||||||
|
### Todo Management
|
||||||
|
| Method | Endpoint | Description | Request Body |
|
||||||
|
|--------|----------|-------------|--------------|
|
||||||
|
| POST | `/todos/` | Create a new todo | `TodoCreate` |
|
||||||
|
| GET | `/todos/` | List all todos | Query params: `skip`, `limit` |
|
||||||
|
| GET | `/todos/{todo_id}` | Get specific todo | - |
|
||||||
|
| PUT | `/todos/{todo_id}` | Update todo | `TodoUpdate` |
|
||||||
|
| DELETE | `/todos/{todo_id}` | Delete todo | - |
|
||||||
|
|
||||||
|
### Request/Response Models
|
||||||
|
|
||||||
|
#### TodoCreate
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"title": "string",
|
||||||
|
"description": "string (optional)",
|
||||||
|
"completed": false
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
2. Run database migrations:
|
#### TodoUpdate
|
||||||
```bash
|
```json
|
||||||
alembic upgrade head
|
{
|
||||||
|
"title": "string (optional)",
|
||||||
|
"description": "string (optional)",
|
||||||
|
"completed": "boolean (optional)"
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
3. Start the application:
|
#### TodoResponse
|
||||||
```bash
|
```json
|
||||||
uvicorn main:app --host 0.0.0.0 --port 8000
|
{
|
||||||
|
"id": 1,
|
||||||
|
"title": "string",
|
||||||
|
"description": "string",
|
||||||
|
"completed": false,
|
||||||
|
"created_at": "2024-01-01T00:00:00Z",
|
||||||
|
"updated_at": "2024-01-01T00:00:00Z"
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## API Endpoints
|
## 🗂 Project Structure
|
||||||
|
|
||||||
- `GET /` - Root endpoint with API information
|
```
|
||||||
- `GET /health` - Health check endpoint
|
todoapp/
|
||||||
- `GET /docs` - Interactive API documentation
|
├── main.py # FastAPI application entry point
|
||||||
- `GET /redoc` - Alternative API documentation
|
├── requirements.txt # Python dependencies
|
||||||
- `GET /openapi.json` - OpenAPI specification
|
├── alembic.ini # Alembic configuration
|
||||||
|
├── ruff.toml # Code linting configuration
|
||||||
|
├── app/
|
||||||
|
│ ├── __init__.py
|
||||||
|
│ ├── db/
|
||||||
|
│ │ ├── __init__.py
|
||||||
|
│ │ ├── base.py # SQLAlchemy Base class
|
||||||
|
│ │ └── session.py # Database session configuration
|
||||||
|
│ ├── models/
|
||||||
|
│ │ ├── __init__.py
|
||||||
|
│ │ └── todo.py # Todo SQLAlchemy model
|
||||||
|
│ └── schemas/
|
||||||
|
│ ├── __init__.py
|
||||||
|
│ └── todo.py # Pydantic schemas
|
||||||
|
└── alembic/
|
||||||
|
├── env.py # Alembic environment configuration
|
||||||
|
├── script.py.mako # Migration script template
|
||||||
|
└── versions/ # Database migration files
|
||||||
|
└── 001_initial_todo_table.py
|
||||||
|
```
|
||||||
|
|
||||||
### Todo Endpoints
|
## 🧪 Development
|
||||||
|
|
||||||
- `POST /todos/` - Create a new todo
|
### Running in Development Mode
|
||||||
- `GET /todos/` - Get all todos (with pagination)
|
|
||||||
- `GET /todos/{todo_id}` - Get a specific todo
|
|
||||||
- `PUT /todos/{todo_id}` - Update a todo
|
|
||||||
- `DELETE /todos/{todo_id}` - Delete a todo
|
|
||||||
|
|
||||||
## Data Model
|
|
||||||
|
|
||||||
Todo items have the following fields:
|
|
||||||
- `id`: Unique identifier (auto-generated)
|
|
||||||
- `title`: Todo title (required)
|
|
||||||
- `description`: Optional description
|
|
||||||
- `completed`: Boolean completion status (default: false)
|
|
||||||
- `created_at`: Creation timestamp
|
|
||||||
- `updated_at`: Last update timestamp
|
|
||||||
|
|
||||||
## Environment Variables
|
|
||||||
|
|
||||||
No environment variables are required for basic operation. The SQLite database is stored at `/app/storage/db/db.sqlite`.
|
|
||||||
|
|
||||||
## Development
|
|
||||||
|
|
||||||
To run with auto-reload during development:
|
|
||||||
```bash
|
```bash
|
||||||
uvicorn main:app --reload --host 0.0.0.0 --port 8000
|
uvicorn main:app --reload --host 0.0.0.0 --port 8000
|
||||||
```
|
```
|
||||||
|
|
||||||
## API Documentation
|
### Code Quality
|
||||||
|
This project uses Ruff for linting and formatting:
|
||||||
|
```bash
|
||||||
|
ruff check .
|
||||||
|
ruff format .
|
||||||
|
```
|
||||||
|
|
||||||
Once the server is running, you can access:
|
### Database Operations
|
||||||
- Interactive documentation: http://localhost:8000/docs
|
|
||||||
- Alternative documentation: http://localhost:8000/redoc
|
**Create a new migration:**
|
||||||
- OpenAPI specification: http://localhost:8000/openapi.json
|
```bash
|
||||||
|
alembic revision --autogenerate -m "Description of changes"
|
||||||
|
```
|
||||||
|
|
||||||
|
**Apply migrations:**
|
||||||
|
```bash
|
||||||
|
alembic upgrade head
|
||||||
|
```
|
||||||
|
|
||||||
|
**Rollback migrations:**
|
||||||
|
```bash
|
||||||
|
alembic downgrade -1
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🔧 Configuration
|
||||||
|
|
||||||
|
### Database
|
||||||
|
- **Type:** SQLite
|
||||||
|
- **Location:** `/app/storage/db/db.sqlite`
|
||||||
|
- **Connection:** Automatically created on startup
|
||||||
|
|
||||||
|
### Environment Variables
|
||||||
|
No environment variables are required for basic operation. The application uses sensible defaults for development.
|
||||||
|
|
||||||
|
## 🏥 Health Check
|
||||||
|
|
||||||
|
The application includes a health check endpoint that returns the service status:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl http://localhost:8000/health
|
||||||
|
```
|
||||||
|
|
||||||
|
Response:
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"status": "healthy",
|
||||||
|
"service": "Todo API"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## 📖 API Documentation
|
||||||
|
|
||||||
|
Once the server is running, access the documentation at:
|
||||||
|
|
||||||
|
- **Swagger UI:** http://localhost:8000/docs
|
||||||
|
- **ReDoc:** http://localhost:8000/redoc
|
||||||
|
- **OpenAPI JSON:** http://localhost:8000/openapi.json
|
||||||
|
|
||||||
|
## 🚀 Deployment
|
||||||
|
|
||||||
|
For production deployment, consider:
|
||||||
|
|
||||||
|
1. **Use a production WSGI server:**
|
||||||
|
```bash
|
||||||
|
pip install gunicorn
|
||||||
|
gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Set up proper logging and monitoring**
|
||||||
|
3. **Configure environment-specific settings**
|
||||||
|
4. **Use a more robust database (PostgreSQL, MySQL)**
|
||||||
|
5. **Set up SSL/TLS certificates**
|
||||||
|
|
||||||
|
## 🤝 Contributing
|
||||||
|
|
||||||
|
1. Fork the repository
|
||||||
|
2. Create a feature branch
|
||||||
|
3. Make your changes
|
||||||
|
4. Run tests and linting
|
||||||
|
5. Submit a pull request
|
||||||
|
|
||||||
|
## 📝 License
|
||||||
|
|
||||||
|
This project is open source and available under the MIT License.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user