chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,229 @@
|
||||
# FastAPI Project Configuration
|
||||
|
||||
This file provides specific guidance for FastAPI web application development using Claude Code.
|
||||
|
||||
## Project Overview
|
||||
|
||||
This is a FastAPI application project optimized for modern API development with automatic documentation, type hints, and async support.
|
||||
|
||||
## FastAPI-Specific Development Commands
|
||||
|
||||
### Project Management
|
||||
- `uvicorn app.main:app --reload` - Start development server with auto-reload
|
||||
- `uvicorn app.main:app --host 0.0.0.0 --port 8000` - Start server on all interfaces
|
||||
- `uvicorn app.main:app --workers 4` - Start with multiple workers
|
||||
|
||||
### Database Management
|
||||
- `alembic init alembic` - Initialize Alembic migrations
|
||||
- `alembic revision --autogenerate -m "message"` - Create migration
|
||||
- `alembic upgrade head` - Apply migrations
|
||||
- `alembic downgrade -1` - Rollback one migration
|
||||
|
||||
### Development Tools
|
||||
- `python -m pytest` - Run tests
|
||||
- `python -m pytest --cov=app` - Run tests with coverage
|
||||
- `mypy app/` - Type checking
|
||||
- `black app/` - Code formatting
|
||||
|
||||
## FastAPI Project Structure
|
||||
|
||||
```
|
||||
myproject/
|
||||
├── app/ # Application package
|
||||
│ ├── __init__.py
|
||||
│ ├── main.py # FastAPI application
|
||||
│ ├── core/ # Core configuration
|
||||
│ │ ├── __init__.py
|
||||
│ │ ├── config.py # Settings
|
||||
│ │ └── security.py # Authentication
|
||||
│ ├── api/ # API routes
|
||||
│ │ ├── __init__.py
|
||||
│ │ ├── deps.py # Dependencies
|
||||
│ │ └── v1/
|
||||
│ │ ├── __init__.py
|
||||
│ │ ├── api.py # API router
|
||||
│ │ └── endpoints/
|
||||
│ ├── models/ # Database models
|
||||
│ │ ├── __init__.py
|
||||
│ │ ├── base.py
|
||||
│ │ └── user.py
|
||||
│ ├── schemas/ # Pydantic schemas
|
||||
│ │ ├── __init__.py
|
||||
│ │ └── user.py
|
||||
│ ├── repositories/ # Data access layer
|
||||
│ │ ├── __init__.py
|
||||
│ │ └── user.py
|
||||
│ ├── services/ # Business logic
|
||||
│ │ ├── __init__.py
|
||||
│ │ └── auth.py
|
||||
│ └── db/ # Database configuration
|
||||
│ ├── __init__.py
|
||||
│ └── database.py
|
||||
├── alembic/ # Database migrations
|
||||
├── tests/ # Test files
|
||||
├── requirements.txt # Dependencies
|
||||
└── docker-compose.yml # Docker configuration
|
||||
```
|
||||
|
||||
## FastAPI Application Setup
|
||||
|
||||
```python
|
||||
# app/main.py
|
||||
from fastapi import FastAPI
|
||||
from app.core.config import settings
|
||||
from app.api.v1.api import api_router
|
||||
|
||||
app = FastAPI(
|
||||
title=settings.PROJECT_NAME,
|
||||
version=settings.VERSION,
|
||||
openapi_url=f"/api/v1/openapi.json"
|
||||
)
|
||||
|
||||
# Include routers
|
||||
app.include_router(api_router, prefix="/api/v1")
|
||||
|
||||
@app.get("/")
|
||||
async def root():
|
||||
return {"message": "Welcome to FastAPI"}
|
||||
```
|
||||
|
||||
## Configuration Management
|
||||
|
||||
```python
|
||||
# app/core/config.py
|
||||
from pydantic import BaseSettings
|
||||
|
||||
class Settings(BaseSettings):
|
||||
PROJECT_NAME: str = "FastAPI App"
|
||||
VERSION: str = "1.0.0"
|
||||
SECRET_KEY: str
|
||||
DATABASE_URL: str
|
||||
|
||||
class Config:
|
||||
env_file = ".env"
|
||||
|
||||
settings = Settings()
|
||||
```
|
||||
|
||||
## FastAPI Best Practices
|
||||
|
||||
### API Design
|
||||
- Use Pydantic models for request/response validation
|
||||
- Implement proper HTTP status codes
|
||||
- Add comprehensive API documentation
|
||||
- Use dependency injection for common functionality
|
||||
- Implement proper error handling
|
||||
|
||||
### Database Integration
|
||||
- Use SQLAlchemy with async support
|
||||
- Implement repository pattern for data access
|
||||
- Use Alembic for database migrations
|
||||
- Add proper database connection pooling
|
||||
- Implement database health checks
|
||||
|
||||
### Authentication & Security
|
||||
- Use JWT tokens for authentication
|
||||
- Implement OAuth2 with scopes
|
||||
- Add rate limiting for API endpoints
|
||||
- Use HTTPS in production
|
||||
- Implement proper CORS configuration
|
||||
|
||||
### Performance Optimization
|
||||
- Use async/await for I/O operations
|
||||
- Implement response caching
|
||||
- Add database query optimization
|
||||
- Use connection pooling
|
||||
- Monitor application performance
|
||||
|
||||
## Testing Strategy
|
||||
|
||||
### Test Organization
|
||||
```python
|
||||
# tests/conftest.py
|
||||
import pytest
|
||||
from fastapi.testclient import TestClient
|
||||
from app.main import app
|
||||
|
||||
@pytest.fixture
|
||||
def client():
|
||||
return TestClient(app)
|
||||
```
|
||||
|
||||
### Test Types
|
||||
- **Unit tests** for business logic
|
||||
- **Integration tests** for API endpoints
|
||||
- **Database tests** with test fixtures
|
||||
- **Authentication tests** for security
|
||||
|
||||
## Deployment Considerations
|
||||
|
||||
### Production Setup
|
||||
- Use Uvicorn with multiple workers
|
||||
- Implement proper logging and monitoring
|
||||
- Set up reverse proxy (Nginx)
|
||||
- Use environment variables for configuration
|
||||
- Implement health checks
|
||||
|
||||
### Docker Configuration
|
||||
```dockerfile
|
||||
FROM python:3.11-slim
|
||||
WORKDIR /app
|
||||
COPY requirements.txt .
|
||||
RUN pip install -r requirements.txt
|
||||
COPY . .
|
||||
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0"]
|
||||
```
|
||||
|
||||
### Environment Variables
|
||||
```bash
|
||||
SECRET_KEY=your-secret-key
|
||||
DATABASE_URL=postgresql://user:pass@host/db
|
||||
REDIS_URL=redis://localhost:6379
|
||||
```
|
||||
|
||||
## Common FastAPI Patterns
|
||||
|
||||
### Dependency Injection
|
||||
```python
|
||||
from fastapi import Depends
|
||||
from app.db.database import get_db
|
||||
|
||||
@app.get("/users/")
|
||||
async def get_users(db: Session = Depends(get_db)):
|
||||
return users
|
||||
```
|
||||
|
||||
### Background Tasks
|
||||
```python
|
||||
from fastapi import BackgroundTasks
|
||||
|
||||
@app.post("/send-email/")
|
||||
async def send_email(background_tasks: BackgroundTasks):
|
||||
background_tasks.add_task(send_email_task)
|
||||
return {"message": "Email sent"}
|
||||
```
|
||||
|
||||
### Middleware
|
||||
```python
|
||||
@app.middleware("http")
|
||||
async def add_process_time_header(request, call_next):
|
||||
response = await call_next(request)
|
||||
return response
|
||||
```
|
||||
|
||||
## Development Workflow
|
||||
|
||||
### Getting Started
|
||||
1. Clone repository
|
||||
2. Create virtual environment: `python -m venv venv`
|
||||
3. Install dependencies: `pip install -r requirements.txt`
|
||||
4. Set environment variables
|
||||
5. Run migrations: `alembic upgrade head`
|
||||
6. Start server: `uvicorn app.main:app --reload`
|
||||
|
||||
### Code Quality
|
||||
- **Black** - Code formatting
|
||||
- **isort** - Import sorting
|
||||
- **mypy** - Type checking
|
||||
- **pytest** - Testing framework
|
||||
- **flake8** - Linting
|
||||
Reference in New Issue
Block a user