--- /dev/null
+# Corps de la requĂȘte
+
+Quand vous avez besoin d'envoyer de la donnĂ©e depuis un client (comme un navigateur) vers votre API, vous l'envoyez en tant que **corps de requĂȘte**.
+
+Le corps d'une **requĂȘte** est de la donnĂ©e envoyĂ©e par le client Ă votre API. Le corps d'une **rĂ©ponse** est la donnĂ©e envoyĂ©e par votre API au client.
+
+Votre API aura presque toujours Ă envoyer un corps de **rĂ©ponse**. Mais un client n'a pas toujours Ă envoyer un corps de **requĂȘte**.
+
+Pour dĂ©clarer un corps de **requĂȘte**, on utilise les modĂšles de <a href="https://pydantic-docs.helpmanual.io/" class="external-link" target="_blank">Pydantic</a> en profitant de tous leurs avantages et fonctionnalitĂ©s.
+
+!!! info
+ Pour envoyer de la donnée, vous devriez utiliser : `POST` (le plus populaire), `PUT`, `DELETE` ou `PATCH`.
+
+ Envoyer un corps dans une requĂȘte `GET` a un comportement non dĂ©fini dans les spĂ©cifications, cela est nĂ©anmoins supportĂ© par **FastAPI**, seulement pour des cas d'utilisation trĂšs complexes/extrĂȘmes.
+
+ Ceci Ă©tant dĂ©couragĂ©, la documentation interactive gĂ©nĂ©rĂ©e par Swagger UI ne montrera pas de documentation pour le corps d'une requĂȘte `GET`, et les proxys intermĂ©diaires risquent de ne pas le supporter.
+
+## Importez le `BaseModel` de Pydantic
+
+Commencez par importer la classe `BaseModel` du module `pydantic` :
+
+```Python hl_lines="4"
+{!../../../docs_src/body/tutorial001.py!}
+```
+
+## Créez votre modÚle de données
+
+Déclarez ensuite votre modÚle de données en tant que classe qui hérite de `BaseModel`.
+
+Utilisez les types Python standard pour tous les attributs :
+
+```Python hl_lines="7-11"
+{!../../../docs_src/body/tutorial001.py!}
+```
+
+Tout comme pour la dĂ©claration de paramĂštres de requĂȘte, quand un attribut de modĂšle a une valeur par dĂ©faut, il n'est pas nĂ©cessaire. Sinon, cet attribut doit ĂȘtre renseignĂ© dans le corps de la requĂȘte. Pour rendre ce champ optionnel simplement, utilisez `None` comme valeur par dĂ©faut.
+
+Par exemple, le modÚle ci-dessus déclare un "objet" JSON (ou `dict` Python) tel que :
+
+```JSON
+{
+ "name": "Foo",
+ "description": "An optional description",
+ "price": 45.2,
+ "tax": 3.5
+}
+```
+
+...`description` et `tax` étant des attributs optionnels (avec `None` comme valeur par défaut), cet "objet" JSON serait aussi valide :
+
+```JSON
+{
+ "name": "Foo",
+ "price": 45.2
+}
+```
+
+## Déclarez-le comme paramÚtre
+
+Pour l'ajouter Ă votre *opĂ©ration de chemin*, dĂ©clarez-le comme vous dĂ©clareriez des paramĂštres de chemin ou de requĂȘte :
+
+```Python hl_lines="18"
+{!../../../docs_src/body/tutorial001.py!}
+```
+
+...et déclarez que son type est le modÚle que vous avez créé : `Item`.
+
+## Résultats
+
+En utilisant uniquement les déclarations de type Python, **FastAPI** réussit à :
+
+* Lire le contenu de la requĂȘte en tant que JSON.
+* Convertir les types correspondants (si nécessaire).
+* Valider la donnée.
+ * Si la donnĂ©e est invalide, une erreur propre et claire sera renvoyĂ©e, indiquant exactement oĂč Ă©tait la donnĂ©e incorrecte.
+* Passer la donnée reçue dans le paramÚtre `item`.
+ * Ce paramÚtre ayant été déclaré dans la fonction comme étant de type `Item`, vous aurez aussi tout le support offert par l'éditeur (auto-complétion, etc.) pour tous les attributs de ce paramÚtre et les types de ces attributs.
+* GĂ©nĂ©rer des dĂ©finitions <a href="https://json-schema.org" class="external-link" target="_blank">JSON Schema</a> pour votre modĂšle, qui peuvent ĂȘtre utilisĂ©es oĂč vous en avez besoin dans votre projet ensuite.
+* Ces schémas participeront à la constitution du schéma généré OpenAPI, et seront donc utilisés par les documentations automatiquement générées.
+
+## Documentation automatique
+
+Les schémas JSON de vos modÚles seront intégrés au schéma OpenAPI global de votre application, et seront donc affichés dans la documentation interactive de l'API :
+
+<img src="/img/tutorial/body/image01.png">
+
+Et seront aussi utilisés dans chaque *opération de chemin* de la documentation utilisant ces modÚles :
+
+<img src="/img/tutorial/body/image02.png">
+
+## Support de l'éditeur
+
+Dans votre éditeur, vous aurez des annotations de types et de l'auto-complétion partout dans votre fonction (ce qui n'aurait pas été le cas si vous aviez utilisé un classique `dict` plutÎt qu'un modÚle Pydantic) :
+
+<img src="/img/tutorial/body/image03.png">
+
+Et vous obtenez aussi de la vérification d'erreur pour les opérations incorrectes de types :
+
+<img src="/img/tutorial/body/image04.png">
+
+Ce n'est pas un hasard, ce framework entier a été bati avec ce design comme objectif.
+
+Et cela a été rigoureusement testé durant la phase de design, avant toute implémentation, pour s'assurer que cela fonctionnerait avec tous les éditeurs.
+
+Des changements sur Pydantic ont mĂȘme Ă©tĂ© faits pour supporter cela.
+
+Les captures d'écrans précédentes ont été prises sur <a href="https://code.visualstudio.com" class="external-link" target="_blank">Visual Studio Code</a>.
+
+Mais vous auriez le mĂȘme support de l'Ă©diteur avec <a href="https://www.jetbrains.com/pycharm/" class="external-link" target="_blank">PyCharm</a> et la majoritĂ© des autres Ă©diteurs de code Python.
+
+<img src="/img/tutorial/body/image05.png">
+
+!!! tip "Astuce"
+ Si vous utilisez <a href="https://www.jetbrains.com/pycharm/" class="external-link" target="_blank">PyCharm</a> comme éditeur, vous pouvez utiliser le Plugin <a href="https://www.jetbrains.com/pycharm/" class="external-link" target="_blank">PyCharm</a>.
+
+ Ce qui améliore le support pour les modÚles Pydantic avec :
+
+ * de l'auto-complétion
+ * des vérifications de type
+ * du "refactoring" (ou remaniement de code)
+ * de la recherche
+ * de l'inspection
+
+## Utilisez le modĂšle
+
+Dans la fonction, vous pouvez accéder à tous les attributs de l'objet du modÚle directement :
+
+```Python hl_lines="21"
+{!../../../docs_src/body/tutorial002.py!}
+```
+
+## Corps de la requĂȘte + paramĂštres de chemin
+
+Vous pouvez dĂ©clarer des paramĂštres de chemin et un corps de requĂȘte pour la mĂȘme *opĂ©ration de chemin*.
+
+**FastAPI** est capable de reconnaĂźtre que les paramĂštres de la fonction qui correspondent aux paramĂštres de chemin doivent ĂȘtre **rĂ©cupĂ©rĂ©s depuis le chemin**, et que les paramĂštres de fonctions dĂ©clarĂ©s comme modĂšles Pydantic devraient ĂȘtre **rĂ©cupĂ©rĂ©s depuis le corps de la requĂȘte**.
+
+```Python hl_lines="17-18"
+{!../../../docs_src/body/tutorial003.py!}
+```
+
+## Corps de la requĂȘte + paramĂštres de chemin et de requĂȘte
+
+Vous pouvez aussi dĂ©clarer un **corps**, et des paramĂštres de **chemin** et de **requĂȘte** dans la mĂȘme *opĂ©ration de chemin*.
+
+**FastAPI** saura reconnaßtre chacun d'entre eux et récupérer la bonne donnée au bon endroit.
+
+```Python hl_lines="18"
+{!../../../docs_src/body/tutorial004.py!}
+```
+
+Les paramĂštres de la fonction seront reconnus comme tel :
+
+* Si le paramÚtre est aussi déclaré dans le **chemin**, il sera utilisé comme paramÚtre de chemin.
+* Si le paramĂštre est d'un **type singulier** (comme `int`, `float`, `str`, `bool`, etc.), il sera interprĂ©tĂ© comme un paramĂštre de **requĂȘte**.
+* Si le paramĂštre est dĂ©clarĂ© comme ayant pour type un **modĂšle Pydantic**, il sera interprĂ©tĂ© comme faisant partie du **corps** de la requĂȘte.
+
+!!! note
+ **FastAPI** saura que la valeur de `q` n'est pas requise grùce à la valeur par défaut `=None`.
+
+ Le type `Optional` dans `Optional[str]` n'est pas utilisé par **FastAPI**, mais sera utile à votre éditeur pour améliorer le support offert par ce dernier et détecter plus facilement des erreurs de type.
+
+## Sans Pydantic
+
+Si vous ne voulez pas utiliser des modĂšles Pydantic, vous pouvez aussi utiliser des paramĂštres de **Corps**. Pour cela, allez voir la partie de la documentation sur [Corps de la requĂȘte - ParamĂštres multiples](body-multiple-params.md){.internal-link target=_blank}.
\ No newline at end of file