Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🌐 Add French translation for docs/fr/docs/advanced/additional-status-code.md #5477

Merged
merged 14 commits into from Nov 13, 2022
Merged
Show file tree
Hide file tree
Changes from 13 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
240 changes: 240 additions & 0 deletions docs/fr/docs/advanced/additional-responses.md
@@ -0,0 +1,240 @@
# Réponses supplémentaires dans OpenAPI

!!! Attention
Ceci concerne un sujet plutÎt avancé.

Si vous dĂ©butez avec **FastAPI**, vous n'en aurez peut-ĂȘtre pas besoin.

Vous pouvez déclarer des réponses supplémentaires, avec des codes HTTP, des types de médias, des descriptions, etc.

Ces réponses supplémentaires seront incluses dans le schéma OpenAPI, elles apparaßtront donc également dans la documentation de l'API.

Mais pour ces réponses supplémentaires, vous devez vous assurer de renvoyer directement une `Response` comme `JSONResponse`, avec votre code HTTP et votre contenu.

## Réponse supplémentaire avec `model`

Vous pouvez ajouter à votre décorateur de *paramÚtre de chemin* un paramÚtre `responses`.

Il prend comme valeur un `dict` dont les clés sont des codes HTTP pour chaque réponse, comme `200`, et la valeur de ces clés sont d'autres `dict` avec des informations pour chacun d'eux.

Chacun de ces `dict` de réponse peut avoir une clé `model`, contenant un modÚle Pydantic, tout comme `response_model`.

**FastAPI** prendra ce modÚle, générera son schéma JSON et l'inclura au bon endroit dans OpenAPI.

Par exemple, pour déclarer une autre réponse avec un code HTTP `404` et un modÚle Pydantic `Message`, vous pouvez écrire :

```Python hl_lines="18 22"
{!../../../docs_src/additional_responses/tutorial001.py!}
```

!!! Remarque
Gardez Ă  l'esprit que vous devez renvoyer directement `JSONResponse`.

!!! Info
La clé `model` ne fait pas partie d'OpenAPI.

**FastAPI** prendra le modÚle Pydantic à partir de là, générera le `JSON Schema` et le placera au bon endroit.

Le bon endroit est :

* Dans la clé `content`, qui a pour valeur un autre objet JSON (`dict`) qui contient :
* Une clé avec le type de support, par ex. `application/json`, qui contient comme valeur un autre objet JSON, qui contient :
* Une clé `schema`, qui a pour valeur le schéma JSON du modÚle, voici le bon endroit.
* **FastAPI** ajoute ici une référence aux schémas JSON globaux à un autre endroit de votre OpenAPI au lieu de l'inclure directement. De cette façon, d'autres applications et clients peuvent utiliser ces schémas JSON directement, fournir de meilleurs outils de génération de code, etc.

Les réponses générées au format OpenAPI pour cette *opération de chemin* seront :

```JSON hl_lines="3-12"
{
"responses": {
"404": {
"description": "Additional Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Message"
}
}
}
},
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Item"
}
}
}
},
"422": {
"description": "Validation Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/HTTPValidationError"
}
}
}
}
}
}
```

Les schémas sont référencés à un autre endroit du modÚle OpenAPI :

```JSON hl_lines="4-16"
axel584 marked this conversation as resolved.
Show resolved Hide resolved
{
"components": {
"schemas": {
"Message": {
"title": "Message",
"required": [
"message"
],
"type": "object",
"properties": {
"message": {
"title": "Message",
"type": "string"
}
}
},
"Item": {
"title": "Item",
"required": [
"id",
"value"
],
"type": "object",
"properties": {
"id": {
"title": "Id",
"type": "string"
},
"value": {
"title": "Value",
"type": "string"
}
}
},
"ValidationError": {
"title": "ValidationError",
"required": [
"loc",
"msg",
"type"
],
"type": "object",
"properties": {
"loc": {
"title": "Location",
"type": "array",
"items": {
"type": "string"
}
},
"msg": {
"title": "Message",
"type": "string"
},
"type": {
"title": "Error Type",
"type": "string"
}
}
},
"HTTPValidationError": {
"title": "HTTPValidationError",
"type": "object",
"properties": {
"detail": {
"title": "Detail",
"type": "array",
"items": {
"$ref": "#/components/schemas/ValidationError"
}
}
}
}
}
}
}
```

