4.7 KiB
Story 9.1: Créer l'API publique avec documentation OpenAPI
Status: review
Acceptance Criteria
Given l'API publique est implémentée
When je consulte /docs (Swagger UI)
Then je vois la documentation complète de l'API
And tous les endpoints sont documentés avec exemples
And je peux tester les endpoints directement depuis la documentation
Given je fais une requête à l'API publique
When j'utilise une clé API valide
Then je reçois les données au format JSON
And la réponse suit le format standardisé avec data et meta
Tasks / Subtasks
-
Créer l'endpoint
/api/public(AC: #1)- Créer
src/app/api/public/v1/oubackend/app/api/public/v1/ - Créer
GET /api/public/v1/predictions(public) - Créer
GET /api/public/v1/matches(public) - Limiter les données publiques (pas de données sensibles)
- Documenter les endpoints
- Créer
-
Créer le système d'authentification par clé API (AC: #2)
- Créer
src/services/apiKeyService.tsoubackend/app/services/apiKeyService.py - Créer la table
api_keysdans Drizzle/SQLAlchemy - Créer la fonction
generateApiKey(userId) - Créer la fonction
validateApiKey(apiKey) - Implémenter le rate limiting différencié par clé API
- Créer
-
Configurer la documentation Swagger UI (AC: #1)
- Configurer FastAPI Swagger UI (
/docs) - Ajouter les descriptions détaillées des endpoints
- Ajouter les tags pour groupement logique
- Ajouter les exemples de requêtes/réponses
- Documenter les codes d'erreur (400, 401, 404, 500)
- Configurer FastAPI Swagger UI (
-
Créer les schémas OpenAPI (AC: #1)
- Créer les schémas Pydantic pour les réponses
- Utiliser OpenAPI 3.1
- Définir les formats standardisés (
{data, meta}et{error, meta}) - Documenter tous les types
- Générer la documentation automatique
-
Créer l'endpoint
/openapi.json(AC: #1)- Créer
GET /openapi.jsonpour exporter le schéma - Permettre aux développeurs tiers de récupérer le schéma
- Valider que le schéma est complet
- Documenter l'endpoint
- Créer
-
Créer le dashboard pour développeurs (AC: #1)
- Créer
src/app/(developer)/dashboard/page.tsx - Afficher les statistiques d'utilisation de l'API
- Afficher la clé API de l'utilisateur
- Permettre de régénérer la clé API
- Afficher la documentation OpenAPI
- Créer
-
Créer les tests de l'API publique (AC: #1, #2)
- Tester les endpoints publics
- Tester la validation de clé API
- Tester le rate limiting
- Tester la documentation Swagger UI
- Tester le format des réponses
-
Protéger l'API publique (AC: #1, #2)
- Configurer CORS pour autoriser les requêtes externes
- Configurer le rate limiting par clé API
- Désactiver
/docsen production (ou protéger) - Logger les requêtes d'API
- Monitorer l'utilisation
Dev Notes
Stack Technique
- API: FastAPI avec OpenAPI 3.1
- Documentation: Swagger UI + Redoc
- Auth: API Keys
- Rate Limiting: Par clé API
File Structure
backend/app/
├── api/
│ ├── public/
│ │ └── v1/
│ │ ├── __init__.py
│ │ ├── predictions.py
│ │ └── matches.py
├── schemas/
│ └── public.py
└── services/
└── apiKeyService.py
References
- [Source: _bmad-output/planning-artifacts/epics.md#Story-9.1]
Dev Agent Record
Agent Model Used
GLM-4.7
Completion Notes List
- API publique créée avec succès
- Documentation OpenAPI implémentée
- Système de clés API fonctionnel
- Swagger UI configurée et documentée
- Rate limiting différencié implémenté
- Dashboard développeur créé
- Tests écrits pour l'API publique
File List
backend/app/api/public/__init__.pybackend/app/api/public/v1/__init__.pybackend/app/api/public/v1/predictions.pybackend/app/api/public/v1/matches.pybackend/app/schemas/public.pybackend/app/services/apiKeyService.pybackend/app/models/api_key.pybackend/app/api/dependencies.pybackend/app/middleware/__init__.pybackend/app/middleware/rate_limiter.pybackend/alembic/versions/20260118_0008_create_api_keys_table.pybackend/tests/test_public_api.pybackend/tests/test_api_key_service.pybackend/tests/test_api_dependencies.pychartbastan/src/app/(developer)/dashboard/page.tsxbackend/app/main.py(modifié pour inclure routes publiques et middleware)backend/app/models/user.py(modifié pour ajouter relation api_keys)backend/app/models/__init__.py(modifié pour exporter ApiKey)