Aller au contenu

Utiliser les modèles

FastAPI-fastkit propose des modèles de projet prêts à l'emploi pour vous aider à démarrer rapidement avec différentes piles techniques.

Modèles disponibles

Consultez les modèles disponibles avec la commande list-templates :

$ fastkit list-templates
                      Available Templates
┌─────────────────────────┬───────────────────────────────────┐
│ fastapi-custom-response │ Async Item Management API with    │
│                         │ Custom Response System            │
│ fastapi-dockerized      │ Dockerized FastAPI Item           │
│                         │ Management API                    │
│ fastapi-empty           │ No description                    │
│ fastapi-async-crud      │ Async Item Management API Server  │
│ fastapi-psql-orm        │ Dockerized FastAPI Item           │
│                         │ Management API with PostgreSQL    │
│ fastapi-default         │ Simple FastAPI Project            │
└─────────────────────────┴───────────────────────────────────┘

Descriptions des modèles

1. fastapi-default

Projet FastAPI simple

  • Configuration FastAPI basique avec les fonctionnalités essentielles
  • Gestion d'items avec des données factices
  • Idéal pour apprendre et pour les API simples
  • Inclut les opérations CRUD de base

Idéal pour :

  • Débutants en FastAPI
  • API web simples
  • Apprentissage et prototypage

2. fastapi-async-crud

Serveur d'API asynchrone de gestion d'items

  • Application FastAPI entièrement asynchrone
  • Opérations CRUD avancées avec async/await
  • Meilleure performance pour les opérations d'E/S
  • Stockage de données factices avec motifs asynchrones

Idéal pour :

  • Applications haute performance
  • Opérations intensives en E/S
  • Développement Python asynchrone moderne

3. fastapi-custom-response

API asynchrone de gestion d'items avec système de réponse personnalisé

  • Modèles de réponse personnalisés et formatage
  • Gestion avancée des erreurs
  • Prise en charge de la pagination
  • Codes d'état HTTP et réponses personnalisés

Idéal pour :

  • API nécessitant des formats de réponse spécifiques
  • Besoins avancés en gestion d'erreurs
  • Logique métier personnalisée dans les réponses

4. fastapi-dockerized

API FastAPI de gestion d'items conteneurisée avec Docker

  • Conteneurisation Docker complète
  • Configuration de déploiement prête pour la production
  • Builds Docker multi-étapes
  • Configuration basée sur l'environnement

Idéal pour :

  • Déploiements en production
  • Environnements conteneurisés
  • Pipelines DevOps et CI/CD

5. fastapi-psql-orm

API FastAPI conteneurisée de gestion d'items avec PostgreSQL

  • Intégration de la base de données PostgreSQL
  • ORM SQLAlchemy avec migrations Alembic
  • Docker Compose pour le développement local
  • Opérations CRUD complètes en base de données

Idéal pour :

  • Applications pilotées par une base de données
  • Stockage de données de qualité production
  • Relations de données complexes

6. fastapi-empty

Projet FastAPI minimal

  • Configuration FastAPI minimale
  • Aucune fonctionnalité ajoutée à l'avance
  • Page blanche pour du développement personnalisé

Idéal pour :

  • Démarrer de zéro
  • Dépendances minimales
  • Exigences d'architecture personnalisée

Créer un projet à partir d'un modèle

Utilisez la commande startdemo pour créer un projet à partir d'un modèle :

$ fastkit startdemo
Enter the project name: my-blog-api
Enter the author name: John Doe
Enter the author email: john@example.com
Enter the project description: Blog API with PostgreSQL

Available Templates:
           fastapi-default
┌─────────────┬──────────────────────┐
│ Description │ Simple FastAPI       │
│             │ Project              │
│ Stack       │ FastAPI, Uvicorn     │
│ Database    │ Mock Data            │
│ Features    │ Basic CRUD           │
└─────────────┴──────────────────────┘

           fastapi-psql-orm
┌─────────────┬──────────────────────┐
│ Description │ Dockerized FastAPI   │
│             │ Item Management API  │
│             │ with PostgreSQL      │
│ Stack       │ FastAPI, PostgreSQL, │
│             │ SQLAlchemy, Docker   │
│ Database    │ PostgreSQL           │
│ Features    │ Full ORM, Migrations │
└─────────────┴──────────────────────┘

Select template (fastapi-default, fastapi-async-crud, fastapi-custom-response, fastapi-dockerized, fastapi-psql-orm, fastapi-empty): fastapi-psql-orm

           Project Information
┌──────────────┬─────────────────────┐
│ Project Name │ my-blog-api         │
│ Author       │ John Doe            │
│ Author Email │ john@example.com    │
│ Description  │ Blog API with       │
│              │ PostgreSQL          │
└──────────────┴─────────────────────┘

       Template Dependencies
