Génération Swagger/OpenAPI pour PHP : automatisation de la documentation d'API
\n\nSwagger (maintenant OpenAPI) est un standard de description d'API RESTful qui permet aux développeurs, clients et outils automatisés de comprendre les capacités d'un service sans accès au code source. Pour les développeurs PHP, l'outil clé est la bibliothèque zircote/swagger-php (anciennement connue sous le nom de swagger-php), qui génère automatiquement une spécification OpenAPI à partir d'annotations dans le code.
\n\nQu'est-ce que zircote/swagger-php ?
\n\nC'est la bibliothèque principale pour la génération de spécifications OpenAPI en PHP. Elle analyse les annotations PHPDoc dans les contrôleurs, modèles et routes, créant un fichier JSON/YAML qui peut être utilisé pour :
\n\n- \n
- La génération automatique de documentation (Swagger UI, ReDoc) \n
- La génération de bibliothèques clientes pour différents langages \n
- Le test d'API (Postman, Insomnia) \n
- La validation des requêtes et réponses \n
Installation et configuration
\n\nInstallation via Composer :
\n\ncomposer require zircote/swagger-php\n\nLa configuration minimale pour Laravel (ou tout framework) inclut la création d'annotations dans le contrôleur. Exemple d'un contrôleur simple avec annotations OpenAPI :
\n\n<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse OpenApi\\Annotations as OA;\n\n/**\n * @OA\\Info(title="My API", version="1.0.0")\n * @OA\\Server(url="https://api.example.com")\n */\nclass UserController extends Controller\n{\n /**\n * @OA\\Get(\n * path="/api/users/{id}",\n * summary="Obtenir un utilisateur par ID",\n * @OA\\Parameter(\n * name="id",\n * in="path",\n * required=true,\n * @OA\\Schema(type="integer")\n * ),\n * @OA\\Response(\n * response=200,\n * description="Réponse réussie",\n * @OA\\JsonContent(ref="#/components/schemas/User")\n * ),\n * @OA\\Response(response=404, description="Utilisateur non trouvé")\n * )\n */\n public function show($id)\n {\n // logique\n }\n}\n\nGénération de la spécification
\n\nPour créer le fichier OpenAPI, exécutez la commande :
\n\nvendor/bin/openapi src -o public/openapi.yaml\n\nOu utilisez le code PHP :
\n\n<?php\n\nuse OpenApi\\Generator;\n\n$openapi = Generator::scan(['/path/to/project/src']);\nfile_put_contents('public/openapi.json', $openapi->toJson());\n\nFonctionnalités avancées
\n\nLa bibliothèque prend en charge :
\n\n- \n
- Schémas imbriqués — création automatique de modèles à partir d'annotations \n
- Regroupement d'endpoints via @OA\\Tag \n
- Sécurité — @OA\\SecurityScheme pour JWT, OAuth2 \n
- Exemples de requêtes — @OA\\RequestBody avec exemples \n
Exemple de modèle avec annotations :
\n\n<?php\n\n/**\n * @OA\\Schema(\n * schema="User",\n * required={"id", "email"},\n * @OA\\Property(property="id", type="integer", format="int64"),\n * @OA\\Property(property="email", type="string", format="email"),\n * @OA\\Property(property="name", type="string"),\n * @OA\\Property(property="created_at", type="string", format="date-time")\n * )\n */\nclass User\n{\n // propriétés\n}\n\nIntégration avec les frameworks
\n\nPour Laravel, il existe le paquet darkaonline/l5-swagger qui ajoute :
\n\n- \n
- Génération automatique à chaque requête \n
- Swagger UI intégré \n
- Configuration via fichier config \n
Installation :
\n\ncomposer require darkaonline/l5-swagger\nphp artisan vendor:publish --provider="L5Swagger\\L5SwaggerServiceProvider"\n\nPour Symfony, utilisez nelmio/api-doc-bundle.
\n\n