]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
🌐 Add French translation for Tutorial - First steps (#3455)
authorSam Courtemanche <smlep.pro@gmail.com>
Tue, 26 Oct 2021 18:47:01 +0000 (20:47 +0200)
committerGitHub <noreply@github.com>
Tue, 26 Oct 2021 18:47:01 +0000 (18:47 +0000)
Co-authored-by: SebastiĂĄn RamĂ­rez <tiangolo@gmail.com>
docs/fr/docs/tutorial/first-steps.md [new file with mode: 0644]
docs/fr/mkdocs.yml

diff --git a/docs/fr/docs/tutorial/first-steps.md b/docs/fr/docs/tutorial/first-steps.md
new file mode 100644 (file)
index 0000000..3a81362
--- /dev/null
@@ -0,0 +1,334 @@
+# DĂ©marrage
+
+Le fichier **FastAPI** le plus simple possible pourrait ressembler Ă  cela  :
+
+```Python
+{!../../../docs_src/first_steps/tutorial001.py!}
+```
+
+Copiez ce code dans un fichier nommĂ© `main.py`.
+
+DĂ©marrez le serveur :
+
+<div class="termy">
+
+```console
+$ uvicorn main:app --reload
+
+<span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+<span style="color: green;">INFO</span>:     Started reloader process [28720]
+<span style="color: green;">INFO</span>:     Started server process [28722]
+<span style="color: green;">INFO</span>:     Waiting for application startup.
+<span style="color: green;">INFO</span>:     Application startup complete.
+```
+
+</div>
+
+!!! note
+    La commande `uvicorn main:app` fait rĂ©fĂ©rence Ă  :
+
+    * `main` : le fichier `main.py` (le module Python).
+    * `app` : l'objet créé dans `main.py` via la ligne `app = FastAPI()`.
+    * `--reload` : l'option disant Ă  uvicorn de redĂ©marrer le serveur Ă  chaque changement du code. Ă€ ne pas utiliser en production !
+
+Vous devriez voir dans la console, une ligne semblable Ă  la suivante :
+
+```hl_lines="4"
+INFO:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+Cette ligne montre l'URL par laquelle l'app est actuellement accessible, sur votre machine locale.
+
+### Allez voir le rĂ©sultat
+
+Ouvrez votre navigateur Ă  l'adresse <a href="http://127.0.0.1:8000" class="external-link" target="_blank">http://127.0.0.1:8000</a>.
+
+Vous obtiendrez cette rĂ©ponse JSON :
+
+```JSON
+{"message": "Hello World"}
+```
+
+### Documentation interactive de l'API
+
+Rendez-vous sur <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>.
+
+Vous verrez la documentation interactive de l'API gĂ©nĂ©rĂ©e automatiquement (via <a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank">Swagger UI</a>) :
+
+![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png)
+
+### Documentation alternative
+
+Ensuite, rendez-vous sur <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a>.
+
+Vous y verrez la documentation alternative (via <a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank">ReDoc</a>) :
+
+![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png)
+
+### OpenAPI
+
+**FastAPI** gĂ©nĂšre un "schĂ©ma" contenant toute votre API dans le standard de dĂ©finition d'API **OpenAPI**.
+
+#### "SchĂ©ma"
+
+Un "schĂ©ma" est une dĂ©finition ou une description de quelque chose. Pas le code qui l'implĂ©mente, uniquement une description abstraite.
+
+#### "SchĂ©ma" d'API
+
+Ici, <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank">OpenAPI</a> est une spĂ©cification qui dicte comment dĂ©finir le schĂ©ma de votre API.
+
+Le schĂ©ma inclut les chemins de votre API, les paramĂštres potentiels de chaque chemin, etc.
+
+#### "SchĂ©ma" de donnĂ©es
+
+Le terme "schĂ©ma" peut aussi faire rĂ©fĂ©rence Ă  la forme de la donnĂ©e, comme un contenu JSON.
+
+Dans ce cas, cela signifierait les attributs JSON, ainsi que les types de ces attributs, etc.
+
+#### OpenAPI et JSON Schema
+
+**OpenAPI** dĂ©finit un schĂ©ma d'API pour votre API. Il inclut des dĂ©finitions (ou "schĂ©mas") de la donnĂ©e envoyĂ©e et reçue par votre API en utilisant **JSON Schema**, le standard des schĂ©mas de donnĂ©es JSON.
+
+#### Allez voir `openapi.json`
+
+Si vous ĂȘtes curieux d'Ă  quoi ressemble le schĂ©ma brut **OpenAPI**, **FastAPI** gĂ©nĂšre automatiquement un (schĂ©ma) JSON avec les descriptions de toute votre API.
+
+Vous pouvez le voir directement Ă  cette adresse : <a href="http://127.0.0.1:8000/openapi.json" class="external-link" target="_blank">http://127.0.0.1:8000/openapi.json</a>.
+
+Le schĂ©ma devrait ressembler Ă  ceci :
+
+
+```JSON
+{
+    "openapi": "3.0.2",
+    "info": {
+        "title": "FastAPI",
+        "version": "0.1.0"
+    },
+    "paths": {
+        "/items/": {
+            "get": {
+                "responses": {
+                    "200": {
+                        "description": "Successful Response",
+                        "content": {
+                            "application/json": {
+
+
+
+...
+```
+
+#### Ă€ quoi sert OpenAPI
+
+Le schĂ©ma **OpenAPI** est ce qui alimente les deux systĂšmes de documentation interactive.
+
+Et il existe des dizaines d'alternatives, toutes basĂ©es sur **OpenAPI**. Vous pourriez facilement ajouter n'importe laquelle de ces alternatives Ă  votre application **FastAPI**.
+
+Vous pourriez aussi l'utiliser pour gĂ©nĂ©rer du code automatiquement, pour les clients qui communiquent avec votre API. Comme par exemple, des applications frontend, mobiles ou IOT.
+
+## RĂ©capitulatif, Ă©tape par Ă©tape
+
+### Ă‰tape 1 : import `FastAPI`
+
+```Python hl_lines="1"
+{!../../../docs_src/first_steps/tutorial001.py!}
+```
+
+`FastAPI` est une classe Python qui fournit toutes les fonctionnalitĂ©s nĂ©cessaires au lancement de votre API.
+
+!!! note "DĂ©tails techniques"
+    `FastAPI` est une classe hĂ©ritant directement de `Starlette`.
+
+    Vous pouvez donc aussi utiliser toutes les fonctionnalitĂ©s de <a href="https://www.starlette.io/" class="external-link" target="_blank">Starlette</a> depuis `FastAPI`.
+
+### Ă‰tape 2 : crĂ©er une "instance" `FastAPI`
+
+```Python hl_lines="3"
+{!../../../docs_src/first_steps/tutorial001.py!}
+```
+
+Ici la variable `app` sera une "instance" de la classe `FastAPI`.
+
+Ce sera le point principal d'interaction pour crĂ©er toute votre API.
+
+Cette `app` est la mĂȘme que celle Ă  laquelle fait rĂ©fĂ©rence `uvicorn` dans la commande :
+
+<div class="termy">
+
+```console
+$ uvicorn main:app --reload
+
+<span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+</div>
+
+Si vous crĂ©ez votre app avec :
+
+```Python hl_lines="3"
+{!../../../docs_src/first_steps/tutorial002.py!}
+```
+
+Et la mettez dans un fichier `main.py`, alors vous appeleriez `uvicorn` avec :
+
+<div class="termy">
+
+```console
+$ uvicorn main:my_awesome_api --reload
+
+<span style="color: green;">INFO</span>:     Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+</div>
+
+### Ă‰tape 3: crĂ©er une *opĂ©ration de chemin*
+
+#### Chemin
+
+Chemin, ou "path" fait rĂ©fĂ©rence ici Ă  la derniĂšre partie de l'URL dĂ©marrant au premier `/`.
+
+Donc, dans un URL tel que :
+
+```
+https://example.com/items/foo
+```
+
+...le "path" serait :
+
+```
+/items/foo
+```
+
+!!! info
+    Un chemin, ou "path" est aussi souvent appelĂ© route ou "endpoint".
+
+
+#### OpĂ©ration
+
+"OpĂ©ration" fait rĂ©fĂ©rence Ă  une des "mĂ©thodes" HTTP.
+
+Une de :
+
+* `POST`
+* `GET`
+* `PUT`
+* `DELETE`
+
+...ou une des plus exotiques :
+
+* `OPTIONS`
+* `HEAD`
+* `PATCH`
+* `TRACE`
+
+Dans le protocol HTTP, vous pouvez communiquer avec chaque chemin en utilisant une (ou plus) de ces "mĂ©thodes".
+
+---
+
+En construisant des APIs, vous utilisez gĂ©nĂ©ralement ces mĂ©thodes HTTP spĂ©cifiques pour effectuer une action prĂ©cise.
+
+GĂ©nĂ©ralement vous utilisez :
+
+* `POST` : pour crĂ©er de la donnĂ©e.
+* `GET` : pour lire de la donnĂ©e.
+* `PUT` : pour mettre Ă  jour de la donnĂ©e.
+* `DELETE` : pour supprimer de la donnĂ©e.
+
+Donc, dans **OpenAPI**, chaque mĂ©thode HTTP est appelĂ©e une "opĂ©ration".
+
+Nous allons donc aussi appeler ces derniĂšres des "**opĂ©rations**".
+
+
+#### DĂ©finir un *dĂ©corateur d'opĂ©ration de chemin*
+
+```Python hl_lines="6"
+{!../../../docs_src/first_steps/tutorial001.py!}
+```
+
+Le `@app.get("/")` dit Ă  **FastAPI** que la fonction en dessous est chargĂ©e de gĂ©rer les requĂȘtes qui vont sur :
+
+* le chemin `/`
+* en utilisant une <abbr title="une mĂ©thode GET HTTP">opĂ©ration <code>get</code></abbr>
+
+!!! info "`@dĂ©corateur` Info"
+    Cette syntaxe `@something` en Python est appelĂ©e un "dĂ©corateur".
+
+    Vous la mettez au dessus d'une fonction. Comme un joli chapeau dĂ©coratif (j'imagine que ce terme vient de lĂ  đŸ€·đŸ»â€â™‚).
+
+    Un "dĂ©corateur" prend la fonction en dessous et en fait quelque chose.
+
+    Dans notre cas, ce dĂ©corateur dit Ă  **FastAPI** que la fonction en dessous correspond au **chemin** `/` avec l'**opĂ©ration** `get`.
+
+    C'est le "**dĂ©corateur d'opĂ©ration de chemin**".
+
+Vous pouvez aussi utiliser les autres opĂ©rations :
+
+* `@app.post()`
+* `@app.put()`
+* `@app.delete()`
+
+Tout comme celles les plus exotiques :
+
+* `@app.options()`
+* `@app.head()`
+* `@app.patch()`
+* `@app.trace()`
+
+!!! tip "Astuce"
+    Vous ĂȘtes libres d'utiliser chaque opĂ©ration (mĂ©thode HTTP) comme vous le dĂ©sirez.
+
+    **FastAPI** n'impose pas de sens spĂ©cifique Ă  chacune d'elle.
+
+    Les informations qui sont prĂ©sentĂ©es ici forment une directive gĂ©nĂ©rale, pas des obligations.  
+
+    Par exemple, quand l'on utilise **GraphQL**, toutes les actions sont effectuĂ©es en utilisant uniquement des opĂ©rations `POST`.
+
+### Ă‰tape 4 : dĂ©finir la **fonction de chemin**.
+
+Voici notre "**fonction de chemin**" (ou fonction d'opĂ©ration de chemin) :
+
+* **chemin** : `/`.
+* **opĂ©ration** : `get`.
+* **fonction** : la fonction sous le "dĂ©corateur" (sous `@app.get("/")`).
+
+```Python hl_lines="7"
+{!../../../docs_src/first_steps/tutorial001.py!}
+```
+
+C'est une fonction Python.
+
+Elle sera appelĂ©e par **FastAPI** quand une requĂȘte sur l'URL `/` sera reçue via une opĂ©ration `GET`.
+
+Ici, c'est une fonction asynchrone (dĂ©finie avec `async def`).
+
+---
+
+Vous pourriez aussi la dĂ©finir comme une fonction classique plutĂŽt qu'avec `async def` :
+
+```Python hl_lines="7"
+{!../../../docs_src/first_steps/tutorial003.py!}
+```
+
+!!! note
+    Si vous ne connaissez pas la diffĂ©rence, allez voir la section [Concurrence : *"Vous ĂȘtes pressĂ©s ?"*](../async.md#vous-etes-presses){.internal-link target=_blank}.
+
+### Ă‰tape 5 : retourner le contenu
+
+```Python hl_lines="8"
+{!../../../docs_src/first_steps/tutorial001.py!}
+```
+
+Vous pouvez retourner un dictionnaire (`dict`), une liste (`list`), des valeurs seules comme des chaines de caractĂšres (`str`) et des entiers (`int`), etc.
+
+Vous pouvez aussi retourner des models **Pydantic** (qui seront dĂ©taillĂ©s plus tard).
+
+Il y a de nombreux autres objets et modĂšles qui seront automatiquement convertis en JSON. Essayez d'utiliser vos favoris, il est fort probable qu'ils soient dĂ©jĂ  supportĂ©s.
+
+## RĂ©capitulatif
+
+* Importez `FastAPI`.
+* CrĂ©ez une instance d'`app`.
+* Ajoutez une **dĂ©corateur d'opĂ©ration de chemin** (tel que `@app.get("/")`).
+* Ajoutez une **fonction de chemin** (telle que `def root(): ...` comme ci-dessus).
+* Lancez le serveur de dĂ©veloppement (avec `uvicorn main:app --reload`).
index 01cf8d5e0f54d0e37a622114108ee9203b12020a..6242a88fdd9d6fdaf77ab63d1b210d4c126178bf 100644 (file)
@@ -59,6 +59,7 @@ nav:
 - fastapi-people.md
 - python-types.md
 - Tutoriel - Guide utilisateur:
+  - tutorial/first-steps.md
   - tutorial/path-params.md
   - tutorial/query-params.md
   - tutorial/body.md