Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Achref El Mouelhi
elmouelhi.achref@gmail.com
1 Introduction
3 Fonctionnement
4 Exemple
5 Fichiers environment
Angular
Le protocole HTTP
H I ©
Basé sur la notion requête - réponse appelée généralement (HTTP Request -
HTTP Response)
U EL
O
f E LM
Plusieurs types de requêtes = méthodes HTTP
GET
ch r e
POST
©A
DELETE
PUT
Angular
H I ©
Le Web et l’API REST sont basés sur le protocole HTTP
(architecture client/serveur)
U EL
RESTful est juste un adjectifL M O
qui désigne une API REST.
f E
re des méthodes comme get, post,
c h
L’API REST utilise donc
© A l’échange de données entre client et serveur (Un
delete... pour
client envoie une requête, et le serveur retourne une réponse)
Angular
Angular et les serveurs
H I ©
Angular possède un module, HttpModule (HttpClientModule depuis la
EL
version 5) facilitant la réalisation de requête HTTP vers n’importe quel serveur
via les classes suivantes :
O U
HttpClient
f E LM
HttpHeaders
ch r e
© A
HttpInterceptor
HttpRequest
...
Pour le coté serveur : on peut utiliser un serveur JSON qui recevra des requêtes
HTTP envoyées par Angular et retourner une réponse
Angular
json-server
Angular
json-server
Angular
Créons un fichier personnes.json qui va nous servir de base de
données et qui sera situé au même niveau que le dossier du notre
projet Angular8
{
"personnes": [
H I ©
EL
{
"nom": "wick",
O U
LM
"prenom": "john",
},
"id": 1
r e f E
ch
©A
{
"nom": "green",
"prenom": "bob",
"id": 2
}
]
}
Angular
Avant d’envoyer des requêtes HTTP au json-server
H I ©
Démarrer json-server sur le port 5555 en précisant le nom de
notre base de données
UEL
O
f E LM
ch r e
©A
Angular
Avant d’envoyer des requêtes HTTP au json-server
H I ©
Démarrer json-server sur le port 5555 en précisant le nom de
notre base de données
UEL
O
f E LM
Lancer le serveur
ch r e
©A
json-server -p 5555 personnes.json
Angular
Avant d’envoyer des requêtes HTTP au json-server
H I ©
Démarrer json-server sur le port 5555 en précisant le nom de
notre base de données
UEL
O
f E LM
Lancer le serveur
ch r e
©A
json-server -p 5555 personnes.json
Angular
http://localhost:5555/personnes
H I ©
U ELréaliser des
C’est l’URL qui sera utilisée par le client pour
requêtes HTTP
L MO
r e f
Si on copie cette adresse Eet qu’on la colle dans le navigateur, on
A chdonnées de notre base de données
obtient toutes les
©
Angular
x.component.html
{{ }}
[]
()
[( )]
H I ©
U EL
O
f E LM
ch r
Requêtee
©A
HTTP
Http
Client
Réponse
HTTP x.service.ts x.component.ts
Serveur
Application Angular
H & H: Research and Training 10 / 29
Fonctionnement
Angular
Explication
H I ©
La classe .component.ts peut récupérer des données dont la
EL
source est le template .component.html pour les passer au
U
O
LM
service ou récupérer des données dont la source est le service
r e f E
pour les passer au template .component.html.
En faisant une c
A h de dépendance du service .service.ts
injection
©
dans .component.ts, ce dernier peut l’utiliser pour persister ou
récupérer des données
En faisant une injection de dépendance de la classe HttpClient
dans .service.ts, ce dernier peut effectuer des requêtes
HTTP en précisant chaque fois la méthode et l’URL.
Angular
Considérons le service personne.service.ts
import { Injectable } from ’@angular/core’;
import { Personne } from ’../interfaces/personne’;
@Injectable({
providedIn: ’root’
H I ©
})
UEL
export class PersonneService {
O
constructor() {
f E LM
url = ’http://localhost:5555/personnes/’;
ch r e
©A
}
getAll(){
}
addPerson(p: Personne){
}
}
Angular
Dans le constructeur de la classe PersonneComponent, on injecte le service
PersonneService
H I ©
EL
@Component({
selector: ’app-personne’,
templateUrl: ’./personne.component.html’,
O U
})
styleUrls: [’./personne.component.css’]
f E LM
r e
export class PersonneComponent implements OnInit {
ch
©A
personne: Personne = {};
personnes: Array <Personne> = [];
ngOnInit() {
this.personnes = this.personneService.getAll();
}
}
Angular
Angular
Commençons par injecter le service HttpClient dans personne.service.ts
import { Injectable } from ’@angular/core’;
import { HttpClient } from ’@angular/common/http’;
import { Personne } from ’../interfaces/personne’;
@Injectable({
providedIn: ’root’
H I ©
})
export class PersonneService {
U EL
O
E LM
url = ’http://localhost:5555/personnes/’;
f
ch r e
constructor(private http: HttpClient) {
}
getAll(){
©A
}
addPerson(p: Personne){
}
}
@NgModule({
H I ©
EL
declarations: [
AppComponent,
O U
LM
AdresseComponent,
PersonneComponent,
FormulaireComponent
r e f E
ch
],
©A
imports: [
BrowserModule,
FormsModule,
HttpClientModule
],
providers: [PersonneService],
bootstrap: [AppComponent]
})
export class AppModule { }
Angular
Faisons une première requête HTTP pour récupérer la liste des personnes
import { Injectable } from ’@angular/core’;
import { HttpClient } from ’@angular/common/http’;
import { Personne } from ’../interfaces/personne’;
@Injectable({
providedIn: ’root’
H I ©
})
export class PersonneService {
U EL
O
E LM
url:string= "http://localhost:5555/personnes/";
f
ch r e
constructor(private http: HttpClient) {
} ©A
getAll(): Observable<Array<Personne>> {
return this.http.get<Array<Personne>>(this.url);
}
addPerson(p: Personne) {
}
}
HLa mResearch
& H: éthode and
getAll()
Training retourne un Observable. 17 / 29
Exemple
@Component({
selector: ’app-personne’,
templateUrl: ’./personne.component.html’,
styleUrls: [’./personne.component.css’]
H I ©
})
UEL
export class PersonneComponent implements OnInit {
O
LM
personne: Personne = {};
personnes: Array <Personne> = [];
r e f E
ch
constructor(private personneService: PersonneService) { }
©A
ngOnInit(): void {
this.personneService.getAll().subscribe(res => {
this.personnes = res;
});
}
}
LM
required #prenom="ngModel">
</div>
r e f E
<div [hidden]="prenom.valid || prenom.pristine">
ch
Le prénom est obligatoire
</div>
<div> ©A
<button [disabled]=!monForm.valid>
ajouter
</button>
</div>
</form>
<!-- garder la partie permettant d’afficher les personnes -->
Angular
Angular
Préparons la requête HTTP permettant d’ajouter une personne
@Injectable({
H I ©
EL
providedIn: ’root’
})
export class PersonneService {
O U
f E LM
url = ’http://localhost:5555/personnes/’;
ch r e
©A
constructor(private http: HttpClient) { }
getAll(): Observable<Array<Personne>> {
return this.http.get<Array<Personne>>(this.url);
}
addPerson(p: Personne): Observable<Personne> {
return this.http.post(this.url, p);
}
}
@Component({
selector: ’app-personne’,
templateUrl: ’./personne.component.html’,
styleUrls: [’./personne.component.css’]
H I ©
EL
})
f E LM
constructor(private personneService: PersonneService) { }
ngOnInit() {
ch r e
©A
this.personneService.getAll().subscribe(res => {
this.personnes = res;
});
}
ajouterPersonne() {
this.personneService.addPerson(this.personne).subscribe(res => {
console.log(res);
});
}
}
H & H: Research and Training 22 / 29
Exemple
Angular
Si on essaye d’ajouter une personne
H
Car on ne met pas à jour la liste des personnesI ©
U EL
O
f E LM
ch r e
©A
Angular
Si on essaye d’ajouter une personne
H
Car on ne met pas à jour la liste des personnesI ©
U EL
O
Deux solutions possibles
f E LM
ch r e
Soit on ajoute la personne au tableau personnes de la classe
©A
personne.component.ts lorsqu’on l’ajoute dans notre fichier
personnes.json
Soit on refait appel à la méthode getAll() de notre service
personne.service.ts dans personne.component.ts
lorsqu’on l’ajoute dans notre fichier personnes.json pour
mettre à jour le tableau personnes
H & H: Research and Training 23 / 29
Exemple
OU
constructor(private personneService: PersonneService) { }
ngOnInit() {
L M
f E
this.personneService.getAll().subscribe(res => {
r e
ch
this.personnes = res;
}
});
© A
ajouterPersonne() {
this.personneService.addPerson(this.personne).subscribe(res => {
this.personneService.getAll().subscribe(result => {
this.personnes = result;
});
});
}
}
H & H: Research and Training 24 / 29
Exemple
Angular
H I ©
Question : que contient la variable res de l’exemple précédent
UEL
O
Elle contient l’objet qu’on a ajouté dans la base de données avec une
f E LM
valeur attribuée à id (et qu’on peut utiliser pour faire d’autres
opérations)
ch r e
©A
Angular
Exercice
H I ©
U EL
Ajouter du code HTML dans personne.component.html, des
M
méthodes dans personne.component.ts O et des méthodes dans
personne.service.ts (avec f L
Eles méthodes HTTP delete et put)
r e
ch de supprimer des personnes.
pour permettre de modifier et
© A
Angular
Le répertoire environments
H I ©
contient deux fichiers permettant de définir les variables
d’environnement d’une application Angular
UEL
O
f E LM
environment.ts pour le mode développement
r e
environment.prod.ts pour le mode production
ch
©A
Angular remplacera automatiquement le premier fichier par le
deuxième fichier à chaque fois exécution de ng build --prod.
Angular
Angular
@Injectable({
providedIn: ’root’
})
H I ©
EL
export class PersonneService {
url: string;
O U
f E
constructor(private http: HttpClient) { LM
ch r e
const APIEndpoint = environment.APIEndpoint;
©A
this.url = APIEndpoint + ’personnes/’;
}
getAll() {
return this.http.get<Array<Personne>>(this.url);
}
addPerson(p: Personne) {
return this.http.post(this.url, p);
}
}
H & H: Research and Training 29 / 29