Automated Action 221dbad51a Fix Supervisor startup issues
- Add startup script for production deployment
- Create Supervisor configuration file
- Update main.py to ensure database initialization at startup
- Add configurable port via environment variable
- Add Supervisor setup instructions to README
- Initialize database at application startup
2025-05-17 21:16:24 +00:00

4.4 KiB

Generic REST API Service

This is a FastAPI application that provides a simple generic REST API service with CRUD operations for an "Item" resource.

Features

  • FastAPI-based RESTful API
  • SQLite database with SQLAlchemy ORM
  • Alembic for database migrations
  • Pydantic for data validation
  • Comprehensive CRUD operations
  • Health check endpoint
  • Automatic OpenAPI documentation

Project Structure

├── alembic/                  # Database migration files
│   ├── versions/             # Migration version scripts
│   ├── env.py                # Alembic environment configuration
│   └── script.py.mako        # Migration script template
├── app/                      # Application package
│   ├── api/                  # API routes
│   │   ├── endpoints/        # API endpoint modules
│   │   ├── api.py            # API router setup
│   │   └── deps.py           # Dependency injection functions
│   ├── core/                 # Core application modules
│   │   └── config.py         # Application configuration
│   ├── crud/                 # CRUD operation modules
│   │   ├── base.py           # Base CRUD operations
│   │   └── crud_item.py      # Item-specific CRUD operations
│   ├── db/                   # Database modules
│   │   ├── base.py           # Import all models
│   │   ├── base_class.py     # Base model class
│   │   ├── init_db.py        # Database initialization
│   │   └── session.py        # DB session setup
│   ├── models/               # SQLAlchemy models
│   │   └── item.py           # Item model
│   └── schemas/              # Pydantic schemas
│       └── item.py           # Item schema
├── alembic.ini               # Alembic configuration
├── main.py                   # Application entry point
├── requirements.txt          # Project dependencies
├── start.sh                  # Production startup script
└── supervisor.conf           # Supervisor configuration

Setup and Installation

  1. Clone the repository:
git clone <repository-url>
cd generic-rest-api-service
  1. Create and activate a virtual environment (optional, but recommended):
python -m venv venv
source venv/bin/activate  # On Windows: venv\\Scripts\\activate
  1. Install dependencies:
pip install -r requirements.txt
  1. Run database migrations:
# Make sure you are in the project root directory
alembic upgrade head

# If you encounter any module import errors, you can also try:
PYTHONPATH=$PWD alembic upgrade head
  1. Start the application:

Development mode:

uvicorn main:app --reload

The application will be available at http://127.0.0.1:8000.

Production mode with Supervisor:

The application comes with a Supervisor configuration file for production deployment:

# Make the start script executable
chmod +x start.sh

# Copy the supervisor configuration to the supervisor config directory
cp supervisor.conf /etc/supervisor/conf.d/fastapi-app.conf

# Restart supervisor to load the new configuration
supervisorctl reread
supervisorctl update

# Check the status of the application
supervisorctl status app-8001

# View logs if needed
tail -f /var/log/supervisor/app-8001_stdout.log
tail -f /var/log/supervisor/app-8001_stderr.log

The application will be available at http://127.0.0.1:8001 when running with Supervisor.

API Documentation

Once the application is running, you can access the automatically generated API documentation:

API Endpoints

Health Check

  • GET /api/v1/health: Check if the service is healthy

Items

  • GET /api/v1/items: List all items
    • Query parameters:
      • skip: Number of items to skip (default: 0)
      • limit: Maximum number of items to return (default: 100)
      • active_only: If true, return only active items (default: false)
  • POST /api/v1/items: Create a new item
  • GET /api/v1/items/{id}: Get a specific item by ID
  • PUT /api/v1/items/{id}: Update a specific item
  • DELETE /api/v1/items/{id}: Delete a specific item (returns 204 No Content)

Development

Running Tests

# Add test command here

Linting with Ruff

ruff check .
ruff format .