fastapi/docs/fr/docs/advanced/path-operation-advanced-con...

8.1 KiB
Raw Blame History

Configuration avancée des chemins d'accès

ID dopération OpenAPI

/// warning | Alertes

Si vous nêtes pas un « expert » dOpenAPI, vous nen avez probablement pas besoin.

///

Vous pouvez définir lOpenAPI operationId à utiliser dans votre chemin daccès avec le paramètre operation_id.

Vous devez vous assurer quil est unique pour chaque opération.

{* ../../docs_src/path_operation_advanced_configuration/tutorial001_py39.py hl[6] *}

Utiliser le nom de la fonction de chemin daccès comme operationId

Si vous souhaitez utiliser les noms de fonction de vos API comme operationId, vous pouvez les parcourir tous et remplacer loperation_id de chaque chemin daccès en utilisant leur APIRoute.name.

Vous devez le faire après avoir ajouté tous vos chemins daccès.

{* ../../docs_src/path_operation_advanced_configuration/tutorial002_py39.py hl[2, 12:21, 24] *}

/// tip | Astuce

Si vous appelez manuellement app.openapi(), vous devez mettre à jour les operationId avant cela.

///

/// warning | Alertes

Si vous faites cela, vous devez vous assurer que chacune de vos fonctions de chemin daccès a un nom unique.

Même si elles se trouvent dans des modules différents (fichiers Python).

///

Exclusion dOpenAPI

Pour exclure un chemin daccès du schéma OpenAPI généré (et donc des systèmes de documentation automatiques), utilisez le paramètre include_in_schema et définissez-le à False :

{* ../../docs_src/path_operation_advanced_configuration/tutorial003_py39.py hl[6] *}

Description avancée depuis la docstring

Vous pouvez limiter les lignes utilisées de la docstring dune fonction de chemin daccès pour OpenAPI.

Lajout dun \f (un caractère « saut de page » échappé) amène FastAPI à tronquer la sortie utilisée pour OpenAPI à cet endroit.

Cela napparaîtra pas dans la documentation, mais dautres outils (comme Sphinx) pourront utiliser le reste.

{* ../../docs_src/path_operation_advanced_configuration/tutorial004_py310.py hl[17:27] *}

Réponses supplémentaires

Vous avez probablement vu comment déclarer le response_model et le status_code pour un chemin daccès.

Cela définit les métadonnées sur la réponse principale dun chemin daccès.

Vous pouvez également déclarer des réponses supplémentaires avec leurs modèles, codes de statut, etc.

Il y a un chapitre entier dans la documentation à ce sujet, vous pouvez le lire dans Réponses supplémentaires dans OpenAPI{.internal-link target=_blank}.

OpenAPI supplémentaire

Lorsque vous déclarez un chemin daccès dans votre application, FastAPI génère automatiquement les métadonnées pertinentes à propos de ce chemin daccès à inclure dans le schéma OpenAPI.

/// note | Détails techniques

Dans la spécification OpenAPI, cela sappelle lobjet Operation.

///

Il contient toutes les informations sur le chemin daccès et est utilisé pour générer la documentation automatique.

Il inclut les tags, parameters, requestBody, responses, etc.

Ce schéma OpenAPI spécifique à un chemin daccès est normalement généré automatiquement par FastAPI, mais vous pouvez également létendre.

/// tip | Astuce

Ceci est un point dextension de bas niveau.

Si vous avez seulement besoin de déclarer des réponses supplémentaires, un moyen plus pratique de le faire est dutiliser Réponses supplémentaires dans OpenAPI{.internal-link target=_blank}.

///

Vous pouvez étendre le schéma OpenAPI pour un chemin daccès en utilisant le paramètre openapi_extra.

Extensions OpenAPI

Cet openapi_extra peut être utile, par exemple, pour déclarer des Extensions OpenAPI :

{* ../../docs_src/path_operation_advanced_configuration/tutorial005_py39.py hl[6] *}

Si vous ouvrez la documentation automatique de lAPI, votre extension apparaîtra en bas du chemin daccès spécifique.

Et si vous consultez lOpenAPI résultant (à /openapi.json dans votre API), vous verrez également votre extension comme partie du chemin daccès spécifique :

{
    "openapi": "3.1.0",
    "info": {
        "title": "FastAPI",
        "version": "0.1.0"
    },
    "paths": {
        "/items/": {
            "get": {
                "summary": "Read Items",
                "operationId": "read_items_items__get",
                "responses": {
                    "200": {
                        "description": "Successful Response",
                        "content": {
                            "application/json": {
                                "schema": {}
                            }
                        }
                    }
                },
                "x-aperture-labs-portal": "blue"
            }
        }
    }
}

Personnaliser le schéma OpenAPI dun chemin daccès

Le dictionnaire dans openapi_extra sera fusionné en profondeur avec le schéma OpenAPI généré automatiquement pour le chemin daccès.

Ainsi, vous pouvez ajouter des données supplémentaires au schéma généré automatiquement.

Par exemple, vous pourriez décider de lire et de valider la requête avec votre propre code, sans utiliser les fonctionnalités automatiques de FastAPI avec Pydantic, mais vous pourriez tout de même vouloir définir la requête dans le schéma OpenAPI.

Vous pourriez le faire avec openapi_extra :

{* ../../docs_src/path_operation_advanced_configuration/tutorial006_py39.py hl[19:36, 39:40] *}

Dans cet exemple, nous navons déclaré aucun modèle Pydantic. En fait, le corps de la requête nest même pas parsé en JSON, il est lu directement en tant que bytes, et la fonction magic_data_reader() serait chargée de lanalyser dune manière ou dune autre.

Néanmoins, nous pouvons déclarer le schéma attendu pour le corps de la requête.

Type de contenu OpenAPI personnalisé

En utilisant cette même astuce, vous pourriez utiliser un modèle Pydantic pour définir le JSON Schema qui est ensuite inclus dans la section de schéma OpenAPI personnalisée pour le chemin daccès.

Et vous pourriez le faire même si le type de données dans la requête nest pas du JSON.

Par exemple, dans cette application nous nutilisons pas la fonctionnalité intégrée de FastAPI pour extraire le JSON Schema des modèles Pydantic ni la validation automatique pour le JSON. En fait, nous déclarons le type de contenu de la requête comme YAML, pas JSON :

{* ../../docs_src/path_operation_advanced_configuration/tutorial007_py39.py hl[15:20, 22] *}

Néanmoins, bien que nous nutilisions pas la fonctionnalité intégrée par défaut, nous utilisons toujours un modèle Pydantic pour générer manuellement le JSON Schema pour les données que nous souhaitons recevoir en YAML.

Ensuite, nous utilisons directement la requête et extrayons le corps en tant que bytes. Cela signifie que FastAPI nessaiera même pas danalyser le payload de la requête en JSON.

Ensuite, dans notre code, nous analysons directement ce contenu YAML, puis nous utilisons à nouveau le même modèle Pydantic pour valider le contenu YAML :

{* ../../docs_src/path_operation_advanced_configuration/tutorial007_py39.py hl[24:31] *}

/// tip | Astuce

Ici, nous réutilisons le même modèle Pydantic.

Mais de la même manière, nous aurions pu le valider autrement.

///