┌──────────────┬───────────────────┐
│ Dependency 1 │ fastapi           │
│ Dependency 2 │ uvicorn           │
│ Dependency 3 │ sqlalchemy        │
│ Dependency 4 │ alembic           │
│ Dependency 5 │ psycopg2-binary   │
│ Dependency 6 │ python-dotenv     │
│ Dependency 7 │ pytest            │
└──────────────┴───────────────────┘

Available Package Managers:
                   Package Managers
┌────────┬────────────────────────────────────────────┐
│ PIP    │ Standard Python package manager            │
│ UV     │ Fast Python package manager                │
│ PDM    │ Modern Python dependency management        │
│ POETRY │ Python dependency management and packaging │
└────────┴────────────────────────────────────────────┘

Select package manager (pip, uv, pdm, poetry) [uv]: uv
Do you want to proceed with project creation? [y/N]: y

✨ FastAPI project 'my-blog-api' from 'fastapi-psql-orm' has been created successfully!

Comparaison des fonctionnalités des modèles

Fonctionnalité Default Async CRUD Custom Response Dockerized PostgreSQL ORM Empty
FastAPI de base
Données factices
Support asynchrone Basique
Réponses personnalisées
Docker
Base de données Factice Factice Factice Factice PostgreSQL Aucune
ORM SQLAlchemy
Migrations Alembic
Tests
Idéal pour Apprentissage Performance API personnalisées Production Applications avec base de données Personnalisé

Configuration spécifique à chaque modèle

Utiliser fastapi-psql-orm

Ce modèle inclut une configuration PostgreSQL complète. Après la création :

  1. Démarrer PostgreSQL avec Docker :
$ cd my-blog-api
$ docker-compose up -d postgres
Starting my-blog-api_postgres_1 ... done
  1. Exécuter les migrations de base de données :
$ source .venv/bin/activate
$ alembic upgrade head
INFO  [alembic.runtime.migration] Context impl PostgresqlImpl.
INFO  [alembic.runtime.migration] Will assume transactional DDL.
INFO  [alembic.runtime.migration] Running upgrade -> bedcdc35b64a, first alembic
  1. Démarrer le serveur d'API :
$ fastkit runserver
INFO:     Uvicorn running on http://127.0.0.1:8000

Utiliser fastapi-dockerized

Ce modèle offre un support Docker complet :

  1. Construire l'image Docker :
$ cd my-dockerized-api
$ docker build -t my-dockerized-api .
Successfully built abc123def456
Successfully tagged my-dockerized-api:latest
  1. Exécuter le conteneur :
$ docker run -p 8000:8000 my-dockerized-api
INFO:     Uvicorn running on http://0.0.0.0:8000

Utiliser fastapi-custom-response

Ce modèle inclut une gestion avancée des réponses :

  1. Modèles de réponse personnalisés :
from src.helper.pagination import PaginatedResponse
from src.schemas.base import StandardResponse

@router.get("/", response_model=PaginatedResponse[Item])
def read_items(skip: int = 0, limit: int = 10):
    items = items_crud.get_multi(skip=skip, limit=limit)
    total = items_crud.count()

    return PaginatedResponse(
        data=items,
        total=total,
        page=skip // limit + 1,
        pages=(total + limit - 1) // limit
    )

@router.post("/", response_model=StandardResponse[Item])
def create_item(item: ItemCreate):
    new_item = items_crud.create(item)
    return StandardResponse(
        data=new_item,
        message="Item created successfully",
        status_code=201
    )
  1. Gestion d'erreurs améliorée :
from src.helper.exceptions import ItemNotFoundError, ValidationError

@router.get("/{item_id}", response_model=StandardResponse[Item])
def read_item(item_id: int):
    try:
        item = items_crud.get(item_id)
        return StandardResponse(data=item)
    except ItemNotFoundError:
        raise HTTPException(
            status_code=404,
            detail=f"Item with id {item_id} not found"
        )

Structure des projets de modèle

Chaque modèle suit une structure cohérente mais adaptée :

Structure de fastapi-default

my-project/
├── src/
│   ├── main.py
│   ├── core/config.py
│   ├── api/
│   │   ├── api.py
│   │   └── routes/items.py
│   ├── crud/items.py
│   ├── schemas/items.py
│   └── mocks/mock_items.json
├── tests/
├── scripts/
└── requirements.txt

Structure de fastapi-psql-orm

my-project/
├── src/
│   ├── main.py
│   ├── core/
│   │   ├── config.py
│   │   └── db.py
│   ├── api/
│   │   ├── api.py
│   │   ├── deps.py
│   │   └── routes/items.py
│   ├── crud/items.py
│   ├── schemas/items.py
│   ├── alembic/
│   │   ├── env.py
│   │   └── versions/
│   └── utils/
├── tests/
├── scripts/
├── docker-compose.yml
├── Dockerfile
├── alembic.ini
└── requirements.txt

Personnaliser les modèles

Après avoir créé un projet à partir d'un modèle, vous pouvez le personnaliser :

1. Ajouter de nouvelles routes

$ fastkit addroute posts my-blog-api
$ fastkit addroute users my-blog-api
$ fastkit addroute comments my-blog-api

