{"id":26090530,"url":"https://github.com/luandnh/py_api_boilerplate","last_synced_at":"2026-05-16T18:09:41.601Z","repository":{"id":280747302,"uuid":"942529446","full_name":"luandnh/py_api_boilerplate","owner":"luandnh","description":"A lightweight and scalable FastAPI boilerplate for building high-performance APIs with MySQL using the repository pattern.","archived":false,"fork":false,"pushed_at":"2025-03-05T04:12:21.000Z","size":9,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-04T03:48:12.904Z","etag":null,"topics":["boilerplate","fastapi","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/luandnh.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-03-04T08:46:44.000Z","updated_at":"2025-03-05T04:15:11.000Z","dependencies_parsed_at":"2025-03-05T05:22:37.424Z","dependency_job_id":"7f3d07c1-cb89-4d89-bee1-2c88c091645a","html_url":"https://github.com/luandnh/py_api_boilerplate","commit_stats":null,"previous_names":["luandnh/py_api_boilerplate"],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/luandnh/py_api_boilerplate","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luandnh%2Fpy_api_boilerplate","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luandnh%2Fpy_api_boilerplate/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luandnh%2Fpy_api_boilerplate/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luandnh%2Fpy_api_boilerplate/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/luandnh","download_url":"https://codeload.github.com/luandnh/py_api_boilerplate/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luandnh%2Fpy_api_boilerplate/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33113513,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-16T04:41:52.686Z","status":"ssl_error","status_checked_at":"2026-05-16T04:41:52.009Z","response_time":115,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["boilerplate","fastapi","python"],"created_at":"2025-03-09T09:34:30.447Z","updated_at":"2026-05-16T18:09:41.586Z","avatar_url":"https://github.com/luandnh.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# **py-api-boilerplate** 🚀\n\nA lightweight and scalable FastAPI boilerplate for building high-performance APIs with MySQL using the repository pattern.\n\n## **Features**\n\n✅ FastAPI for modern API development  \n✅ SQLModel + SQLAlchemy for database interaction  \n✅ Async MySQL support with `aiomysql`  \n✅ Pydantic for data validation and settings management  \n✅ `.env` support via `python-dotenv`  \n✅ Repository pattern for clean architecture  \n✅ Scalar for API documentation  \n✅ Uvicorn for ASGI server\n\n## **Requirements**\n\n- Python `\u003e=3.10`\n- MySQL Server\n\n## **Installation**\n\n1. **Clone the repository**\n\n   ```sh\n   git clone https://github.com/your-username/py-api-boilerplate.git\n   cd py-api-boilerplate\n   ```\n\n2. **Install dependencies using Poetry**\n\n   ```sh\n   poetry install\n   ```\n\n3. **Set up environment variables**  \n   Create a `.env` file:\n\n   ```sh\n   cp .env.example .env\n   ```\n\n4. **Run the API server**\n   ```sh\n   poetry run uvicorn app.main:app --reload\n   ```\n\n## **Project Structure**\n\n```\npy-api-boilerplate/\n│── app/\n│   ├── api/             # API routes\n│   ├── common/\n│   │   ├── utilities/   # Utility functions\n│   ├── core/\n│   │   ├── db/         # Database configuration and connections\n│   ├── internal/        # Internal utilities\n│   ├── middlewares/     # Custom middlewares\n│   ├── models/          # SQLModel database models\n│   ├── repositories/    # Data access layer (Repository pattern)\n│   ├── services/        # Business logic layer\n```\n\n## **Repository Pattern in This Project**\n\nThis project follows the **repository pattern** to separate the data access logic from the business logic, ensuring better maintainability and testability.\n\n- **`models/`**: Defines SQLModel database models.\n- **`repositories/`**: Handles database operations (CRUD) and abstracts direct queries.\n- **`services/`**: Implements business logic by interacting with repositories.\n\n### **Example Usage**\n\n#### **User Model (`models/user.py`)**\n\n```python\nfrom sqlmodel import SQLModel, Field\n\nclass User(SQLModel, table=True):\n    id: int = Field(default=None, primary_key=True)\n    username: str = Field(index=True, nullable=False)\n    email: str = Field(unique=True, nullable=False)\n```\n\n#### **User Repository (`repositories/user_repository.py`)**\n\n```python\nfrom sqlmodel import Session, select\nfrom app.models.user import User\n\nclass UserRepository:\n    def __init__(self, session: Session):\n        self.session = session\n\n    def get_by_id(self, user_id: int):\n        return self.session.exec(select(User).where(User.id == user_id)).first()\n\n    def create(self, user: User):\n        self.session.add(user)\n        self.session.commit()\n        self.session.refresh(user)\n        return user\n```\n\n#### **User Service (`services/user_service.py`)**\n\n```python\nfrom app.repositories.user_repository import UserRepository\n\nclass UserService:\n    def __init__(self, user_repo: UserRepository):\n        self.user_repo = user_repo\n\n    def get_user(self, user_id: int):\n        return self.user_repo.get_by_id(user_id)\n\n    def create_user(self, user_data):\n        user = User(**user_data)\n        return self.user_repo.create(user)\n```\n\n#### **API Route (`api/routes/user.py`)**\n\n```python\nfrom fastapi import APIRouter, Depends\nfrom sqlmodel import Session\nfrom app.core.db import get_session\nfrom app.repositories.user_repository import UserRepository\nfrom app.services.user_service import UserService\n\nrouter = APIRouter()\n\n@router.get(\"/users/{user_id}\")\ndef get_user(user_id: int, session: Session = Depends(get_session)):\n    user_service = UserService(UserRepository(session))\n    return user_service.get_user(user_id)\n```\n\n## **Usage**\n\n### **API Documentation**\n\nOnce running, visit **Scalar API Docs**:  \n📌 `http://127.0.0.1:8000/docs`\n\n### **Example Request (cURL)**\n\n```sh\ncurl -X 'GET' 'http://127.0.0.1:8000/users/1' -H 'accept: application/json'\n```\n\n## **License**\n\nMIT License\n\n---\n\nThis boilerplate is designed for scalable and maintainable FastAPI projects using the repository pattern. 🚀\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluandnh%2Fpy_api_boilerplate","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fluandnh%2Fpy_api_boilerplate","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluandnh%2Fpy_api_boilerplate/lists"}