Maison > Article > développement back-end > Partie Création d'une API Todo avec FastAPI : guide étape par étape
Le code peut être trouvé ici : GitHub - jamesbmour/blog_tutorials :
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.
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.
Nous allons créer deux modèles en utilisant Pydantic :
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
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.
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(), }, ]
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
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
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
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
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)
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"}
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.
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}, )
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.
À mesure que l’application se développe, il est essentiel de garder le code organisé. Voici quelques conseils :
Vous pouvez déplacer vos modèles Pydantic vers un fichier models.py pour garder votre fichier d'application principal propre.
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.
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.
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!