Fonctionnalités avancées de Swagger
Utilisation de components pour réutiliser des définitions
Réutilisation du schéma (modèle de données)
components vous permettent de définir des éléments qui peuvent être réutilisés dans toute la documentation de l'API, ce qui réduit la duplication et garantit la cohérence :
Exemple
schemas:
Utilisateur:
type: object
properties:
id:
type: integer
format: int64
username:
type: string
email:
type: string
Méthode de référence :
Exemple
/users/{id}:
get:
responses:
'200':
description:Informations utilisateur
content:
application/json:
schema:
$ref: '#/components/schemas/User'
Réutilisation des paramètres (paramètres communs)
Définir les paramètres communs :
Exemple
parameters:
PageParam:
name: page
in: query
schema:
type: integer
default: 1
description:Numéro de page
LimitParam:
name: limit
in: query
schema:
type: integer
default: 10
description:Enregistrements par page
Méthode de référence :
Exemple
/products:
get:
parameters:
- $ref: '#/components/parameters/PageParam'
- $ref: '#/components/parameters/LimitParam'
Réutilisation des réponses (réponses communes)
Définir les réponses standard :
Exemple
responses:
NotFound:
description:Ressource introuvable
content:
application/json:
schema:
type: object
properties:
code:
type: integer
exemple: 404
message:
type: string
example: "La ressource n'existe pas"
BadRequest:
description:Erreur de paramètre de requête
content:
application/json:
schema:
type: object
properties:
code:
type: integer
exemple: 400
message:
type: string
Méthode de référence :
Exemple
/users/{id}:
get:
responses:
'200':
description:Succès
content:
application/json:
schema:
$ref: '#/components/schemas/User'
'404':
$ref: '#/components/responses/NotFound'
'400':
$ref: '#/components/responses/BadRequest'
Gestion des versions de l'API
Distinguer les versions via les serveurs
Exemple
- url: https://api.example.com/v1
description: API v1
- url: https://api.example.com/v2
description: API v2
Distinguer les versions via le chemin
Exemple
/v1/users:
get:
# v1 interface utilisateur...
/v2/users:
get:
# v2 interface utilisateur...
Distinguer les versions via les en-têtes de requête
Exemple
/users:
get:
parameters:
- name: api-version
in: header
required: true
schema:
type: string
enum: ['1.0', '2.0']
Simulation de données factices
Utiliser des exemples pour définir des données d'exemple
Définir des exemples dans la réponse :
Exemple
/users:
get:
responses:
'200':
description:Liste d'utilisateurs
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/User'
examples:
userList:
summary:Exemple de liste d'utilisateurs
value:
- id: 1
username: "user1"
email: "[email protected]"
- id: 2
username: "user2"
email: "[email protected]"
Utilisation de la fonctionnalité Mock de Swagger UI
Swagger UI intègre un serveur mock qui peut générer des réponses simulées en fonction de votre définition OpenAPI.
Configurer mockServer dans Swagger UI :
Exemple
url: "https://petstore.swagger.io/v2/swagger.json",
dom_id: '#swagger-ui',
presets: [
SwaggerUI.presets.apis,
SwaggerUIStandalonePreset
],
plugins: [
SwaggerUI.plugins.MockPlugin
],
mockImplementations: {
'/users': {
get: () => ({
status: 200,
body: [
{ id: 1, name: "Utilisateur Test 1" },
{ id: 2, name: "Utilisateur Test 2" }
]
})
}
}
})
Utilisation de services Mock tiers
- Prism : serveur mock OpenAPI
- Mockoon : un outil d'API mock qui peut s'intégrer à Swagger
- Postman : fournit des fonctionnalités de serveur mock
Configuration de sécurité avancée
Définir plusieurs méthodes d'authentification :
Exemple
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
apiKeyAuth:
type: apiKey
in: header
name: X-API-KEY
OAuth2:
type: oauth2
flows:
implicit:
authorizationUrl: https://example.com/oauth/authorize
scopes:
read:Permission de lecture
write:Permission d'écriture
Appliquer les définitions de sécurité :
Exemple
- bearerAuth: []
- apiKeyAuth: []
chemins:
/users:
get:
sécurité:
- OAuth2: [read]
Séparation et organisation des documents
Utiliser$refpour référencer des fichiers externes :
Exemple
/users:
$ref: './paths/users.yaml'
/products:
$ref: './paths/products.yaml'
components:
schemas:
Utilisateur:
$ref: './schemas/user.yaml'
Balises et regroupement
Utilisez des balises pour organiser les points de terminaison d'API :
Exemple
- name: users
description:Gestion des utilisateurs
- name: products
description:Gestion des produits
chemins:
/users:
get:
tags:
- users
/products:
get:
tags:
- products
Champs d'extension
Viax-Ajoutez des propriétés personnalisées avec un préfixe :
Exemple
/users:
get:
x-controller: UserController
x-rate-limit: 100
x-deprecated: false
Ces fonctionnalités avancées peuvent vous aider à créer une documentation API plus structurée, maintenable et professionnelle.
Autres extensions