Une implémentation backend FastAPI complète pour un Service de Réseau Social Simple (SNS) qui permet aux utilisateurs de créer, récupérer, mettre à jour et supprimer des publications ; d'ajouter des commentaires ; et d'aimer/ne plus aimer les publications.
- Framework : FastAPI avec Python 3.12+
- Base de données : SQLite (
sns_api.db) - Documentation API : Swagger UI + spécification OpenAPI 3.1
- CORS : Activé pour les requêtes cross-origin
- Validation des données : Modèles Pydantic avec validation complète
python/
├── main.py # Point d'entrée de l'application FastAPI
├── models.py # Modèles de données et schémas Pydantic
├── database.py # Opérations de base de données SQLite
├── openapi.yaml # Spécification OpenAPI 3.0.1
├── sns_api.db # Fichier de base de données SQLite (créé automatiquement)
├── README.md # Cette documentation
└── .venv/ # Environnement virtuel (créé pendant la configuration)
Référez-vous au document README pour la préparation.
D'abord, définissez la variable d'environnement $REPOSITORY_ROOT.
# bash/zsh
REPOSITORY_ROOT=$(git rev-parse --show-toplevel)# PowerShell
$REPOSITORY_ROOT = git rev-parse --show-toplevelEnsuite, naviguez vers le répertoire python et créez un environnement virtuel :
cd $REPOSITORY_ROOT/complete/pythonCréer un environnement virtuel
# Utilisation d'uv (recommandé)
uv venv .venv# Utilisation de Python standard (alternative)
python -m venv .venv# Sur Linux/macOS
source .venv/bin/activate# Sur Windows Command Prompt
.venv\Scripts\activate# Utilisation d'uv (recommandé)
uv pip install fastapi uvicorn python-multipart pyyaml# Utilisation de pip (alternative)
pip install fastapi uvicorn python-multipart pyyamlCopiez la spécification OpenAPI depuis le répertoire parent.
# Sur Linux/macOS
cp ../openapi.yaml .# Sur Windows Command Prompt
xcopy ..\openapi.yaml .Démarrer le serveur de développement
uvicorn main:app --host 0.0.0.0 --port 8000 --reloadL'application sera disponible à :
- URL de Base API :
http://localhost:8000/api/ - Swagger UI :
http://localhost:8000/docs - Spécification OpenAPI :
http://localhost:8000/openapi.json
L'application utilise SQLite avec les tables suivantes :
id(TEXT, PRIMARY KEY) - UUIDusername(TEXT, NOT NULL) - Nom d'utilisateur de l'auteurcontent(TEXT, NOT NULL) - Contenu de la publicationcreated_at(TEXT, NOT NULL) - Horodatage ISOupdated_at(TEXT, NOT NULL) - Horodatage ISO
id(TEXT, PRIMARY KEY) - UUIDpost_id(TEXT, NOT NULL) - Clé étrangère vers postsusername(TEXT, NOT NULL) - Nom d'utilisateur de l'auteurcontent(TEXT, NOT NULL) - Contenu du commentairecreated_at(TEXT, NOT NULL) - Horodatage ISOupdated_at(TEXT, NOT NULL) - Horodatage ISO
post_id(TEXT, NOT NULL) - Clé étrangère vers postsusername(TEXT, NOT NULL) - Utilisateur qui a aiméliked_at(TEXT, NOT NULL) - Horodatage ISO- Clé primaire :
(post_id, username)
GET /api/posts- Lister toutes les publicationsPOST /api/posts- Créer une nouvelle publicationGET /api/posts/{postId}- Obtenir une publication spécifiquePATCH /api/posts/{postId}- Mettre à jour une publicationDELETE /api/posts/{postId}- Supprimer une publication
GET /api/posts/{postId}/comments- Lister les commentaires d'une publicationPOST /api/posts/{postId}/comments- Créer un commentaireGET /api/posts/{postId}/comments/{commentId}- Obtenir un commentaire spécifiquePATCH /api/posts/{postId}/comments/{commentId}- Mettre à jour un commentaireDELETE /api/posts/{postId}/comments/{commentId}- Supprimer un commentaire
POST /api/posts/{postId}/likes- Aimer une publicationDELETE /api/posts/{postId}/likes?username={username}- Ne plus aimer une publication
curl -X POST "http://localhost:8000/api/posts" \
-H "Content-Type: application/json" \
-d '{"username": "john_doe", "content": "Bonjour le monde ! Ceci est ma première publication."}'curl -X GET "http://localhost:8000/api/posts"curl -X POST "http://localhost:8000/api/posts/{POST_ID}/comments" \
-H "Content-Type: application/json" \
-d '{"username": "jane_smith", "content": "Super publication !"}'curl -X POST "http://localhost:8000/api/posts/{POST_ID}/likes" \
-H "Content-Type: application/json" \
-d '{"username": "alice_johnson"}'- Naviguez vers
http://localhost:8000/docs - Explorez et testez tous les points de terminaison API de manière interactive
- Consultez les schémas et exemples de requête/réponse
NewPostRequest:{username: str, content: str}UpdatePostRequest:{username: str, content: str}NewCommentRequest:{username: str, content: str}UpdateCommentRequest:{username: str, content: str}LikeRequest:{username: str}
Post: Objet publication complet avec métadonnées et compteursComment: Objet commentaire complet avec métadonnéesLikeResponse: Confirmation de like avec horodatage
L'application utilise des paramètres par défaut mais peut être personnalisée :
- Base de données : Fichier SQLite
sns_api.db(créé automatiquement) - Hôte :
0.0.0.0(toutes les interfaces) - Port :
8000 - CORS : Activé pour toutes les origines
Pour un déploiement en production, considérez :
- Base de données : Passer à PostgreSQL ou MySQL
- Variables d'environnement : Utiliser pour la configuration sensible
- Sécurité : Ajouter l'authentification et l'autorisation
- CORS : Restreindre à des domaines spécifiques
- Journalisation : Implémenter la journalisation structurée
- Surveillance : Ajouter des vérifications de santé et des métriques
main.py: Configuration de l'application FastAPI, middleware et définitions de routesmodels.py: Modèles Pydantic pour la validation et sérialisation des donnéesdatabase.py: Opérations SQLite, gestion des connexions et fonctions CRUD
Le projet suit :
- Les directives de style Python PEP 8
- Les meilleures pratiques FastAPI
- Les modèles de programmation fonctionnelle
- Les annotations de type partout
- La gestion complète des erreurs
- Définir les modèles Pydantic dans
models.py - Ajouter les opérations de base de données dans
database.py - Créer les points de terminaison API dans
main.py - Mettre à jour la spécification OpenAPI si nécessaire
- Port déjà utilisé : Changer le port avec
--port 8001 - Problèmes d'environnement virtuel : Recréer avec
rm -rf .venv && uv venv .venv - Base de données verrouillée : Arrêter toutes les instances en cours d'exécution de l'application
- Erreurs d'importation : S'assurer que l'environnement virtuel est activé
Exécuter avec journalisation supplémentaire :
uvicorn main:app --host 0.0.0.0 --port 8000 --reload --log-level debugAvertissement: Ce document a été localisé par GitHub Copilot. Par conséquent, il peut contenir des erreurs. Si vous trouvez une traduction inappropriée ou erronée, veuillez créer un issue.