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
urlqui 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
zjywabthssmxcftqcyyopar votre propre identifiant Supabase! -
Commencez à taper
axiosdans la fonction. Le terme apparaitra en rouge et viaAlt+Entervous 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
axiosdans 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.getpour initier une requêteGETsrc/app/features/projets/pages/projets-index.tsobtenirProjets(){
const url = "https://zjywabthssmxcftqcyyo.supabase.co/rest/v1/projets"
axios.get(url);
}infoLa librairie
axiospré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
POSTpar 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! 🎉