web-dev-qa-db-fra.com

REST API - Utilisez l'en-tête HTTP "Accept: application/json"

Quand je fais une demande, je reçois une réponse en XML, mais ce dont j'ai besoin, c'est JSON. Dans la doc, il est indiqué pour obtenir un JSON en retour: Utilisez l'en-tête HTTP Accept: application/json.

Où puis-je trouver l'en-tête HTTP dans lequel insérer Accept: application/json?

Je suppose que ce n'est pas supposé être à l'intérieur de la demande d'URL, qui ressemble à:

http://localhost:8080/otp/routers/default/plan?fromPlace=52.5895,13.2836&toPlace=52.5461,13.3588&date=2017/04/04&time=12:00:00
18
obrob

Vous avez bien deviné, les en-têtes HTTP ne font pas partie de l'URL.

Et lorsque vous tapez une URL dans le navigateur, la requête sera émise avec des en-têtes standard. Quoi qu'il en soit REST, les API ne sont pas conçues pour être consommées en tapant le noeud final dans la barre d'adresse d'un navigateur.

Le scénario le plus courant est que votre serveur utilise une Api REST tierce.

Pour ce faire, votre code côté serveur forge une demande GET (/ PUT/POST/DELETE) appropriée pointant vers un paramètre de noeud final (URL) donné (si nécessaire, comme votre cas), en-têtes (peut-être) envoyer des données (comme cela se produit généralement dans une demande POST par exemple).

Le code permettant de falsifier la demande, de l’envoyer et enfin de récupérer la réponse dépend de la langue de votre serveur.

Si vous voulez tester un REST Api, vous pouvez utiliser l'outil curl à partir de la ligne de commande.

curl fait une demande et affiche la réponse sur stdout (sauf instruction contraire).

Dans votre cas, la demande de test serait émise comme ceci:

$curl -H "Accept: application/json" 'http://localhost:8080/otp/routers/default/plan?fromPlace=52.5895,13.2836&toPlace=52.5461,13.3588&date=2017/04/04&time=12:00:00'

La directive H ou --header définit un en-tête et sa valeur.

34
Paolo

Voici un site pratique pour tester vos en-têtes . Vous pouvez voir les en-têtes de votre navigateur et utiliser cURL pour renvoyer les en-têtes que vous envoyez.

Par exemple, vous pouvez valider la négociation de contenu comme ceci.

Cet en-tête Accept préfère le texte brut et renvoie donc dans ce format: -

$ curl -H "Accept: application/json;q=0.9,text/plain" http://gethttp.info/Accept
application/json;q=0.9,text/plain

Alors que celui-ci préfère JSON et revient donc dans ce format: -

$ curl -H "Accept: application/json,text/*;q=0.99" http://gethttp.info/Accept
{
   "Accept": "application/json,text/*;q=0.99"
}
0
Echelon