## Types de médias supplémentaires pour la réponse principale

Vous pouvez utiliser ce mĂȘme paramĂštre `responses` pour ajouter diffĂ©rents types de mĂ©dias pour la mĂȘme rĂ©ponse principale.

Par exemple, vous pouvez ajouter un type de média supplémentaire `image/png`, en déclarant que votre *opération de chemin* peut renvoyer un objet JSON (avec le type de média `application/json`) ou une image PNG :

```Python hl_lines="19-24 28"
{!../../../docs_src/additional_responses/tutorial002.py!}
```

!!! Remarque
axel584 marked this conversation as resolved.
Show resolved Hide resolved
Notez que vous devez retourner l'image en utilisant directement un `FileResponse`.

!!! Info
À moins que vous ne spĂ©cifiiez explicitement un type de mĂ©dia diffĂ©rent dans votre paramĂštre `responses`, FastAPI supposera que la rĂ©ponse a le mĂȘme type de mĂ©dia que la classe de rĂ©ponse principale (par dĂ©faut `application/json`).

Mais si vous avez spécifié une classe de réponse personnalisée avec `None` comme type de média, FastAPI utilisera `application/json` pour toute réponse supplémentaire associée à un modÚle.

## Combinaison d'informations

Vous pouvez également combiner des informations de réponse provenant de plusieurs endroits, y compris les paramÚtres `response_model`, `status_code` et `responses`.

Vous pouvez dĂ©clarer un `response_model`, en utilisant le code HTTP par dĂ©faut `200` (ou un code personnalisĂ© si vous en avez besoin), puis dĂ©clarer des informations supplĂ©mentaires pour cette mĂȘme rĂ©ponse dans `responses`, directement dans le schĂ©ma OpenAPI.

**FastAPI** conservera les informations supplémentaires des `responses` et les combinera avec le schéma JSON de votre modÚle.

Par exemple, vous pouvez déclarer une réponse avec un code HTTP `404` qui utilise un modÚle Pydantic et a une `description` personnalisée.

Et une réponse avec un code HTTP `200` qui utilise votre `response_model`, mais inclut un `example` personnalisé :

```Python hl_lines="20-31"
{!../../../docs_src/additional_responses/tutorial003.py!}
```

Tout sera combiné et inclus dans votre OpenAPI, et affiché dans la documentation de l'API :

<img src="/img/tutorial/additional-responses/image01.png">

## Combinez les réponses prédéfinies et les réponses personnalisées

Vous voulez peut-ĂȘtre avoir des rĂ©ponses prĂ©dĂ©finies qui s'appliquent Ă  de nombreux *paramĂštre de chemin*, mais vous souhaitez les combiner avec des rĂ©ponses personnalisĂ©es nĂ©cessaires Ă  chaque *opĂ©ration de chemin*.

Dans ces cas, vous pouvez utiliser la technique Python "d'affection par décomposition" (appelé _unpacking_ en anglais) d'un `dict` avec `**dict_to_unpack` :

``` Python
axel584 marked this conversation as resolved.
Show resolved Hide resolved
old_dict = {
"old key": "old value",
"second old key": "second old value",
}
new_dict = {**old_dict, "new key": "new value"}
```

Ici, `new_dict` contiendra toutes les paires clé-valeur de `old_dict` plus la nouvelle paire clé-valeur :

``` Python
{
"old key": "old value",
"second old key": "second old value",
"new key": "new value",
}
```

Vous pouvez utiliser cette technique pour réutiliser certaines réponses prédéfinies dans vos *paramÚtres de chemin* et les combiner avec des réponses personnalisées supplémentaires.

Par exemple:

```Python hl_lines="13-17 26"
{!../../../docs_src/additional_responses/tutorial004.py!}
```

## Plus d'informations sur les réponses OpenAPI

Pour voir exactement ce que vous pouvez inclure dans les réponses, vous pouvez consulter ces sections dans la spécification OpenAPI :

* <a href="https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#responsesObject" class="external-link" target="_blank">Objet Responses de OpenAPI </a>, il inclut le `Response Object`.
* <a href="https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md#responseObject" class="external-link" target="_blank">Objet Response de OpenAPI </a>, vous pouvez inclure n'importe quoi directement dans chaque réponse à l'intérieur de votre paramÚtre `responses`. Y compris `description`, `headers`, `content` (à l'intérieur de cela, vous déclarez différents types de médias et schémas JSON) et `links`.
37 changes: 37 additions & 0 deletions docs/fr/docs/advanced/additional-status-codes.md
@@ -0,0 +1,37 @@
# Codes HTTP supplémentaires

Par défaut, **FastAPI** renverra les réponses à l'aide d'une structure de données `JSONResponse`, en plaçant la réponse de votre *chemin d'accÚs* à l'intérieur de cette `JSONResponse`.

Il utilisera le code HTTP par défaut ou celui que vous avez défini dans votre *chemin d'accÚs*.

## Codes HTTP supplémentaires

Si vous souhaitez renvoyer des codes HTTP supplémentaires en plus du code principal, vous pouvez le faire en renvoyant directement une `Response`, comme une `JSONResponse`, et en définissant directement le code HTTP supplémentaire.

Par exemple, disons que vous voulez avoir un *chemin d'accÚs* qui permet de mettre à jour les éléments et renvoie les codes HTTP 200 "OK" en cas de succÚs.

Mais vous voulez aussi qu'il accepte de nouveaux éléments. Et lorsque les éléments n'existaient pas auparavant, il les crée et renvoie un code HTTP de 201 "Créé".

Pour y parvenir, importez `JSONResponse` et renvoyez-y directement votre contenu, en définissant le `status_code` que vous souhaitez :

```Python hl_lines="4 25"
{!../../../docs_src/additional_status_codes/tutorial001.py!}
```

!!! Attention
Lorsque vous renvoyez une `Response` directement, comme dans l'exemple ci-dessus, elle sera renvoyée directement.

Elle ne sera pas sérialisée avec un modÚle.

Assurez-vous qu'il contient les données souhaitées et que les valeurs soient dans un format JSON valides (si vous utilisez une `JSONResponse`).

!!! note "DĂ©tails techniques"
Vous pouvez Ă©galement utiliser `from starlette.responses import JSONResponse`.

Pour plus de commoditĂ©s, **FastAPI** fournit les objets `starlette.responses` sous forme d'un alias accessible par `fastapi.responses`. Mais la plupart des rĂ©ponses disponibles proviennent directement de Starlette. Il en est de mĂȘme avec l'objet `statut`.

## Documents OpenAPI et API

Si vous renvoyez directement des codes HTTP et des réponses supplémentaires, ils ne seront pas inclus dans le schéma OpenAPI (la documentation de l'API), car FastAPI n'a aucun moyen de savoir à l'avance ce que vous allez renvoyer.

Mais vous pouvez documenter cela dans votre code, en utilisant : [Réponses supplémentaires dans OpenAPI](additional-responses.md){.internal-link target=_blank}.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Mais vous pouvez documenter cela dans votre code, en utilisant : [Réponses supplémentaires dans OpenAPI](additional-responses.md){.internal-link target=_blank}.
Mais vous pouvez documenter cela dans votre code, en utilisant : [Reponses supplémentaires](additional-responses.md){.internal-link target=_blank}.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't understand why you want to remove the "Ă©" in "RĂ©ponses"... and I prefer use the whole title which specify "dans OpenAPI"...

3 changes: 3 additions & 0 deletions docs/fr/mkdocs.yml
Expand Up @@ -67,6 +67,9 @@ nav:
- tutorial/query-params.md
- tutorial/body.md
- tutorial/background-tasks.md
- Guide utilisateur avancé:
- advanced/additional-status-codes.md
- advanced/additional-responses.md
- async.md
- DĂ©ploiement:
- deployment/index.md
Expand Down