Maison  >  Article  >  développement back-end  >  Partie Création d'une API Todo avec FastAPI : guide étape par étape

Partie Création d'une API Todo avec FastAPI : guide étape par étape

王林
王林original
2024-08-28 18:32:24296parcourir

Part Building a Todo API with FastAPI: Step-by-Step Guide

Créer une API Todo avec FastAPI : guide étape par étape

Le code peut être trouvé ici : GitHub - jamesbmour/blog_tutorials :

I.Introduction

Dans l'article précédent, nous avons présenté FastAPI et mis en place une structure de base du projet. Maintenant, nous allons aller plus loin en créant une API Todo fonctionnelle. À la fin de ce didacticiel, vous disposerez d'un backend fonctionnel capable de créer, lire, mettre à jour et supprimer des éléments de tâche.

Ce que nous couvrirons :

  • Conception du modèle de données Todo
  • Mise en œuvre des opérations CRUD
  • Création de points de terminaison d'API
  • Ajout de la validation des entrées et de la gestion des erreurs
  • Test de l'API
  • Refactorisation et organisation du code

II. Conception du modèle de données Todo

Pour gérer les tâches, nous devons définir un modèle de données représentant une tâche à effectuer. FastAPI utilise des modèles Pydantic pour valider et analyser les données, nous allons donc en tirer parti ici.

A. Définir le schéma Todo

Nous allons créer deux modèles en utilisant Pydantic :

  • TodoCreate : Pour les données de saisie lors de la création ou de la mise à jour d'une tâche.
  • Todo : pour l'élément de tâche complet, y compris des champs comme id et create_at.
from pydantic import BaseModel
from typing import Optional
from datetime import datetime

class TodoCreate(BaseModel):
    title: str
    description: Optional[str] = None
    completed: bool = False

class Todo(BaseModel):
    id: str
    title: str
    description: Optional[str] = None
    completed: bool
    created_at: datetime

