Une API RESTful professionnelle construite avec Flask et MongoDB Atlas, avec import de données CSV depuis Kaggle.
- API REST complète : CRUD complet avec pagination et recherche
- Architecture modulaire : Code organisé en modules réutilisables
- Import CSV : Script d'importation de données depuis Kaggle
- Validation robuste : Validation des données et gestion d'erreurs
- Logging avancé : Système de logs complet
- Configuration flexible : Support des environnements dev/prod
- CORS activé : Prêt pour les applications frontend
- Python 3.8+
- MongoDB Atlas (compte gratuit)
- Compte Kaggle (pour les données de test)
git clone flask_api
cd flask_apipython -m venv venv
source venv/bin/activate # Linux/Mac
# ou
venv\Scripts\activate # Windowspip install -r requirements.txt- Aller sur MongoDB Atlas
- Créer un cluster gratuit (Shared - M0)
- Créer une base de données (ex:
mydatabase) - Créer une collection (ex:
items) - Créer un utilisateur avec mot de passe
- Récupérer l'URI de connexion
cp .env.example .envÉditer le fichier .env avec vos informations :
MONGO_URI=mongodb+srv://username:password@cluster0.xxxxx.mongodb.net/
DATABASE_NAME=mydatabase
COLLECTION_NAME=items
FLASK_ENV=development
SECRET_KEY=your-secret-key-herepython app.pyL'API sera disponible sur http://localhost:5000
# Télécharger un dataset depuis Kaggle
# Exemple : https://www.kaggle.com/datasets/...
# Importer le fichier CSV
python scripts/import_data.py votre_fichier.csv
# Avec options avancées
python scripts/import_data.py votre_fichier.csv --drop-existing --batch-size 500| Méthode | Endpoint | Description |
|---|---|---|
GET |
/ |
Page d'accueil avec documentation |
GET |
/api/v1/items |
Récupérer tous les items (avec pagination) |
GET |
/api/v1/items?search=query |
Rechercher des items |
GET |
/api/v1/items/<id> |
Récupérer un item par ID |
POST |
/api/v1/items |
Créer un nouvel item |
PUT |
/api/v1/items/<id> |
Mettre à jour un item |
DELETE |
/api/v1/items/<id> |
Supprimer un item |
POST |
/api/v1/items/bulk |
Créer plusieurs items |
GET |
/api/v1/health |
Vérification de santé |
curl "http://localhost:5000/api/v1/items?page=1&per_page=10"curl "http://localhost:5000/api/v1/items?search=python&page=1&per_page=5"curl -X POST "http://localhost:5000/api/v1/items" \
-H "Content-Type: application/json" \
-d '{"name": "Nouvel Item", "description": "Description de l\"item"}'curl -X PUT "http://localhost:5000/api/v1/items/60f7b3b3b3b3b3b3b3b3b3b3" \
-H "Content-Type: application/json" \
-d '{"name": "Item Modifié", "description": "Nouvelle description"}'flask_api/
├── app.py # Application Flask principale
├── config.py # Configuration centralisée
├── models/
│ └── item.py # Modèle Item avec logique métier
├── routes/
│ └── items.py # Routes API pour les items
├── utils/
│ ├── database.py # Gestionnaire de base de données
│ └── validators.py # Validateurs de données
├── scripts/
│ └── import_data.py # Script d'importation CSV
├── requirements.txt # Dépendances Python
├── .env.example # Exemple de variables d'environnement
└── README.md # Documentation
Tous les endpoints de liste supportent la pagination :
GET /api/v1/items?page=2&per_page=20
Recherche textuelle dans les champs name et description :
GET /api/v1/items?search=python
- Validation automatique des ObjectId MongoDB
- Nettoyage des données d'entrée
- Gestion des erreurs avec messages explicites
- Logs structurés avec niveaux (DEBUG, INFO, ERROR)
- Logs sauvegardés dans des fichiers
- Tracking des erreurs et performances
# Installer les dépendances de test
pip install pytest pytest-flask pytest-cov
# Lancer les tests
pytest
# Avec couverture de code
pytest --cov=.# Installer Gunicorn
pip install gunicorn
# Lancer en production
gunicorn -w 4 -b 0.0.0.0:5000 app:appFLASK_ENV=production
FLASK_CONFIG=production
SECRET_KEY=your-very-secure-secret-key- Validation stricte des données d'entrée
- Gestion sécurisée des variables d'environnement
- Protection contre les injections NoSQL
- CORS configuré pour les domaines autorisés
- Fork le projet
- Créer une branche feature (
git checkout -b feature/amazing-feature) - Commit les changements (
git commit -m 'Add amazing feature') - Push vers la branche (
git push origin feature/amazing-feature) - Ouvrir une Pull Request
Ce projet est sous licence MIT. Voir le fichier LICENSE pour plus de détails.
Pour toute question ou problème :
- Vérifier la documentation
- Consulter les logs
- Ouvrir une issue sur GitHub
- Authentification JWT
- Rate limiting
- Cache Redis
- Tests automatisés
- Documentation Swagger/OpenAPI
- Monitoring avec Prometheus
- Container Docker