11-4 Requête d'API
Il est maintenant temps de faire la requête!
Nous ne ferons pas cette requête directement dans la fonction ngOnInit
, mais plutôt dans une fonction dédiée qui sera appelée par ngOnInit
.
Nous modifierons cette façon de faire bientôt afin d'utiliser des services pour les appels d'API, mais commençons par nous familiariser avec une requête simple directement dans le composant.
Ajouter une fonction obtenirProjets()
Cette fonction sera responsable de faire un appel d'API Supabase.
export class ProjetsIndex implements OnInit{
projets: string[] = [
"Discreddit",
"Organisation du Lan Party",
"Organisation de la soirée jeu vidéo",
]
ngOnInit(): void {
console.log('Je suis initialisé!');
}
protected obtenirProjets(){
}
}
Préparer la requête
-
Premièrement, créons une variable
url
qui contiendra l'URL à contacter pour l'appel d'API.export class ProjetsIndex implements OnInit{
projets: string[] = [
"Discreddit",
"Organisation du Lan Party",
"Organisation de la soirée jeu vidéo",
]
ngOnInit(): void {
console.log('Je suis initialisé!');
}
protected obtenirProjets(){
const url = "https://zjywabthssmxcftqcyyo.supabase.co/rest/v1/projets"
}
}attentionVous devrez remplacer
zjywabthssmxcftqcyyo
par votre propre identifiant Supabase! -
Commencez à taper
axios
dans la fonction. Le terme apparaitra en rouge et viaAlt+Enter
vous pourrez ajouter la référence manquante. Vous pourriez aussi sélectionnerShow Context Actions
à l'aide d'un clic droit. -
Choisissez
Insert 'import axios from "axios"'
ouimport axios = required(axios)
.Cela ajoutera l'import de
axios
dans le haut du fichier.import {Component, OnInit} from '@angular/core';
import axios from "axios";attentionSi jamais l'import suggéré a importé en utilisant
require
:import axios = require('axios');
Remplacez simplement par:
import axios from 'axios';
-
Utiliser
axios.get
pour initier une requêteGET
src/app/features/projets/pages/projets-index.tsobtenirProjets(){
const url = "https://zjywabthssmxcftqcyyo.supabase.co/rest/v1/projets"
axios.get(url);
}infoLa librairie
axios
présente plusieurs fonctions, dont une pour chaque action HTTP:-
axios.get
-
axios.post
-
axios.put
-
axios.patch
-
axios.delete
-
...
Chaque appel prenant évidemment des paramètres parfois différents, dans le cas d'un
POST
par exemple où on enverrait des données avec la requête. -
async / await
Peut-être avez-vous remarqué que get
est surligné en jaune, indiquant que Promise returned from get is ignored
. Au fond, c'est que la fonction retourne une Promise
et donc que la requête est asynchrone.
Pour attendre le retour de façon asynchrone, on peut utiliser le mot clé await
avant l'appel d'API et nous assurer que notre fonction obtenirProjets()
est asynchrone à l'aide du mot clé async
.
protected async obtenirProjets(){
const url = "https://zjywabthssmxcftqcyyo.supabase.co/rest/v1/projets"
await axios.get(url);
}
Appeler obtenirProjets
dans ngOnInit()
Pour effectuer l'appel, on doit appeler la fonction obtenirProjets
qui est responsable de contacter l'API.
Comme il s'agit d'une fonction asynchrone (obtenirProjets
), on doit modifier légèrement la signature de ngOnInit()
afin que cette dernière soit elle-même asynchrone (async
).
export class ProjetsIndex implements OnInit{
projets: string[] = [
"Discreddit",
"Organisation du Lan Party",
"Organisation de la soirée jeu vidéo",
]
async ngOnInit(): Promise<void> {
await this.obtenirProjets();
}
protected async obtenirProjets(){
const url = "https://zjywabthssmxcftqcyyo.supabase.co/rest/v1/projets"
await axios.get(url);
}
}
Vérifier dans la console du navigateur
Vous pouvez accéder à l'application dans votre navigateur et ouvrir la console. Vous devriez avoir un message d'erreur 401
.
Un code d'erreur 401
nous indique:
Envoyer la clé d'API
Il nous manque évidemment la clé d'API!
Comme vous avez vu avec les requêtes Postman
, on envoie cette dans l'en-tête de la requête. Il faut donc une façon d'ajouter la clé à nos requêtes axios.
axios
accepte un second paramètre de requête, soit un objet de configuration. En effet, voici la signature de la fonction get
:
Axios.get<any, AxiosResponse<any, any>, any>(url: string, config?: AxiosRequestConfig<any> | undefined): Promise<AxiosResponse<any, any>>
Remarquez que le premier paramètre est url
et le second config
. Cet objet de configuration peut contenir une propriété headers
avec les valeurs à passer en en-tête.
Dans notre cas, l'objet de configuration doit ressembler à ceci, soit un un objet contenant headers
qui lui-même contient une propriété apiKey
:
{
headers: {
apiKey: 'VOTRE_CLE_API'
}
}
Ainsi, la requête axios
devient la suivante:
async obtenirProjets(){
const url = "https://zjywabthssmxcftqcyyo.supabase.co/rest/v1/projets"
await axios.get(url, {
headers: {
'apiKey': 'VOTRE_CLE_API'
}
});
}
N'oubliez pas de remplacer VOTRE_CLE_API
par votre clé d'API!
Vérifier la requête dans l'onglet Réseau
Si vous rechargez la page d'accueil /projets
dans votre navigateur, vous devriez voir (probablement la dernière dans le bas) une requête GET
vers supabase.com
avec une réponse contenant les projets!
Félicitations, vous venez de compléter votre première requête d'API à l'aide d'Angular! 🎉