]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
🌐 Update translations for fr (add-missing) (#15163)
authorSebastiĂĄn RamĂ­rez <tiangolo@gmail.com>
Thu, 19 Mar 2026 18:33:45 +0000 (19:33 +0100)
committerGitHub <noreply@github.com>
Thu, 19 Mar 2026 18:33:45 +0000 (18:33 +0000)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
docs/fr/docs/advanced/json-base64-bytes.md [new file with mode: 0644]
docs/fr/docs/advanced/stream-data.md [new file with mode: 0644]
docs/fr/docs/advanced/strict-content-type.md [new file with mode: 0644]
docs/fr/docs/editor-support.md [new file with mode: 0644]
docs/fr/docs/tutorial/server-sent-events.md [new file with mode: 0644]
docs/fr/docs/tutorial/stream-json-lines.md [new file with mode: 0644]

diff --git a/docs/fr/docs/advanced/json-base64-bytes.md b/docs/fr/docs/advanced/json-base64-bytes.md
new file mode 100644 (file)
index 0000000..1b5acb0
--- /dev/null
@@ -0,0 +1,63 @@
+# JSON avec des octets en Base64 { #json-with-bytes-as-base64 }
+
+Si votre application doit recevoir et envoyer des donnĂ©es JSON, mais que vous devez y inclure des donnĂ©es binaires, vous pouvez les encoder en base64.
+
+## Base64 vs fichiers { #base64-vs-files }
+
+Envisagez d'abord d'utiliser [Fichiers de requĂȘte](../tutorial/request-files.md) pour tĂ©lĂ©verser des donnĂ©es binaires et [RĂ©ponse personnalisĂ©e - FileResponse](./custom-response.md#fileresponse--fileresponse-) pour envoyer des donnĂ©es binaires, plutĂŽt que de les encoder dans du JSON.
+
+JSON ne peut contenir que des chaĂźnes encodĂ©es en UTF-8, il ne peut donc pas contenir d'octets bruts.
+
+Base64 peut encoder des donnĂ©es binaires en chaĂźnes, mais pour cela il doit utiliser plus de caractĂšres que les donnĂ©es binaires originales ; c'est donc en gĂ©nĂ©ral moins efficace que des fichiers classiques.
+
+N'utilisez base64 que si vous devez absolument inclure des donnĂ©es binaires dans du JSON et que vous ne pouvez pas utiliser des fichiers pour cela.
+
+## Pydantic `bytes` { #pydantic-bytes }
+
+Vous pouvez dĂ©clarer un modĂšle Pydantic avec des champs `bytes`, puis utiliser `val_json_bytes` dans la configuration du modĂšle pour lui indiquer d'utiliser base64 pour valider les donnĂ©es JSON en entrĂ©e ; dans le cadre de cette validation, il dĂ©codera la chaĂźne base64 en octets.
+
+{* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:9,29:35] hl[9] *}
+
+Si vous allez sur les `/docs`, vous verrez que le champ `data` attend des octets encodĂ©s en base64 :
+
+<div class="screenshot">
+<img src="/img/tutorial/json-base64-bytes/image01.png">
+</div>
+
+Vous pourriez envoyer une requĂȘte comme :
+
+```json
+{
+    "description": "Some data",
+    "data": "aGVsbG8="
+}
+```
+
+/// tip | Astuce
+
+`aGVsbG8=` est l'encodage base64 de `hello`.
+
+///
+
+Pydantic dĂ©codera ensuite la chaĂźne base64 et vous fournira les octets originaux dans le champ `data` du modĂšle.
+
+Vous recevrez une rĂ©ponse comme :
+
+```json
+{
+  "description": "Some data",
+  "content": "hello"
+}
+```
+
+## Pydantic `bytes` pour les donnĂ©es de sortie { #pydantic-bytes-for-output-data }
+
+Vous pouvez Ă©galement utiliser des champs `bytes` avec `ser_json_bytes` dans la configuration du modĂšle pour les donnĂ©es de sortie ; Pydantic sĂ©rialisera alors les octets en base64 lors de la gĂ©nĂ©ration de la rĂ©ponse JSON.
+
+{* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:2,12:16,29,38:41] hl[16] *}
+
+## Pydantic `bytes` pour les donnĂ©es d'entrĂ©e et de sortie { #pydantic-bytes-for-input-and-output-data }
+
+Et bien sĂ»r, vous pouvez utiliser le mĂȘme modĂšle configurĂ© pour utiliser base64 afin de gĂ©rer Ă  la fois l'entrĂ©e (valider) avec `val_json_bytes` et la sortie (sĂ©rialiser) avec `ser_json_bytes` lors de la rĂ©ception et de l'envoi de donnĂ©es JSON.
+
+{* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:2,19:26,29,44:46] hl[23:26] *}
diff --git a/docs/fr/docs/advanced/stream-data.md b/docs/fr/docs/advanced/stream-data.md
new file mode 100644 (file)
index 0000000..3b22910
--- /dev/null
@@ -0,0 +1,117 @@
+# Diffuser des donnĂ©es { #stream-data }
+
+Si vous voulez diffuser des donnĂ©es pouvant ĂȘtre structurĂ©es en JSON, vous devez [Diffuser des JSON Lines](../tutorial/stream-json-lines.md).
+
+Mais si vous voulez diffuser des donnĂ©es binaires pures ou des chaĂźnes, voici comment procĂ©der.
+
+/// info
+
+AjoutĂ© dans FastAPI 0.134.0.
+
+///
+
+## Cas d'utilisation { #use-cases }
+
+Vous pouvez l'utiliser si vous souhaitez diffuser des chaĂźnes pures, par exemple directement depuis la sortie d'un service d'**IA LLM**.
+
+Vous pouvez Ă©galement l'utiliser pour diffuser de gros fichiers binaires, en envoyant chaque bloc de donnĂ©es au fur et Ă  mesure de la lecture, sans tout charger en mĂ©moire d'un coup.
+
+Vous pouvez aussi diffuser de la **vidĂ©o** ou de l'**audio** de cette maniĂšre ; cela peut mĂȘme ĂȘtre gĂ©nĂ©rĂ© au fil du traitement et de l'envoi.
+
+## Utiliser une `StreamingResponse` avec `yield` { #a-streamingresponse-with-yield }
+
+Si vous dĂ©clarez un `response_class=StreamingResponse` dans votre *fonction de chemin d'accĂšs*, vous pouvez utiliser `yield` pour envoyer chaque bloc de donnĂ©es Ă  son tour.
+
+{* ../../docs_src/stream_data/tutorial001_py310.py ln[1:23] hl[20,23] *}
+
+FastAPI transmettra chaque bloc de donnĂ©es Ă  la `StreamingResponse` tel quel ; il n'essaiera pas de le convertir en JSON ni autre chose similaire.
+
+### Fonctions de chemin d'accĂšs non async { #non-async-path-operation-functions }
+
+Vous pouvez Ă©galement utiliser des fonctions `def` classiques (sans `async`), et utiliser `yield` de la mĂȘme maniĂšre.
+
+{* ../../docs_src/stream_data/tutorial001_py310.py ln[26:29] hl[27] *}
+
+### Sans annotation { #no-annotation }
+
+Vous n'avez pas vraiment besoin de dĂ©clarer l'annotation de type de retour pour diffuser des donnĂ©es binaires.
+
+Comme FastAPI n'essaiera pas de convertir les donnĂ©es en JSON avec Pydantic ni de les sĂ©rialiser, dans ce cas l'annotation de type ne sert qu'Ă  votre Ă©diteur et Ă  vos outils ; elle ne sera pas utilisĂ©e par FastAPI.
+
+{* ../../docs_src/stream_data/tutorial001_py310.py ln[32:35] hl[33] *}
+
+Cela signifie aussi qu'avec `StreamingResponse` vous avez la libertĂ© â€” et la responsabilitĂ© â€” de produire et d'encoder les octets de donnĂ©es exactement comme vous avez besoin de les envoyer, indĂ©pendamment des annotations de type. đŸ€“
+
+### Diffuser des bytes { #stream-bytes }
+
+L'un des principaux cas d'usage consiste Ă  diffuser des `bytes` au lieu de chaĂźnes ; vous pouvez bien sĂ»r le faire.
+
+{* ../../docs_src/stream_data/tutorial001_py310.py ln[44:47] hl[47] *}
+
+## CrĂ©er une `PNGStreamingResponse` personnalisĂ©e { #a-custom-pngstreamingresponse }
+
+Dans les exemples ci-dessus, les octets de donnĂ©es Ă©taient diffusĂ©s, mais la rĂ©ponse n'avait pas d'en-tĂȘte `Content-Type`, le client ne savait donc pas quel type de donnĂ©es il recevait.
+
+Vous pouvez crĂ©er une sous-classe personnalisĂ©e de `StreamingResponse` qui dĂ©finit l'en-tĂȘte `Content-Type` sur le type de donnĂ©es que vous diffusez.
+
+Par exemple, vous pouvez crĂ©er une `PNGStreamingResponse` qui dĂ©finit l'en-tĂȘte `Content-Type` Ă  `image/png` en utilisant l'attribut `media_type` :
+
+{* ../../docs_src/stream_data/tutorial002_py310.py ln[6,19:20] hl[20] *}
+
+Vous pouvez ensuite utiliser cette nouvelle classe dans `response_class=PNGStreamingResponse` dans votre *fonction de chemin d'accĂšs* :
+
+{* ../../docs_src/stream_data/tutorial002_py310.py ln[23:27] hl[23] *}
+
+### Simuler un fichier { #simulate-a-file }
+
+Dans cet exemple, nous simulons un fichier avec `io.BytesIO`, qui est un objet de type fichier rĂ©sidant uniquement en mĂ©moire, mais qui permet d'utiliser la mĂȘme interface.
+
+Par exemple, nous pouvons itĂ©rer dessus pour en consommer le contenu, comme nous le ferions avec un fichier.
+
+{* ../../docs_src/stream_data/tutorial002_py310.py ln[1:27] hl[3,12:13,25] *}
+
+/// note | DĂ©tails techniques
+
+Les deux autres variables, `image_base64` et `binary_image`, correspondent Ă  une image encodĂ©e en Base64, puis convertie en bytes, afin de la passer Ă  `io.BytesIO`.
+
+C'est uniquement pour que tout tienne dans le mĂȘme fichier pour cet exemple, et que vous puissiez le copier et l'exĂ©cuter tel quel. đŸ„š
+
+///
+
+En utilisant un bloc `with`, nous nous assurons que l'objet de type fichier est fermĂ© aprĂšs l'exĂ©cution de la fonction gĂ©nĂ©ratrice (la fonction avec `yield`). Donc, aprĂšs la fin de l'envoi de la rĂ©ponse.
+
+Ce ne serait pas si important dans cet exemple prĂ©cis, car il s'agit d'un faux fichier en mĂ©moire (avec `io.BytesIO`), mais avec un vrai fichier, il est important de s'assurer qu'il est fermĂ© une fois le travail terminĂ©.
+
+### GĂ©rer les fichiers et async { #files-and-async }
+
+Dans la plupart des cas, les objets de type fichier ne sont pas compatibles avec `async` et `await` par dĂ©faut.
+
+Par exemple, ils n'ont pas de `await file.read()`, ni de `async for chunk in file`.
+
+Et dans de nombreux cas, leur lecture serait une opĂ©ration bloquante (pouvant bloquer la boucle d'Ă©vĂ©nements), car ils sont lus depuis le disque ou le rĂ©seau.
+
+/// info
+
+L'exemple ci-dessus est en rĂ©alitĂ© une exception, car l'objet `io.BytesIO` est dĂ©jĂ  en mĂ©moire ; sa lecture ne bloquera donc rien.
+
+Mais dans de nombreux cas, la lecture d'un fichier ou d'un objet de type fichier bloquera.
+
+///
+
+Pour Ă©viter de bloquer la boucle d'Ă©vĂ©nements, vous pouvez simplement dĂ©clarer la *fonction de chemin d'accĂšs* avec un `def` classique au lieu de `async def`. Ainsi, FastAPI l'exĂ©cutera dans un worker de pool de threads, afin d'Ă©viter de bloquer la boucle principale.
+
+{* ../../docs_src/stream_data/tutorial002_py310.py ln[30:34] hl[31] *}
+
+/// tip | Astuce
+
+Si vous devez appeler du code bloquant depuis une fonction async, ou une fonction async depuis une fonction bloquante, vous pouvez utiliser [Asyncer](https://asyncer.tiangolo.com), une bibliothĂšque sƓur de FastAPI.
+
+///
+
+### `yield from` { #yield-from }
+
+Lorsque vous itĂ©rez sur quelque chose, comme un objet de type fichier, et que vous faites un `yield` pour chaque Ă©lĂ©ment, vous pouvez aussi utiliser `yield from` pour Ă©mettre chaque Ă©lĂ©ment directement et Ă©viter la boucle `for`.
+
+Ce n'est pas spĂ©cifique Ă  FastAPI, c'est simplement Python, mais c'est une astuce utile Ă  connaĂźtre. đŸ˜Ž
+
+{* ../../docs_src/stream_data/tutorial002_py310.py ln[37:40] hl[40] *}
diff --git a/docs/fr/docs/advanced/strict-content-type.md b/docs/fr/docs/advanced/strict-content-type.md
new file mode 100644 (file)
index 0000000..d5c749e
--- /dev/null
@@ -0,0 +1,88 @@
+# VĂ©rifier strictement le Content-Type { #strict-content-type-checking }
+
+Par dĂ©faut, FastAPI applique une vĂ©rification stricte de l’en-tĂȘte `Content-Type` pour les corps de requĂȘtes JSON ; cela signifie que les requĂȘtes JSON doivent inclure un en-tĂȘte `Content-Type` valide (par ex. `application/json`) pour que le corps soit analysĂ© comme JSON.
+
+## Risque CSRF { #csrf-risk }
+
+Ce comportement par dĂ©faut offre une protection contre une catĂ©gorie d’attaques de Cross-Site Request Forgery (CSRF) dans un scĂ©nario trĂšs spĂ©cifique.
+
+Ces attaques exploitent le fait que les navigateurs permettent Ă  des scripts d’envoyer des requĂȘtes sans effectuer de prĂ©-vĂ©rification CORS (preflight) lorsqu’ils :
+
+* n’ont pas d’en-tĂȘte `Content-Type` (par ex. en utilisant `fetch()` avec un corps `Blob`)
+* et n’envoient aucune information d’authentification.
+
+Ce type d’attaque est surtout pertinent lorsque :
+
+* l’application s’exĂ©cute localement (par ex. sur `localhost`) ou sur un rĂ©seau interne
+* et l’application n’a aucun mĂ©canisme d’authentification, elle part du principe que toute requĂȘte provenant du mĂȘme rĂ©seau est fiable.
+
+## Exemple d’attaque { #example-attack }
+
+Imaginez que vous mettiez au point un moyen d’exĂ©cuter un agent IA local.
+
+Il expose une API Ă  l’adresse
+
+```
+http://localhost:8000/v1/agents/multivac
+```
+
+Il y a aussi un frontend Ă  l’adresse
+
+```
+http://localhost:8000
+```
+
+/// tip | Astuce
+
+Notez qu’ils ont le mĂȘme hĂŽte.
+
+///
+
+Vous pouvez alors, via le frontend, amener l’agent IA Ă  effectuer des actions en votre nom.
+
+Comme il s’exĂ©cute localement, et non sur l’Internet ouvert, vous dĂ©cidez de ne mettre en place aucun mĂ©canisme d’authentification, en vous fiant simplement Ă  l’accĂšs au rĂ©seau local.
+
+Un de vos utilisateurs pourrait alors l’installer et l’exĂ©cuter localement.
+
+Il pourrait ensuite ouvrir un site malveillant, par exemple quelque chose comme
+
+```
+https://evilhackers.example.com
+```
+
+Et ce site malveillant enverrait des requĂȘtes en utilisant `fetch()` avec un corps `Blob` vers l’API locale Ă  l’adresse
+
+```
+http://localhost:8000/v1/agents/multivac
+```
+
+MĂȘme si l’hĂŽte du site malveillant et celui de l’application locale sont diffĂ©rents, le navigateur ne dĂ©clenchera pas de prĂ©-vĂ©rification CORS (preflight) parce que :
+
+* Elle s’exĂ©cute sans aucune authentification, il n’y a pas Ă  envoyer d’informations d’authentification.
+* Le navigateur pense qu’il n’envoie pas de JSON (faute d’en-tĂȘte `Content-Type`).
+
+Le site malveillant pourrait alors amener l’agent IA local Ă  envoyer des messages en colĂšre Ă  l’ancien patron de l’utilisateur ... ou pire. đŸ˜…
+
+## Internet ouvert { #open-internet }
+
+Si votre application est exposĂ©e sur l’Internet ouvert, vous ne Â« ferez pas confiance au rĂ©seau Â» et ne laisserez pas n’importe qui envoyer des requĂȘtes privilĂ©giĂ©es sans authentification.
+
+Des attaquants pourraient simplement exĂ©cuter un script pour envoyer des requĂȘtes Ă  votre API, sans interaction avec le navigateur ; vous sĂ©curisez donc probablement dĂ©jĂ  tout endpoint privilĂ©giĂ©.
+
+Dans ce cas, cette attaque / ce risque ne vous concerne pas.
+
+Ce risque et cette attaque sont surtout pertinents lorsque l’application s’exĂ©cute sur le rĂ©seau local et que c’est la seule protection supposĂ©e.
+
+## Autoriser les requĂȘtes sans Content-Type { #allowing-requests-without-content-type }
+
+Si vous devez prendre en charge des clients qui n’envoient pas d’en-tĂȘte `Content-Type`, vous pouvez dĂ©sactiver la vĂ©rification stricte en dĂ©finissant `strict_content_type=False` :
+
+{* ../../docs_src/strict_content_type/tutorial001_py310.py hl[4] *}
+
+Avec ce paramĂštre, les requĂȘtes sans en-tĂȘte `Content-Type` verront leur corps analysĂ© comme JSON, ce qui correspond au comportement des anciennes versions de FastAPI.
+
+/// info
+
+Ce comportement et cette configuration ont Ă©tĂ© ajoutĂ©s dans FastAPI 0.132.0.
+
+///
diff --git a/docs/fr/docs/editor-support.md b/docs/fr/docs/editor-support.md
new file mode 100644 (file)
index 0000000..59e0b3f
--- /dev/null
@@ -0,0 +1,23 @@
+# Prise en charge des Ă©diteurs { #editor-support }
+
+L’extension officielle [Extension FastAPI](https://marketplace.visualstudio.com/items?itemName=FastAPILabs.fastapi-vscode) amĂ©liore votre flux de dĂ©veloppement FastAPI grĂące Ă  la dĂ©couverte des chemins d'accĂšs, Ă  la navigation, ainsi qu’au dĂ©ploiement sur FastAPI Cloud et Ă  la diffusion en direct des journaux.
+
+Pour plus de dĂ©tails sur l’extension, reportez-vous au README sur le [rĂ©fĂ©rentiel GitHub](https://github.com/fastapi/fastapi-vscode).
+
+## Configurer et installer { #setup-and-installation }
+
+L’**Extension FastAPI** est disponible pour [VS Code](https://code.visualstudio.com/) et [Cursor](https://www.cursor.com/). Vous pouvez l’installer directement depuis le panneau Extensions de chaque Ă©diteur en recherchant Â« FastAPI Â» et en sĂ©lectionnant l’extension publiĂ©e par **FastAPI Labs**. L’extension fonctionne Ă©galement dans les Ă©diteurs basĂ©s sur le navigateur tels que [vscode.dev](https://vscode.dev) et [github.dev](https://github.dev).
+
+### DĂ©couvrir l’application { #application-discovery }
+
+Par dĂ©faut, l’extension dĂ©tecte automatiquement les applications FastAPI dans votre espace de travail en recherchant les fichiers qui instancient `FastAPI()`. Si la dĂ©tection automatique ne convient pas Ă  la structure de votre projet, vous pouvez spĂ©cifier un point d’entrĂ©e via `[tool.fastapi]` dans `pyproject.toml` ou le paramĂštre VS Code `fastapi.entryPoint`, en utilisant la notation de module (par ex. `myapp.main:app`).
+
+## FonctionnalitĂ©s { #features }
+
+- **Explorateur des chemins d'accĂšs** â€” Une vue arborescente latĂ©rale de tous les <dfn title="routes, endpoints">*chemins d'accĂšs*</dfn> de votre application. Cliquez pour accĂ©der Ă  n’importe quelle dĂ©finition de route ou de routeur.
+- **Recherche de routes** â€” Recherchez par chemin, mĂ©thode ou nom avec <kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>E</kbd> (sur macOS : <kbd>Cmd</kbd> + <kbd>Shift</kbd> + <kbd>E</kbd>).
+- **Navigation CodeLens** â€” Liens cliquables au-dessus des appels du client de test (par ex. `client.get('/items')`) menant au *chemin d'accĂšs* correspondant, pour naviguer rapidement entre les tests et l’implĂ©mentation.
+- **DĂ©ployer sur FastAPI Cloud** â€” DĂ©ploiement en un clic de votre application sur [FastAPI Cloud](https://fastapicloud.com/).
+- **Diffuser les journaux de l’application** â€” Diffusion en temps rĂ©el des journaux de votre application dĂ©ployĂ©e sur FastAPI Cloud, avec filtrage par niveau et recherche textuelle.
+
+Si vous souhaitez vous familiariser avec les fonctionnalitĂ©s de l’extension, vous pouvez consulter le guide pas Ă  pas de l’extension en ouvrant la palette de commandes (<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>P</kbd> ou sur macOS : <kbd>Cmd</kbd> + <kbd>Shift</kbd> + <kbd>P</kbd>) et en sĂ©lectionnant Â« Welcome: Open walkthrough ... Â» puis en choisissant le guide Â« Get started with FastAPI Â».
diff --git a/docs/fr/docs/tutorial/server-sent-events.md b/docs/fr/docs/tutorial/server-sent-events.md
new file mode 100644 (file)
index 0000000..f4ed506
--- /dev/null
@@ -0,0 +1,120 @@
+# Ă‰vĂ©nements envoyĂ©s par le serveur (SSE) { #server-sent-events-sse }
+
+Vous pouvez diffuser des donnĂ©es vers le client en utilisant les **Server-Sent Events** (SSE).
+
+C'est similaire Ă  [Diffuser des JSON Lines](stream-json-lines.md), mais cela utilise le format `text/event-stream`, pris en charge nativement par les navigateurs via l’API [`EventSource`](https://developer.mozilla.org/en-US/docs/Web/API/EventSource).
+
+/// info | Info
+
+AjoutĂ© dans FastAPI 0.135.0.
+
+///
+
+## Que sont les Server-Sent Events ? { #what-are-server-sent-events }
+
+SSE est un standard pour diffuser des donnĂ©es du serveur au client via HTTP.
+
+Chaque Ă©vĂ©nement est un petit bloc de texte avec des Â« champs Â» comme `data`, `event`, `id` et `retry`, sĂ©parĂ©s par des lignes vides.
+
+Cela ressemble Ă  ceci :
+
+```
+data: {"name": "Portal Gun", "price": 999.99}
+
+data: {"name": "Plumbus", "price": 32.99}
+
+```
+
+Les SSE sont couramment utilisĂ©s pour le streaming de chat IA, les notifications en direct, les journaux et l’observabilitĂ©, et d’autres cas oĂč le serveur envoie des mises Ă  jour au client.
+
+/// tip | Astuce
+
+Si vous souhaitez diffuser des donnĂ©es binaires, par exemple de la vidĂ©o ou de l’audio, consultez le guide avancĂ© : [Diffuser des donnĂ©es](../advanced/stream-data.md).
+
+///
+
+## Diffuser des SSE avec FastAPI { #stream-sse-with-fastapi }
+
+Pour diffuser des SSE avec FastAPI, utilisez `yield` dans votre *fonction de chemin d'accĂšs* et dĂ©finissez `response_class=EventSourceResponse`.
+
+Importez `EventSourceResponse` depuis `fastapi.sse` :
+
+{* ../../docs_src/server_sent_events/tutorial001_py310.py ln[1:25] hl[4,22] *}
+
+Chaque Ă©lĂ©ment produit avec `yield` est encodĂ© en JSON et envoyĂ© dans le champ `data:` d’un Ă©vĂ©nement SSE.
+
+Si vous dĂ©clarez le type de retour comme `AsyncIterable[Item]`, FastAPI l’utilisera pour **valider**, **documenter** et **sĂ©rialiser** les donnĂ©es avec Pydantic.
+
+{* ../../docs_src/server_sent_events/tutorial001_py310.py ln[1:25] hl[10:12,23] *}
+
+/// tip | Astuce
+
+Comme Pydantic le sĂ©rialisera du cĂŽtĂ© **Rust**, vous obtiendrez une **performance** bien supĂ©rieure que si vous ne dĂ©clarez pas de type de retour.
+
+///
+
+### Fonctions de chemin d'accĂšs non async { #non-async-path-operation-functions }
+
+Vous pouvez aussi utiliser des fonctions `def` normales (sans `async`), et utiliser `yield` de la mĂȘme façon.
+
+FastAPI s’assure qu’elles s’exĂ©cutent correctement pour ne pas bloquer la boucle d’évĂ©nements.
+
+Dans ce cas la fonction n’est pas async, le type de retour appropriĂ© serait `Iterable[Item]` :
+
+{* ../../docs_src/server_sent_events/tutorial001_py310.py ln[28:31] hl[29] *}
+
+### Sans type de retour { #no-return-type }
+
+Vous pouvez aussi omettre le type de retour. FastAPI utilisera le [`jsonable_encoder`](./encoder.md) pour convertir les donnĂ©es et les envoyer.
+
+{* ../../docs_src/server_sent_events/tutorial001_py310.py ln[34:37] hl[35] *}
+
+## `ServerSentEvent` { #serversentevent }
+
+Si vous devez dĂ©finir des champs SSE comme `event`, `id`, `retry` ou `comment`, vous pouvez produire des objets `ServerSentEvent` au lieu de donnĂ©es brutes.
+
+Importez `ServerSentEvent` depuis `fastapi.sse` :
+
+{* ../../docs_src/server_sent_events/tutorial002_py310.py hl[4,26] *}
+
+Le champ `data` est toujours encodĂ© en JSON. Vous pouvez passer toute valeur sĂ©rialisable en JSON, y compris des modĂšles Pydantic.
+
+## DonnĂ©es brutes { #raw-data }
+
+Si vous devez envoyer des donnĂ©es **sans** encodage JSON, utilisez `raw_data` au lieu de `data`.
+
+C’est utile pour envoyer du texte prĂ©formatĂ©, des lignes de log, ou des valeurs <dfn title="Une valeur utilisĂ©e pour indiquer une condition ou un Ă©tat particulier">« sentinelle Â»</dfn> spĂ©ciales comme `[DONE]`.
+
+{* ../../docs_src/server_sent_events/tutorial003_py310.py hl[17] *}
+
+/// note | Remarque
+
+`data` et `raw_data` s’excluent mutuellement. Vous ne pouvez en dĂ©finir qu’un seul par `ServerSentEvent`.
+
+///
+
+## Reprendre avec `Last-Event-ID` { #resuming-with-last-event-id }
+
+Quand un navigateur se reconnecte aprĂšs une coupure, il envoie le dernier `id` reçu dans l’en-tĂȘte `Last-Event-ID`.
+
+Vous pouvez le lire comme paramĂštre d’en-tĂȘte et l’utiliser pour reprendre le flux lĂ  oĂč le client s’était arrĂȘtĂ© :
+
+{* ../../docs_src/server_sent_events/tutorial004_py310.py hl[25,27,31] *}
+
+## SSE avec POST { #sse-with-post }
+
+SSE fonctionne avec **n’importe quelle mĂ©thode HTTP**, pas seulement `GET`.
+
+C’est utile pour des protocoles comme [MCP](https://modelcontextprotocol.io) qui diffusent des SSE via `POST` :
+
+{* ../../docs_src/server_sent_events/tutorial005_py310.py hl[14] *}
+
+## DĂ©tails techniques { #technical-details }
+
+FastAPI met en Ć“uvre certaines bonnes pratiques SSE prĂȘtes Ă  l’emploi.
+
+- Envoyer un commentaire **« keep alive Â» `ping`** toutes les 15 secondes quand aucun message n’a Ă©tĂ© Ă©mis, pour Ă©viter que certains proxys ne ferment la connexion, comme suggĂ©rĂ© dans la [SpĂ©cification HTML : Server-Sent Events](https://html.spec.whatwg.org/multipage/server-sent-events.html#authoring-notes).
+- DĂ©finir l’en-tĂȘte `Cache-Control: no-cache` pour **empĂȘcher la mise en cache** du flux.
+- DĂ©finir un en-tĂȘte spĂ©cial `X-Accel-Buffering: no` pour **empĂȘcher le buffering** dans certains proxys comme Nginx.
+
+Vous n’avez rien Ă  faire, cela fonctionne prĂȘt Ă  l’emploi. đŸ€“
diff --git a/docs/fr/docs/tutorial/stream-json-lines.md b/docs/fr/docs/tutorial/stream-json-lines.md
new file mode 100644 (file)
index 0000000..aed0205
--- /dev/null
@@ -0,0 +1,111 @@
+# Diffuser des JSON Lines { #stream-json-lines }
+
+Vous pouvez avoir une sĂ©quence de donnĂ©es que vous souhaitez envoyer en Â« flux Â» ; vous pouvez le faire avec Â« JSON Lines Â».
+
+/// info
+
+AjoutĂ© dans FastAPI 0.134.0.
+
+///
+
+## Qu'est-ce qu'un flux ? { #what-is-a-stream }
+
+La Â« diffusion en continu Â» de donnĂ©es signifie que votre application commence Ă  envoyer des Ă©lĂ©ments de donnĂ©es au client sans attendre que l'ensemble de la sĂ©quence soit prĂȘt.
+
+Ainsi, elle enverra le premier Ă©lĂ©ment, le client le recevra et commencera Ă  le traiter, et vous pourriez ĂȘtre encore en train de produire l'Ă©lĂ©ment suivant.
+
+```mermaid
+sequenceDiagram
+    participant App
+    participant Client
+
+    App->>App: Produce Item 1
+    App->>Client: Send Item 1
+    App->>App: Produce Item 2
+    Client->>Client: Process Item 1
+    App->>Client: Send Item 2
+    App->>App: Produce Item 3
+    Client->>Client: Process Item 2
+    App->>Client: Send Item 3
+    Client->>Client: Process Item 3
+    Note over App: Keeps producing...
+    Note over Client: Keeps consuming...
+```
+
+Cela peut mĂȘme ĂȘtre un flux infini, oĂč vous continuez Ă  envoyer des donnĂ©es.
+
+## JSON Lines { #json-lines }
+
+Dans ces cas, il est courant d'envoyer des Â« JSON Lines Â», qui est un format oĂč vous envoyez un objet JSON par ligne.
+
+Une rĂ©ponse aurait un type de contenu `application/jsonl` (au lieu de `application/json`) et le corps ressemblerait Ă  ceci :
+
+```json
+{"name": "Plumbus", "description": "A multi-purpose household device."}
+{"name": "Portal Gun", "description": "A portal opening device."}
+{"name": "Meeseeks Box", "description": "A box that summons a Meeseeks."}
+```
+
+C'est trĂšs similaire Ă  un tableau JSON (Ă©quivalent d'une liste Python), mais au lieu d'ĂȘtre entourĂ© de `[]` et d'avoir des `,` entre les Ă©lĂ©ments, il y a un objet JSON par ligne, ils sont sĂ©parĂ©s par un caractĂšre de saut de ligne.
+
+/// info
+
+Le point important est que votre application pourra produire chaque ligne Ă  son tour, tandis que le client consomme les lignes prĂ©cĂ©dentes.
+
+///
+
+/// note | DĂ©tails techniques
+
+Comme chaque objet JSON sera sĂ©parĂ© par un saut de ligne, ils ne peuvent pas contenir de caractĂšres de saut de ligne littĂ©raux dans leur contenu, mais ils peuvent contenir des sauts de ligne Ă©chappĂ©s (`\n`), ce qui fait partie du standard JSON.
+
+Mais normalement, vous n'avez pas Ă  vous en soucier, c'est fait automatiquement, continuez la lecture. đŸ€“
+
+///
+
+## Cas d'utilisation { #use-cases }
+
+Vous pouvez utiliser cela pour diffuser des donnĂ©es depuis un service **AI LLM**, depuis des **journaux** ou de la **tĂ©lĂ©mĂ©trie**, ou depuis d'autres types de donnĂ©es pouvant ĂȘtre structurĂ©es en Ă©lĂ©ments **JSON**.
+
+/// tip | Astuce
+
+Si vous voulez diffuser des donnĂ©es binaires, par exemple de la vidĂ©o ou de l'audio, consultez le guide avancĂ© : [Diffuser des donnĂ©es](../advanced/stream-data.md).
+
+///
+
+## Diffuser des JSON Lines avec FastAPI { #stream-json-lines-with-fastapi }
+
+Pour diffuser des JSON Lines avec FastAPI, au lieu d'utiliser `return` dans votre fonction de chemin d'accĂšs, utilisez `yield` pour produire chaque Ă©lĂ©ment Ă  tour de rĂŽle.
+
+{* ../../docs_src/stream_json_lines/tutorial001_py310.py ln[1:24] hl[24] *}
+
+Si chaque Ă©lĂ©ment JSON que vous voulez renvoyer est de type `Item` (un modĂšle Pydantic) et que c'est une fonction async, vous pouvez dĂ©clarer le type de retour comme `AsyncIterable[Item]` :
+
+{* ../../docs_src/stream_json_lines/tutorial001_py310.py ln[1:24] hl[9:11,22] *}
+
+Si vous dĂ©clarez le type de retour, FastAPI l'utilisera pour **valider** les donnĂ©es, les **documenter** dans OpenAPI, les **filtrer**, et les **sĂ©rialiser** avec Pydantic.
+
+/// tip | Astuce
+
+Comme Pydantic les sĂ©rialisera cĂŽtĂ© **Rust**, vous obtiendrez une **performance** bien supĂ©rieure que si vous ne dĂ©clarez pas de type de retour.
+
+///
+
+### Fonctions de chemin d'accĂšs non asynchrones { #non-async-path-operation-functions }
+
+Vous pouvez aussi utiliser des fonctions `def` classiques (sans `async`), et utiliser `yield` de la mĂȘme maniĂšre.
+
+FastAPI s'assure qu'elle s'exĂ©cute correctement afin de ne pas bloquer la boucle d'Ă©vĂ©nements.
+
+Comme dans ce cas la fonction n'est pas async, le bon type de retour serait `Iterable[Item]` :
+
+{* ../../docs_src/stream_json_lines/tutorial001_py310.py ln[27:30] hl[28] *}
+
+### Sans type de retour { #no-return-type }
+
+Vous pouvez Ă©galement omettre le type de retour. FastAPI utilisera alors [`jsonable_encoder`](./encoder.md) pour convertir les donnĂ©es en quelque chose qui peut ĂȘtre sĂ©rialisĂ© en JSON, puis les enverra en JSON Lines.
+
+{* ../../docs_src/stream_json_lines/tutorial001_py310.py ln[33:36] hl[34] *}
+
+## Ă‰vĂ©nements envoyĂ©s par le serveur (SSE) { #server-sent-events-sse }
+
+FastAPI propose Ă©galement une prise en charge native des Server-Sent Events (SSE), qui sont assez proches mais avec quelques dĂ©tails supplĂ©mentaires. Vous pouvez en apprendre davantage dans le chapitre suivant : [ÉvĂ©nements envoyĂ©s par le serveur (SSE)](server-sent-events.md). đŸ€“