API Doc Generator
Workflow
Étape 1 — Détection du contexte
Identifie avant tout :
- Framework : Express/NestJS, FastAPI, Django REST, Laravel, ASP.NET Core, Spring Boot, etc.
- Type d'API : REST, GraphQL, gRPC, WebSocket
- Auth : Bearer JWT, API Key, OAuth2, Basic, aucune
- Format cible : OpenAPI 3.1 YAML, Markdown, Postman Collection v2.1
Si aucun format cible n'est précisé, utilise OpenAPI 3.1 YAML pour une API REST, Markdown structuré sinon.
Étape 2 — Extraction des endpoints
Pour chaque endpoint, collecte :
| Champ |
Contenu attendu |
| Méthode + URL |
POST /api/v1/payments |
| Description |
Action métier claire, pas le nom de la fonction |
| Path params |
{id} → type, exemple, contraintes |
| Query params |
nom, type, requis/optionnel, valeur par défaut |
| Request body |
schéma JSON avec types, requis, exemples |
| Headers requis |
Authorization, Content-Type, custom headers |
| Réponses |
200/201/204 succès + 400/401/403/404/422/500 erreurs |
| Auth |
scope/rôle requis si applicable |
Étape 3 — Format de sortie
OpenAPI 3.1 YAML (format recommandé)
openapi: 3.1.0
info:
title: Payments API
version: 1.0.0
paths:
/api/v1/payments:
post:
summary: Créer un paiement
tags: [Payments]
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
required: [amount, currency, recipient_id]
properties:
amount:
type: integer
description: Montant en centimes
example: 5000
currency:
type: string
enum: [TND, EUR, USD]
example: TND
recipient_id:
type: string
format: uuid
responses:
"201":
description: Paiement créé
content:
application/json:
example:
id: "pay_abc123"
status: "pending"
"422":
description: Validation échouée
content:
application/json:
example:
error: "amount must be positive"
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
Markdown structuré (si OpenAPI non requis)
## POST /api/v1/payments
Crée un nouveau paiement.
**Auth** : Bearer JWT requis (`role: operator`)
**Body** (application/json) :
| Champ | Type | Requis | Description |
|---|---|---|---|
| amount | integer | oui | Montant en centimes |
| currency | string | oui | `TND`, `EUR`, `USD` |
| recipient_id | uuid | oui | ID du destinataire |
**Réponses** :
- `201` — Paiement créé : `{ "id": "pay_abc123", "status": "pending" }`
- `401` — Token manquant ou expiré
- `422` — Champ invalide : `{ "error": "amount must be positive" }`
Étape 4 — Exemples cURL copiables
Génère un cURL par endpoint avec variables d'environnement :
# Créer un paiement
curl -X POST "https://api.example.com/api/v1/payments" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"amount": 5000,
"currency": "TND",
"recipient_id": "550e8400-e29b-41d4-a716-446655440000"
}'
Étape 5 — Table de synthèse
Produit toujours une table des routes en introduction :
| Méthode |
Endpoint |
Auth |
Description |
| GET |
/api/v1/payments |
JWT |
Lister les paiements |
| POST |
/api/v1/payments |
JWT |
Créer un paiement |
| GET |
/api/v1/payments/{id} |
JWT |
Détail d'un paiement |
| DELETE |
/api/v1/payments/{id} |
JWT + admin |
Annuler un paiement |
Critères de décision — format
| Situation |
Format recommandé |
| API publique / SDK tiers |
OpenAPI 3.1 YAML + Swagger UI |
| Documentation interne équipe |
Markdown structuré |
| Tests manuels / QA |
Postman Collection v2.1 |
| API GraphQL |
SDL + descriptions de champs |
| Micro-service interne |
OpenAPI minimal (pas de UI) |
Pièges et anti-patterns
- Ne pas documenter les erreurs : documenter uniquement le 200 est insuffisant. Inclus systématiquement 401, 403, 422, 500.
- Exemples irréalistes : évite
"string", 0, "id". Utilise des exemples métier ("pay_abc123", 5000, "TND").
- Oublier la pagination : si un endpoint retourne une liste, documente
page, limit, total dans la réponse.
- Nommer les paramètres ambigus :
id seul est flou ; préfère payment_id, user_id.
- Mélanger versions : OpenAPI 2.0 (Swagger) ≠ OpenAPI 3.0 ≠ 3.1. Reste cohérent dans tout le fichier.
- Omettre les Content-Type : toujours préciser
application/json ou multipart/form-data explicitement.
- Description = nom de la fonction :
createPayment() n'est pas une description ; écris l'action métier.
Bonnes pratiques 2026
- Utilise OpenAPI 3.1 (aligné JSON Schema 2020-12) plutôt que 3.0.
- Ajoute
x-stability: stable | beta | deprecated sur chaque path pour signaler le niveau de maturité.
- Génère des exemples nommés (
examples:) plutôt que example: quand plusieurs cas existent (succès, erreur partielle, edge case).
- Documente le rate limiting si présent : header
X-RateLimit-Limit, X-RateLimit-Remaining.
- Si code incomplet : documente ce qui est visible, marque les trous avec
# TODO: à compléter dans le YAML.
- Pour GraphQL : documente chaque Query/Mutation avec les arguments, types retournés et directives (
@auth, @deprecated).
Communication Rules — MANDATORY
- Ultra-concise. No filler, no preamble, no pleasantries.
- Never say "happy to help", "sure!", "great question", "let me", or similar.
- Tool first, talk second. Act before explaining.
- Result first. Lead with outcome, not process.
- Stop when done. No summary, no recap, no trailing commentary.
- No politeness wrappers. Direct and blunt.
- Minimum words. If one word works, do not use ten.
- No unsolicited explanations.
- No emoji unless asked.
1---2name: dev-api-doc-generator3description: Génère une documentation d'API claire et structurée à partir de code, routes ou descriptions. À utiliser quand l'utilisateur veut documenter une API REST, GraphQL ou des endpoints. Se déclenche aussi avec "documente mon API", "swagger", "endpoint documentation", "API docs", ou quand l'utilisateur montre des routes/controllers. Also triggers on "document my API", "generate API docs", "OpenAPI documentation".4---56# API Doc Generator78## Workflow910### Étape 1 — Détection du contexte1112Identifie avant tout :13- **Framework** : Express/NestJS, FastAPI, Django REST, Laravel, ASP.NET Core, Spring Boot, etc.14- **Type d'API** : REST, GraphQL, gRPC, WebSocket15- **Auth** : Bearer JWT, API Key, OAuth2, Basic, aucune16- **Format cible** : OpenAPI 3.1 YAML, Markdown, Postman Collection v2.11718Si aucun format cible n'est précisé, utilise **OpenAPI 3.1 YAML** pour une API REST, **Markdown structuré** sinon.1920---2122### Étape 2 — Extraction des endpoints2324Pour chaque endpoint, collecte :2526| Champ | Contenu attendu |27|---|---|28| Méthode + URL | `POST /api/v1/payments` |29| Description | Action métier claire, pas le nom de la fonction |30| Path params | `{id}` → type, exemple, contraintes |31| Query params | nom, type, requis/optionnel, valeur par défaut |32| Request body | schéma JSON avec types, requis, exemples |33| Headers requis | `Authorization`, `Content-Type`, custom headers |34| Réponses | 200/201/204 succès + 400/401/403/404/422/500 erreurs |35| Auth | scope/rôle requis si applicable |3637---3839### Étape 3 — Format de sortie4041#### OpenAPI 3.1 YAML (format recommandé)4243```yaml44openapi: 3.1.045info:46 title: Payments API47 version: 1.0.048paths:49 /api/v1/payments:50 post:51 summary: Créer un paiement52 tags: [Payments]53 security:54 - bearerAuth: []55 requestBody:56 required: true57 content:58 application/json:59 schema:60 type: object61 required: [amount, currency, recipient_id]62 properties:63 amount:64 type: integer65 description: Montant en centimes66 example: 500067 currency:68 type: string69 enum: [TND, EUR, USD]70 example: TND71 recipient_id:72 type: string73 format: uuid74 responses:75 "201":76 description: Paiement créé77 content:78 application/json:79 example:80 id: "pay_abc123"81 status: "pending"82 "422":83 description: Validation échouée84 content:85 application/json:86 example:87 error: "amount must be positive"88components:89 securitySchemes:90 bearerAuth:91 type: http92 scheme: bearer93 bearerFormat: JWT94```9596#### Markdown structuré (si OpenAPI non requis)9798```markdown99## POST /api/v1/payments100101Crée un nouveau paiement.102103**Auth** : Bearer JWT requis (`role: operator`)104105**Body** (application/json) :106| Champ | Type | Requis | Description |107|---|---|---|---|108| amount | integer | oui | Montant en centimes |109| currency | string | oui | `TND`, `EUR`, `USD` |110| recipient_id | uuid | oui | ID du destinataire |111112**Réponses** :113- `201` — Paiement créé : `{ "id": "pay_abc123", "status": "pending" }`114- `401` — Token manquant ou expiré115- `422` — Champ invalide : `{ "error": "amount must be positive" }`116```117118---119120### Étape 4 — Exemples cURL copiables121122Génère un cURL par endpoint avec variables d'environnement :123124```bash125# Créer un paiement126curl -X POST "https://api.example.com/api/v1/payments" \127 -H "Authorization: Bearer $TOKEN" \128 -H "Content-Type: application/json" \129 -d '{130 "amount": 5000,131 "currency": "TND",132 "recipient_id": "550e8400-e29b-41d4-a716-446655440000"133 }'134```135136---137138### Étape 5 — Table de synthèse139140Produit toujours une table des routes en introduction :141142| Méthode | Endpoint | Auth | Description |143|---|---|---|---|144| GET | `/api/v1/payments` | JWT | Lister les paiements |145| POST | `/api/v1/payments` | JWT | Créer un paiement |146| GET | `/api/v1/payments/{id}` | JWT | Détail d'un paiement |147| DELETE | `/api/v1/payments/{id}` | JWT + admin | Annuler un paiement |148149---150151## Critères de décision — format152153| Situation | Format recommandé |154|---|---|155| API publique / SDK tiers | OpenAPI 3.1 YAML + Swagger UI |156| Documentation interne équipe | Markdown structuré |157| Tests manuels / QA | Postman Collection v2.1 |158| API GraphQL | SDL + descriptions de champs |159| Micro-service interne | OpenAPI minimal (pas de UI) |160161---162163## Pièges et anti-patterns164165- **Ne pas documenter les erreurs** : documenter uniquement le 200 est insuffisant. Inclus systématiquement 401, 403, 422, 500.166- **Exemples irréalistes** : évite `"string"`, `0`, `"id"`. Utilise des exemples métier (`"pay_abc123"`, `5000`, `"TND"`).167- **Oublier la pagination** : si un endpoint retourne une liste, documente `page`, `limit`, `total` dans la réponse.168- **Nommer les paramètres ambigus** : `id` seul est flou ; préfère `payment_id`, `user_id`.169- **Mélanger versions** : OpenAPI 2.0 (Swagger) ≠ OpenAPI 3.0 ≠ 3.1. Reste cohérent dans tout le fichier.170- **Omettre les Content-Type** : toujours préciser `application/json` ou `multipart/form-data` explicitement.171- **Description = nom de la fonction** : `createPayment()` n'est pas une description ; écris l'action métier.172173---174175## Bonnes pratiques 2026176177- Utilise **OpenAPI 3.1** (aligné JSON Schema 2020-12) plutôt que 3.0.178- Ajoute `x-stability: stable | beta | deprecated` sur chaque path pour signaler le niveau de maturité.179- Génère des **exemples nommés** (`examples:`) plutôt que `example:` quand plusieurs cas existent (succès, erreur partielle, edge case).180- Documente le **rate limiting** si présent : header `X-RateLimit-Limit`, `X-RateLimit-Remaining`.181- Si code incomplet : documente ce qui est visible, marque les trous avec `# TODO: à compléter` dans le YAML.182- Pour GraphQL : documente chaque Query/Mutation avec les arguments, types retournés et directives (`@auth`, `@deprecated`).183184185## Communication Rules — MANDATORY186187- Ultra-concise. No filler, no preamble, no pleasantries.188- Never say "happy to help", "sure!", "great question", "let me", or similar.189- Tool first, talk second. Act before explaining.190- Result first. Lead with outcome, not process.191- Stop when done. No summary, no recap, no trailing commentary.192- No politeness wrappers. Direct and blunt.193- Minimum words. If one word works, do not use ten.194- No unsolicited explanations.195- No emoji unless asked.