2. Modifier la configuration

Modifiez src/core/config.py selon vos besoins :

from pydantic_settings import BaseSettings

class Settings(BaseSettings):
    PROJECT_NAME: str = "My Blog API"
    VERSION: str = "1.0.0"
    API_V1_STR: str = "/api/v1"

    # Database settings (for PostgreSQL templates)
    DATABASE_URL: str = "postgresql://user:password@localhost/dbname"

    # Security settings
    SECRET_KEY: str = "your-secret-key-here"
    ACCESS_TOKEN_EXPIRE_MINUTES: int = 30

    class Config:
        env_file = ".env"

settings = Settings()

3. Ajouter des variables d'environnement

Créez un fichier .env à la racine de votre projet :

# .env
PROJECT_NAME=My Blog API
VERSION=1.0.0
DEBUG=True

# Database (for PostgreSQL templates)
DATABASE_URL=postgresql://user:password@localhost:5432/myblogdb
POSTGRES_USER=user
POSTGRES_PASSWORD=password
POSTGRES_DB=myblogdb

# Security
SECRET_KEY=your-super-secret-key-here
ACCESS_TOKEN_EXPIRE_MINUTES=30

Tests des modèles

Chaque modèle est livré avec des tests préconfigurés :

$ cd my-blog-api
$ source .venv/bin/activate
$ python -m pytest

======================== test session starts ========================
tests/test_items.py::test_create_item PASSED
tests/test_items.py::test_read_items PASSED
tests/test_items.py::test_read_item PASSED
tests/test_items.py::test_update_item PASSED
tests/test_items.py::test_delete_item PASSED
======================== 5 passed in 0.23s ========================

Flux de développement avec les modèles

1. Choisir le bon modèle

  • Apprentissage / API simples : fastapi-default
  • Haute performance : fastapi-async-crud
  • Formats de réponse personnalisés : fastapi-custom-response
  • Déploiement en production : fastapi-dockerized
  • Applications avec base de données : fastapi-psql-orm
  • Architecture personnalisée : fastapi-empty

2. Créer et configurer

$ fastkit startdemo
# Follow the prompts
$ cd your-project
$ source .venv/bin/activate

3. Développement

# Démarrer le serveur de développement
$ fastkit runserver

# Exécuter les tests
$ python -m pytest

# Ajouter de nouvelles fonctionnalités
$ fastkit addroute new-resource your-project

4. Déploiement

Pour les modèles destinés à la production (fastapi-dockerized, fastapi-psql-orm) :

# Build for production
$ docker build -t your-app .

# Deploy with Docker Compose
$ docker-compose up -d

Bonnes pratiques

1. Choisir les modèles judicieusement

  • Commencez par les modèles plus simples pour apprendre
  • Utilisez les modèles avec base de données pour les applications pilotées par les données
  • Utilisez les modèles Docker pour les déploiements en production

2. Gestion de l'environnement

  • Utilisez toujours des fichiers .env pour la configuration
  • Ne committez jamais de données sensibles dans le contrôle de version
  • Utilisez des environnements différents pour développement / production

3. Stratégie de personnalisation

  • Ajoutez de nouvelles routes avec fastkit addroute
  • Modifiez le code existant pour l'adapter à votre logique métier
  • Gardez la structure du projet organisée

4. Tests

  • Exécutez les tests régulièrement pendant le développement
  • Ajoutez des tests pour les nouvelles fonctionnalités que vous implémentez
  • Utilisez la structure de tests fournie comme guide

Dépannage

Problèmes de connexion à la base de données (modèles PostgreSQL)

Si vous n'arrivez pas à vous connecter à PostgreSQL :

  1. Vérifiez que Docker tourne :
$ docker ps
  1. Vérifiez le conteneur PostgreSQL :
$ docker-compose logs postgres
  1. Vérifiez les variables d'environnement :
DATABASE_URL=postgresql://user:password@localhost:5432/dbname

Échecs de build Docker

Si le build Docker échoue :

  1. Vérifiez la syntaxe du Dockerfile
  2. Vérifiez que tous les fichiers sont présents
  3. Vérifiez que le démon Docker tourne

Dépendances manquantes

Si vous obtenez des erreurs d'import :

  1. Activez l'environnement virtuel :

    $ source .venv/bin/activate
    

  2. Installez les dépendances :

    $ pip install -r requirements.txt
    

Étapes suivantes

Maintenant que vous comprenez les modèles :

  1. Votre premier projet : construire une application complète
  2. Ajouter des routes : étendre votre projet basé sur un modèle
  3. Référence CLI : maîtriser toutes les commandes disponibles

Astuces sur les modèles

  • Les modèles sont d'excellents points de départ, pas des solutions finales
  • Personnalisez les modèles pour qu'ils correspondent à vos besoins spécifiques
  • Étudiez le code des modèles pour apprendre les bonnes pratiques de FastAPI
  • Utilisez le contrôle de version pour suivre vos personnalisations