B. Expliquer les champs

  • id : Identifiant unique pour chaque tâche.
  • titre : Contenu principal de la todo.
  • description : Détails supplémentaires (facultatif).
  • terminé : Statut booléen de la tâche (qu'elle soit terminée ou non).
  • created_at : Horodatage indiquant quand la tâche a été créée.

III. Création d'opérations CRUD pour Todos

CRUD signifie Créer, Lire, Mettre à jour et Supprimer, les quatre opérations de base pour la gestion des données. Nous allons implémenter ces opérations à l’aide d’une base de données en mémoire (une simple liste) pour ce tutoriel.

A. Configuration d'une base de données en mémoire

Nous utiliserons une liste pour stocker nos tâches. Pour plus de simplicité, nous ajouterons également quelques exemples de tâches.

from uuid import uuid4
from datetime import datetime

todos = [
    {
        "id": str(uuid4()),
        "title": "Learn FastAPI",
        "description": "Go through the official FastAPI documentation and tutorials.",
        "completed": False,
        "created_at": datetime.now(),
    },
    {
        "id": str(uuid4()),
        "title": "Build a Todo API",
        "description": "Create a REST API for managing todo items using FastAPI.",
        "completed": False,
        "created_at": datetime.now(),
    },
    {
        "id": str(uuid4()),
        "title": "Write blog post",
        "description": "Draft a blog post about creating a Todo API with FastAPI.",
        "completed": False,
        "created_at": datetime.now(),
    },
]

B. Implémentation de fonctions d'assistance

Nous allons implémenter une fonction d'assistance simple pour trouver une tâche par son identifiant.

def get_todo_by_id(todo_id: str):
    for todo in todos:
        if todo["id"] == todo_id:
            return todo
    return None

IV. Implémentation des points de terminaison de l'API

A. Créer une nouvelle tâche

Le point de terminaison POST permet aux utilisateurs de créer un nouvel élément de tâche.

@app.post("/todos/", response_model=Todo)
def create_todo(todo: TodoCreate):
    new_todo = Todo(
        id=str(uuid4()),
        title=todo.title,
        description=todo.description,
        completed=todo.completed,
        created_at=datetime.now()
    )
    todos.append(new_todo.dict())
    return new_todo

B. Récupérer toutes les tâches

Le point de terminaison GET récupère toutes les tâches de notre base de données en mémoire.

@app.get("/todos/", response_model=List[Todo])
def get_all_todos():
    return todos

C. Récupération d'une seule tâche

Le point de terminaison GET permet de récupérer une seule tâche par son identifiant.

@app.get("/todos/{todo_id}", response_model=Todo)
def get_todo(todo_id: str):
    todo = get_todo_by_id(todo_id)
    if not todo:
        raise HTTPException(status_code=404, detail="Todo not found")
    return todo

D. Mettre à jour une tâche

Le point de terminaison PUT permet aux utilisateurs de mettre à jour une tâche existante.

@app.put("/todos/{todo_id}", response_model=Todo)
def update_todo(todo_id: str, todo_data: TodoCreate):
    todo = get_todo_by_id(todo_id)
    if not todo:
        raise HTTPException(status_code=404, detail="Todo not found")
    todo["title"] = todo_data.title
    todo["description"] = todo_data.description
    todo["completed"] = todo_data.completed
    return Todo(**todo)

E. Supprimer une tâche

Le point de terminaison DELETE permet aux utilisateurs de supprimer une tâche par son identifiant.

@app.delete("/todos/{todo_id}")
def delete_todo(todo_id: str):
    todo = get_todo_by_id(todo_id)
    if not todo:
        raise HTTPException(status_code=404, detail="Todo not found")
    todos.remove(todo)
    return {"detail": "Todo deleted successfully"}

V. Ajout de la validation des entrées et de la gestion des erreurs

A. Validation des entrées avec Pydantic

FastAPI valide automatiquement les données d'entrée par rapport aux modèles Pydantic que nous avons définis. Cela garantit que les données répondent à notre schéma attendu avant d'être traitées.

B. Gestion personnalisée des erreurs

Nous pouvons personnaliser les réponses aux erreurs en ajoutant un gestionnaire d'exceptions.

@app.exception_handler(HTTPException)
def http_exception_handler(request, exc: HTTPException):
    return JSONResponse(
        status_code=exc.status_code,
        content={"detail": exc.detail},
    )

VI. Tester l'API

FastAPI est livré avec une documentation interactive de l'interface utilisateur Swagger, ce qui facilite le test des points de terminaison de votre API. Exécutez simplement l'application et accédez à /docs dans votre navigateur.

Exemple de test

  • Créer une tâche : testez le point de terminaison POST en créant une nouvelle tâche.
  • Récupérer les tâches : utilisez les points de terminaison GET pour récupérer toutes les tâches ou une tâche spécifique par identifiant.
  • Mettre à jour et supprimer : testez les points de terminaison PUT et DELETE pour mettre à jour ou supprimer une tâche.

VII. Refactorisation et organisation du code

À mesure que l’application se développe, il est essentiel de garder le code organisé. Voici quelques conseils :

A. Déplacement de modèles vers un fichier distinct

Vous pouvez déplacer vos modèles Pydantic vers un fichier models.py pour garder votre fichier d'application principal propre.

B. Création d'un routeur pour les points de terminaison Todo

Envisagez de créer un routeur distinct pour les points de terminaison liés aux tâches, en particulier à mesure que votre API se développe.

VIII. Prochaines étapes

Dans le prochain post, nous intégrerons une vraie base de données (comme SQLite ou PostgreSQL) dans notre application FastAPI. Nous examinerons également l’authentification des utilisateurs et des fonctionnalités plus avancées.

Améliorations suggérées :

  • Ajoutez un filtrage et une pagination aux points de terminaison GET.
  • Mettez en œuvre l'authentification des utilisateurs pour gérer les tâches personnelles.

IX. Conclusion

Dans ce tutoriel, nous avons construit une API Todo simple à l'aide de FastAPI. Nous avons commencé par concevoir un modèle de données, implémenté des opérations CRUD et créé des points de terminaison pour gérer les tâches. Nous avons également abordé la validation des entrées, la gestion des erreurs et les tests. Avec cette base, vous pouvez étendre davantage l'API ou l'intégrer à une interface pour créer une application à part entière.

Si vous souhaitez soutenir mon écriture ou m'acheter une bière :
https://buymeacoffee.com/bmours

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn