Skip to content

[WIP] Traduction de cookbook/using-axios-to-consume-apis.md #166

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

Merged
merged 20 commits into from
Feb 18, 2019
Merged
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
a03d091
Debut traduction de using-axios-to-consume-apis
Vinetos Oct 6, 2018
13b0636
Update using-axios-to-consume-apis.md
Vinetos Oct 10, 2018
a33ee91
Update using-axios-to-consume-apis.md
Vinetos Nov 20, 2018
c53e9ca
Finish translation using-axios-to-consume-apis.md
Vinetos Jan 27, 2019
ac623b0
Update src/v2/cookbook/using-axios-to-consume-apis.md
Kocal Jan 30, 2019
3038e70
Update src/v2/cookbook/using-axios-to-consume-apis.md
darenju Jan 30, 2019
c534480
Update src/v2/cookbook/using-axios-to-consume-apis.md
Kocal Jan 30, 2019
7bf2949
Update src/v2/cookbook/using-axios-to-consume-apis.md
Kocal Jan 30, 2019
3e2f6ac
Update src/v2/cookbook/using-axios-to-consume-apis.md
Kocal Jan 30, 2019
e4f5d37
Update src/v2/cookbook/using-axios-to-consume-apis.md
Kocal Jan 30, 2019
79b76fa
Update src/v2/cookbook/using-axios-to-consume-apis.md
Kocal Jan 30, 2019
cb26842
Update src/v2/cookbook/using-axios-to-consume-apis.md
rspt Jan 30, 2019
b1cb978
Update src/v2/cookbook/using-axios-to-consume-apis.md
darenju Jan 30, 2019
99ad021
Update src/v2/cookbook/using-axios-to-consume-apis.md
rspt Jan 30, 2019
2d71ab9
Update src/v2/cookbook/using-axios-to-consume-apis.md
rspt Jan 30, 2019
a142016
Update src/v2/cookbook/using-axios-to-consume-apis.md
rspt Jan 30, 2019
97e1470
Update src/v2/cookbook/using-axios-to-consume-apis.md
rspt Jan 31, 2019
9e06484
Update using-axios-to-consume-apis.md
Vinetos Feb 3, 2019
7d519ac
Update src/v2/cookbook/using-axios-to-consume-apis.md
Vinetos Feb 18, 2019
6b45df9
Update src/v2/cookbook/using-axios-to-consume-apis.md
Vinetos Feb 18, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 31 additions & 32 deletions src/v2/cookbook/using-axios-to-consume-apis.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
---
title: Using Axios to Consume APIs (EN)
title: Utiliser Axios pour consommer des API
type: cookbook
order: 9
---

