J'essaie de parler à une API un peu RESTful à partir d'un frontal Angular 2.
Pour retirer un élément d'une collection, j'ai besoin d'envoyer d'autres données en plus de l'identifiant unique retiré (qui peut être ajouté à l'url), à savoir un jeton d'authentification, des informations sur la collection et des données auxiliaires.
La méthode la plus simple que j'ai trouvée consiste à placer le jeton d'authentification dans les en-têtes de la demande, et les autres données dans le corps de la demande.
Cependant, le module Http d'Angular 2 n'approuve pas vraiment une requête DELETE avec un corps, et en essayant de faire cette requête
let headers= new Headers();
headers.append('access-token', token);
let body= JSON.stringify({
target: targetId,
subset: "fruits",
reason: "rotten"
});
let options= new RequestOptions({headers:headers});
this.http.delete('http://testAPI:3000/stuff', body,options).subscribe((ok)=>{console.log(ok)}); <------line 67
donne cette erreur
app/services/test.service.ts(67,4): error TS2346: Supplied parameters do not match any signature of call target.
Est-ce que je fais quelque chose de mal au niveau de la syntaxe ? Je suis presque sûr qu'un corps DELETE est pris en charge par la RFC.
Y a-t-il de meilleures façons d'envoyer ces données ?
Ou est-ce que je dois juste le mettre dans les en-têtes et l'appeler un jour ?
Nous vous remercions de bien vouloir nous éclairer sur cette énigme.
1 votes
Utiliser POST et renommer le libellé de delete en findAndDelete pour donner du sens.
0 votes
@YOU Oui, je peux, mais ne devrais-je pas essayer de distinguer les actions destructives des actions non destructives au niveau du type de demande ?
0 votes
Alors vous devrez le mettre dans la querystring, mais normalement vous mettez l'id de ce que vous voulez supprimer dans l'url, et le porteur d'authentification dans le header ajax pour envoyer la demande de suppression.
0 votes
Après avoir passé quelques heures à chercher une solution et reçu de nombreuses erreurs, j'ai finalement utilisé la méthode POST et maintenant tout fonctionne.