## Base Example
## Exemple simple
Lors de la création d'une application Web, il est fréquent que vous souhaitiez utiliser et afficher les données provenant d'une API. Il existe plusieurs manières de le faire, mais une approche très populaire consiste à utiliser [axios](https://github.com/axios/axios), un client HTTP basé sur les Promesses.</p>

<p>Cette page est en cours de traduction. Pour nous aider, vous pouvez participer sur <a href="https://github.com/vuejs-fr/vuejs.org" target="_blank">le dépôt GitHub dédié de Vuejs-FR</a>.</p><p>There are many times when building application for the web that you may want to consume and display data from an API. There are several ways to do so, but a very popular approach is to use [axios](https://github.com/axios/axios), a promise-based HTTP client.</p>
Dans cet exemple, nous allons utiliser l'[API CoinDesk](https://www.coindesk.com/api/) pour afficher les prix du Bitcoin qui sont mis à jour toutes les minutes. Premièrement, nous devons installer axios avec npm/yarn ou à partir d'un lien CDN.

In this exercise, we'll use the [CoinDesk API](https://www.coindesk.com/api/) to walk through displaying Bitcoin prices, updated every minute. First, we'd install axios with either npm/yarn or through a CDN link.

There are a number of ways we can request information from the API, but it's nice to first find out what the shape of the data looks like, in order to know what to display. In order to do so, we'll make a call to the API endpoint and output it so we can see it. We can see in the CoinDesk API documentation, that this call will be made to `https://api.coindesk.com/v1/bpi/currentprice.json`. So first, we'll create a data property that will eventually house our information, and we'll retrieve the data and assign it using the `mounted` lifecycle hook:
Il existe plusieurs manières d'interroger une API, mais il est préférable de d'abord connaitre la structure des données qu'elle renvoie afin de savoir ce qu'elle va afficher. Pour ce faire, nous allons appeler le point de terminaison de l'API et afficher le résultat afin que nous puissions connaître sa structure et son contenu. Nous pouvons voir dans la documentation de l'API de CoinDesk que l'appel doit être effectué à l'adresse `https://api.coindesk.com/v1/bpi/currentprice.json`. Nous allons donc commencer par créer une donnée qui gardera nos informations, puis nous récupérerons les données et les attribuerons à l'aide de l'étape `mounted` du cycle de vie :

```js
new Vue({
Expand All @@ -34,29 +33,29 @@ new Vue({
</div>
```

And what we get is this:
Nous obtenons ceci :

<p data-height="350" data-theme-id="32763" data-slug-hash="80043dfdb7b90f138f5585ade1a5286f" data-default-tab="result" data-user="Vue" data-embed-version="2" data-pen-title="First Step Axios and Vue" class="codepen">See the Pen <a href="https://codepen.io/team/Vue/pen/80043dfdb7b90f138f5585ade1a5286f/">First Step Axios and Vue</a> by Vue (<a href="https://codepen.io/Vue">@Vue</a>) on <a href="https://codepen.io">CodePen</a>.</p>
<p data-height="350" data-theme-id="32763" data-slug-hash="80043dfdb7b90f138f5585ade1a5286f" data-default-tab="result" data-user="Vue" data-embed-version="2" data-pen-title="Premiere étape Axios et Vue" class="codepen">Voir l'exemple <a href="https://codepen.io/team/Vue/pen/80043dfdb7b90f138f5585ade1a5286f/">Premiere étape Axios et Vue</a> par Vue (<a href="https://codepen.io/Vue">@Vue</a>) sur <a href="https://codepen.io">CodePen</a>.</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

Excellent! We've got some data. But it looks pretty messy right now so let's display it properly and add some error handling in case things aren't working as expected or it takes longer than we thought to get the information.
Parfait ! Nous avons des données. Mais cela semble assez désordonné pour le moment, alors affichons-les correctement et ajoutons un traitement d'erreur si les choses ne fonctionnent pas comme prévu, ou s'il faut plus de temps que nécessaire pour obtenir les informations.

## Real-World Example: Working with the Data
## Exemple concret : l'utilisation des données

### Displaying Data from an API
### Affichage des données d'une API

It's pretty typical that the information we'll need is within the response, and we'll have to traverse what we've just stored to access it properly. In our case, we can see that the price information we need lives in `response.data.bpi`. If we use this instead, our output is as follows:
Il est assez courant que les informations dont nous avons besoin se trouvent dans la réponse. Nous devons parcourir ce que nous venons de stocker pour y accéder correctement. Dans notre cas, nous pouvons voir que les informations de prix dont nous avons besoin sont stockées dans `response.data.bpi`. Si nous l'utilisons, notre sortie sera :

```js
axios
.get('https://api.coindesk.com/v1/bpi/currentprice.json')
.then(response => (this.info = response.data.bpi))
```

<p data-height="200" data-theme-id="32763" data-slug-hash="6100b10f1b4ac2961208643560ba7d11" data-default-tab="result" data-user="Vue" data-embed-version="2" data-pen-title="Second Step Axios and Vue" class="codepen">See the Pen <a href="https://codepen.io/team/Vue/pen/6100b10f1b4ac2961208643560ba7d11/">Second Step Axios and Vue</a> by Vue (<a href="https://codepen.io/Vue">@Vue</a>) on <a href="https://codepen.io">CodePen</a>.</p>
<p data-height="200" data-theme-id="32763" data-slug-hash="6100b10f1b4ac2961208643560ba7d11" data-default-tab="result" data-user="Vue" data-embed-version="2" data-pen-title="Deuxième étape Axios et Vue" class="codepen">Voir l'exemple <a href="https://codepen.io/team/Vue/pen/6100b10f1b4ac2961208643560ba7d11/">Premiere étape Axios et Vue</a> par Vue (<a href="https://codepen.io/Vue">@Vue</a>) sur <a href="https://codepen.io">CodePen</a>.</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

This is a lot easier for us to display, so we can now update our HTML to display only the information we need from the data we've received, and we'll create a [filter](../api/#Vue-filter) to make sure that the decimal is in the appropriate place as well.
C'est beaucoup plus facile à afficher ; nous pouvons donc mettre à jour notre code HTML pour n'afficher que les informations dont nous avons besoin à partir des données reçues. Pour ce faire, nous allons créer un [filtre](../api/#Vue-filter) pour nous assurer que la décimale se trouve également à la place appropriée.

```html
<div id="app">
Expand All @@ -81,18 +80,18 @@ filters: {
},
```

<p data-height="300" data-theme-id="32763" data-slug-hash="9d59319c09eaccfaf35d9e9f11990f0f" data-default-tab="result" data-user="Vue" data-embed-version="2" data-pen-title="Third Step Axios and Vue" class="codepen">See the Pen <a href="https://codepen.io/team/Vue/pen/9d59319c09eaccfaf35d9e9f11990f0f/">Third Step Axios and Vue</a> by Vue (<a href="https://codepen.io/Vue">@Vue</a>) on <a href="https://codepen.io">CodePen</a>.</p>
<p data-height="300" data-theme-id="32763" data-slug-hash="9d59319c09eaccfaf35d9e9f11990f0f" data-default-tab="result" data-user="Vue" data-embed-version="2" data-pen-title="Troisieme étape Axios et Vue" class="codepen">Voir l'exemple <a href="https://codepen.io/team/Vue/pen/9d59319c09eaccfaf35d9e9f11990f0f/">Troisieme étape Axios et Vue</a> par Vue (<a href="https://codepen.io/Vue">@Vue</a>) sur <a href="https://codepen.io">CodePen</a>.</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

### Dealing with Errors
### Travailler avec des erreurs

There are times when we might not get the data we need from the API. There are several reasons that our axios call might fail, including but not limited to:
Parfois, nous ne pouvons pas recevoir de données de l'API. Il peut y avoir de nombreuses raisons pour qu'un appel puisse échouer. Par exemple :

* The API is down.
* The request was made incorrectly.
* The API isn't giving us the information in the format that we anticipated.
* L'API est hors-service.
* La requête a mal été réalisée.
* L'API ne nous donne pas les informations dans le format attendu.

When making this request, we should be checking for just such circumstances, and giving ourselves information in every case so we know how to handle the problem. In an axios call, we'll do so by using `catch`.
Quand nous créons cette requête, nous devrions vérifier si de tels cas se produisent et nous informer pour traiter ce problème. Dans un appel axios, nous pouvons le faire en utilisant `catch`.

```js
axios
Expand All @@ -101,7 +100,7 @@ axios
.catch(error => console.log(error))
```

This will let us know if something failed during the API request, but what if the data is mangled or the API is down? Right now the user will just see nothing. We might want to build a loader for this case, and then tell the user if we're not able to get the data at all.
Cela nous permettra de savoir si quelque chose a échoué lors de la requête à l'API, mais que se passerait-il si les données sont endommagées ou si l'API est en panne ? Pour l'instant, l'utilisateur ne verra rien. Nous devrions peut-être créer un loader pour ce cas, puis informer l'utilisateur si nous ne pouvons pas obtenir les données.

```js
new Vue({
Expand Down Expand Up @@ -138,11 +137,11 @@ new Vue({
<h1>Bitcoin Price Index</h1>

<section v-if="errored">
<p>We're sorry, we're not able to retrieve this information at the moment, please try back later</p>
<p>Nous sommes désolés, nous ne sommes pas en mesure de récupérer ces informations pour le moment. Veuillez réessayer ultérieurement.</p>
</section>

<section v-else>
<div v-if="loading">Loading...</div>
<div v-if="loading">Chargement...</div>

<div
v-else
Expand All @@ -159,21 +158,21 @@ new Vue({
</div>
```

You can hit the rerun button on this pen to see the loading status briefly while we gather data from the API:
Vous pouvez appuyer sur le bouton de réexécution de cet exemple pour connaitre brièvement l'état du chargement pendant la collecte des données à partir de l'API :

<p data-height="300" data-theme-id="32763" data-slug-hash="6c01922c9af3883890fd7393e8147ec4" data-default-tab="result" data-user="Vue" data-embed-version="2" data-pen-title="Fourth Step Axios and Vue" class="codepen">See the Pen <a href="https://codepen.io/team/Vue/pen/6c01922c9af3883890fd7393e8147ec4/">Fourth Step Axios and Vue</a> by Vue (<a href="https://codepen.io/Vue">@Vue</a>) on <a href="https://codepen.io">CodePen</a>.</p>
<p data-height="300" data-theme-id="32763" data-slug-hash="6c01922c9af3883890fd7393e8147ec4" data-default-tab="result" data-user="Vue" data-embed-version="2" data-pen-title="Quatrième étape Axios et Vue" class="codepen">Voir l'exemple <a href="https://codepen.io/team/Vue/pen/6c01922c9af3883890fd7393e8147ec4/">Quatrième étape Axios et Vue</a> par Vue (<a href="https://codepen.io/Vue">@Vue</a>) sur <a href="https://codepen.io">CodePen</a>.</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

This can be even further improved with the use of components for different sections and more distinct error reporting, depending on the API you're using and the complexity of your application.
Cela peut encore être amélioré avec l'utilisation de composants pour différentes sections et un rapport d'erreurs plus distinct, en fonction de l'API utilisée et de la complexité de votre application.

## Alternative Patterns
## Modèles alternatifs

### Fetch API

The [Fetch API](https://developers.google.com/web/updates/2015/03/introduction-to-fetch) is a powerful native API for these types of requests. You may have heard that one of the benefits of the Fetch API is that you don't need to load an external resource in order to use it, which is true! Except... that it's not fully supported yet, so you will still need to use a polyfill. There are also some gotchas when working with this API, which is why many prefer to use axios for now. This may very well change in the future though.
L'[API Fetch](https://developers.google.com/web/updates/2015/03/introduction-to-fetch) est une API native puissante pour ces types de demandes. Vous avez peut-être entendu dire que l'un des avantages de l'API Fetch est qu'il n'est pas nécessaire de charger une ressource externe pour l'utiliser, ce qui est vrai ! Sauf que… ce n'est pas encore complètement supporté, vous aurez donc toujours besoin d'utiliser un polyfill. Il y a aussi quelques pièges à éviter avec cette API, raison pour laquelle beaucoup préfèrent utiliser axios pour le moment. Cela pourrait cependant très bien changer dans le futur.

If you're interested in using the Fetch API, there are some [very good articles](https://scotch.io/@bedakb/lets-build-type-ahead-component-with-vuejs-2-and-fetch-api) explaining how to do so.
Si vous êtes intéressé par l’utilisation de l’API Fetch vous trouverez de [très bons articles](https://scotch.io/@bedakb/lets-build-type-ahead-component-with-vuejs-2-and-fetch-api) expliquant comment faire.

## Wrapping Up
## Aller plus loin

There are many ways to work with Vue and axios beyond consuming and displaying an API. You can also communicate with Serverless Functions, post/edit/delete from an API where you have write access, and many other benefits. Due to the straightforward integration of these two libraries, it's become a very common choice for developers who need to integrate HTTP clients into their workflow.
Il existe de nombreuses façons de travailler avec Vue et axios au-delà de la consommation et de l'affichage d'une API. Vous pouvez également communiquer avec des Fonctions Sans Serveur, publier / éditer / supprimer à partir d'une API où vous disposez d'un accès en écriture, et de nombreux autres avantages. En raison de l’intégration directe de ces deux bibliothèques, c'est devenu un choix très courant pour les développeurs qui doivent intégrer des clients HTTP à leur workflow.