Agilité, Développement Java, Nouvelles technologies et plus…
  • rss
  • Accueil
  • Management
  • Programmation agile
  • Technologie
  • Linux
  • Evénement
  • App Android
  • Contact
  • A propos de l'auteur
  • English
  • Francais

API, REST, JSON, XML, HTTP, URI… Vous parlez quelle langue en fait?

Fabian Piau | lundi 23 juin 2014 - 18:07
  • Imprimer
  • Twitter
  • LinkedIn
  • Facebook
  • Pocket

 English version available

Webservices

REST (REpresentational State Transfer) est un standard utilisé pour l’élaboration de webservices. Un service web comme son nom l’indique rend accessible un service via des technologies web. Autrement dit, le système appelant demande un service au système appelé via le web qui en retour lui fournit une réponse, celle-ci peut être négative si l’appelé ne veut ou ne peut pas honorer le service demandé. Ce principe d’architecture permet à des systèmes de communiquer entre eux. L’intérêt est encore plus évident pour des systèmes hétérogènes qui utilisent des technologies différentes les rendant incompatibles (en communication « directe »).


Un standard qui utilise des… standards

Avec REST, la communication se base sur des technologies Web et plus exactement sur le protocole HTTP (Hypertext Transfer Protocol) et les URI utilisés par le Web. Les messages sont transmis dans un format standardisé. Pour l’intégration des réponses, on utilise généralement le format JSON (JavaScript Object Notation), plus léger et moins verbeux que le XML (eXtensible Markup Language), mais ce dernier peut bien sûr être utilisé.

A titre illustratif, voici la représentation (volontairement simplifiée) d’un trajet en train:

En JSON:

{
	"trainNum": 123456789,
	"departure": {
		"station": "Bruxelles-Central",
		"time": "07:28"
	},
	"arrival": {
		"station": "Liège-Guillemins",
		"time": "08:25"
	}
}

Et l’équivalent en XML:

<trip>
	<trainNum>123456789</trainNum>
	<departure>
		<station>Bruxelles-Central</station>
		<time>07:28</time>
	</departure>
	<arrival>
		<station>Liège-Guillemins</station>
		<time>08:25</time>
	</arrival>
</trip>

L’interprétation des données est très facile tant ces formats de représentation sont simples à lire. La complexité est bien souvent liée à la donnée elle-même. Le fait de parler de trajets en train ne pose ici pas de difficultés.

A l’heure d’aujourd’hui, les webservice de type REST se démocratisent rapidement, cela pour plusieurs raisons:

  • La simplicité évidente
  • L’utilisation du protocole HTTP dont les qualités ne sont plus à démontrer. Le protocole actuel est en version 1.1, datant de 1999 (avant même IE6). En informatique, on peut dire que c’est très vieux…
  • Les systèmes sont de plus en plus modulaires, le besoin d’interaction et de communication ne cesse de grandir.


Et dans la « vraie » vie alors? C’est utile REST et les webservices?

Eh oui! Vous l’utilisez même peut-être tous les jours sans y prêter attention. Par exemple, le fait que vous vous connectez à une application via votre compte Facebook implique l’appel à un webservice. L’application tierce interroge Facebook pour savoir si vous l’avez autorisé ou non à accéder à vos informations (adresse email, nom, liste d’amis ou autres), le cas échéant, elle fournit ces informations à l’application. Cet échange vous permet alors de vous authentifier à l’application tierce. Un tel mécanisme d’authentification/création de compte est de plus en plus utilisé, car:

  • Beaucoup de personnes sont sur les réseaux sociaux (Twitter, Facebook, Google+)
  • Cela évite d’avoir à créer un nouveau compte (et donc de fournir un énième mot de passe).

Par contre, il devient important de bien sécuriser son compte social, car si celui-ci est piraté, tous vos comptes associés deviennent vulnérables. A ce propos, n’hésitez pas à lire ou relire l’article « Quelques règles essentielles pour éviter de se faire pirater ses comptes ».


Techniquement, comment cela se passe-t-il?

L’appel à un webservice se fait via un appel HTTP standard et on reçoit une réponse tout aussi standard. Au niveau de la requête (demande de service), cela peut être un GET (pour récupérer des données en lecture seule), un POST (pour soumettre des données dans le but d’une modification), la liste complète des verbes HTTP est ici. La réponse dépendra de la requête et des données fournies, cela peut être la fameuse réponse 404 pour indiquer que le contenu est introuvable, un code 403 dans le cas où vous n’avez pas les droits d’accès/modification nécessaires, vous trouverez la liste complète des codes de retour ici. Bien évidemment, il ne faut pas oublier le code 200 qui indique que tout s’est bien passé (statut OK), avec potentiellement une réponse au format XML/JSON.

La mise en place d’un webservice doit suivre des bonnes pratiques. Voici des exemples de ce qu’il ne faut pas faire:

  • Utilisation d’une requête de type POST pour récupérer des données alors qu’un GET aurait été plus approprié (car on ne modifie pas l’état des données)
  • Renvoi d’une valeur vide (null) avec un code 200 alors que les codes 204 ou 404 sont justement prévus pour cela.

Aussi, il est très important que tous les appels soient idempotents, c’est à dire, dans le cas où on envoie plusieurs fois la même requête, la réponse doit être consistante. Par exemple :

  • Je fais un POST pour modifier des données, je reçois un retour 200 comme quoi la donnée a été modifiée
  • Si je refais le même POST, je dois recevoir un code 304 comme quoi la donnée n’a pas été modifiée.

Cela ne doit jamais poser de problème de faire plusieurs fois un même appel, il faut veiller à ce que cela soit géré par le système et qu’il n’y ait pas d’effet de bord.


Parlons API

Jusqu’à maintenant, nous avons vu que les webservices permettent à des systèmes existants de communiquer entre eux, mais ce n’est pas le seul cas d’utilisation. Les développeurs peuvent aussi s’appuyer sur des webservices mis à leur disposition pour développer de nouvelles fonctionnalités ou même une application tierce. Dans ce cas, on parle d’API: Application Programming Interface (Interface de programmation).

Pour continuer sur l’exemple des réseaux sociaux, prenons l’API de Twitter. Twitter met à disposition un ensemble de méthodes basées sur REST qui permettent de récupérer et manipuler les tweets. Il y a beaucoup de services disponibles, vous pouvez consulter la liste complète des webservices Twitter ici.

Utilisons un webservice de Twitter qui se base sur un GET. Les requêtes de type GET sont les plus simples à tester, car un simple clic du navigateur permet de créer et envoyer la requête. L’URL suivante permet de faire un GET pour obtenir la liste des tweets français qui concerne la coupe du monde de cette année.

  • https://api.twitter.com/1.1/search/tweets.json?q=worldcup2014&lang=fr

En fait, vous verrez que la réponse ne contient aucun tweets et contient un message d’erreur. Il faut aussi ajouter les informations d’authentifications à la requête, le simple clic finalement ne suffit pas. En effet, les API sont naturellement protégées et demandent d’être enregistré avant de pouvoir être utilisées. Bref, vous avez compris le principe et aussi reçu une réponse en JSON de la part de Twitter (même si c’est un refus…).

Nous avons principalement parlé de l’API de Twitter, mais il y a des milliers de webservice et API disponibles. L’API de Google Maps permet au dévelopeur d’intégrer des cartes personnalisées, cette ouverture est sans doute un des ingrédients qui ont permis un tel succès. En effet, beaucoup d’applications et de sites internet se basent sur les données cartographiques de Google pour proposer de nouveaux services, à noter aussi qu’un véritable business plan est proposé par la firme.

Enfin, si vous êtes curieux, vous pouvez faire un tour sur ProgrammableWeb, un site collaboratif qui référence beaucoup d’API.

Articles similaires

people-linkedFaire du REST social avec HATEOAS URL, URI, URNLa signification d’URL, URI et URN swaggerSwagger, la documentation API automatisée devoxxDevoxx UK 2018 – Jour 2
Commentaires
Pas de Commentaires »
Catégories
Programmation agile
Tags
api, http, json, rest, uri, url, urn, webservice, xml
Flux rss des commentaires Flux rss des commentaires
Page 1 sur 11
Télécharger l'app CarmaBlog

Flux RSS

  • Flux RSS RSS - Articles
  • Flux RSS RSS - Commentaires

Articles les plus vus

  • Changer la langue de Firefox - 115 579 vues
  • Réaliser un sondage en ligne avec Google Forms / Drive / Docs - 63 166 vues
  • FAQ – Sondage en ligne avec Google Forms / Drive / Docs - 52 403 vues
  • Personnaliser Gnome 3 (Shell) - 30 017 vues
  • La signification d’URL, URI et URN - 17 251 vues
  • Java EE & CDI vs. Spring - 15 442 vues
  • Open Street Map, une meilleure carte que Google Maps? - 14 648 vues
  • Comparaison NoSQL: Couchbase et MongoDB - 14 082 vues
  • Firefox Nightly, Aurora, Beta, Desktop, Mobile, ESR & Co. - 13 087 vues
  • API, REST, JSON, XML, HTTP, URI… Vous parlez quelle langue en fait? - 12 718 vues

Commentaires récents

  • Pauline sur FAQ – Sondage en ligne avec Google Forms / Drive / DocsMerci Fabian, mais le but étant que nos clients pu…
  • Fabian Piau sur FAQ – Sondage en ligne avec Google Forms / Drive / DocsProbablement mais ces options sont en général paya…
  • Pauline sur FAQ – Sondage en ligne avec Google Forms / Drive / DocsBonjour Fabian, Merci de votre retour, oui j'avais…
  • Fabian Piau sur FAQ – Sondage en ligne avec Google Forms / Drive / DocsBonjour Pauline, ce n'est pas possible de créer un…
  • Pauline sur FAQ – Sondage en ligne avec Google Forms / Drive / DocsBonjour, Je suis en train de créer un Google Forms…

Articles récents

  • Comment écrire un article de blog? En tout cas à ma façon! - Il y a 3 mois et 2 semaines
  • Attaques de robots: vous n’êtes pas seul… - Il y a 1 an et 11 mois
  • Flagger – Monitorer vos déploiements Canary avec Grafana - Il y a 2 ans et 8 mois
  • Flagger – Déploiements Canary sur Kubernetes - Il y a 2 ans et 10 mois
  • Flagger – Premiers pas avec Istio et Kubernetes - Il y a 2 ans et 10 mois
  • CoderDojo Expedia à Londres - Il y a 3 ans et 7 mois
  • Etre bénévole à Devoxx4Kids - Il y a 3 ans et 10 mois
  • Une migration Java 11 réussie - Il y a 4 ans et 2 mois
  • Conseils pour sécuriser votre site WordPress - Il y a 4 ans et 5 mois
  • Devoxx UK 2018 – Jour 2 - Il y a 4 ans et 9 mois
  • Devoxx UK 2018 – Jour 1 - Il y a 4 ans et 9 mois
  • Wise, Revolut et Monzo, une petite révolution dans le monde des expatriés et voyageurs - Il y a 5 ans et 1 mois
  • Autocomplétion pour Git - Il y a 5 ans et 10 mois
  • Swagger, la documentation API automatisée - Il y a 6 ans et 2 semaines
  • Architecture Microservices – Les bonnes pratiques - Il y a 6 ans et 5 mois
Offre moi un café

Langue

  • Français
  • English

Suivez-moi!

Suivez-moi sur Linkedin
Suivez-moi sur Twitter
Suivez-moi sur Stackoverflow
Suivez-moi sur Github
Suivez-moi sur Rss
Link to my Contact

Abonnement email

Saisissez votre adresse email pour être informé des nouveaux articles.

Étiquettes

.net agile agilité android bash blog bonnes pratiques cache cloud conférence css devoxx docker développeur eclipse extreme programming firefox flagger google helm hibernate informatique intégration continue istio java jug kubernetes londres mobilité informatique métier outil panorama partage performance plugin programmeur script société spring sécurité tdd test ubuntu windows wordpress

Liens

  • Blog Ippon Technologies
  • Blog Publicis Sapient
  • Blog Zenika
  • Classpert
  • CommitStrip
  • Coursera
  • Le Touilleur Express
  • Les Cast Codeurs Podcast
  • OCTO talks !
  • The Twelve-Factor App

Catégories

  • Evénement (15)
  • Linux (3)
  • Management (8)
  • Programmation agile (29)
  • Technologie (45)

Archives

  • décembre 2022 (1)
  • avril 2021 (1)
  • juin 2020 (1)
  • mai 2020 (2)
  • juillet 2019 (1)
  • mai 2019 (1)
  • décembre 2018 (1)
  • octobre 2018 (1)
  • juin 2018 (1)
  • mai 2018 (1)
  • janvier 2018 (1)
  • mai 2017 (1)
  • mars 2017 (1)
  • octobre 2016 (1)
  • avril 2016 (2)
  • mars 2016 (1)
  • novembre 2015 (1)
  • mai 2015 (1)
  • février 2015 (1)
  • décembre 2014 (1)
  • novembre 2014 (1)
  • septembre 2014 (2)
  • août 2014 (1)
  • juillet 2014 (2)
  • juin 2014 (1)
  • avril 2014 (1)
  • mars 2014 (1)
  • février 2014 (2)
  • janvier 2014 (1)
  • décembre 2013 (1)
  • novembre 2013 (1)
  • octobre 2013 (3)
  • septembre 2013 (5)
  • juillet 2013 (1)
  • juin 2013 (1)
  • mai 2013 (1)
  • avril 2013 (1)
  • mars 2013 (2)
  • février 2013 (1)
  • janvier 2013 (2)
  • décembre 2012 (2)
  • octobre 2012 (1)
  • septembre 2012 (1)
  • juillet 2012 (1)
  • mai 2012 (1)
  • avril 2012 (1)
  • mars 2012 (1)
  • février 2012 (1)
  • janvier 2012 (2)
  • décembre 2011 (1)
  • novembre 2011 (2)
  • octobre 2011 (2)
  • septembre 2011 (1)
  • juillet 2011 (1)
  • juin 2011 (2)
  • avril 2011 (1)
  • mars 2011 (1)
  • février 2011 (1)
  • janvier 2011 (2)
  • novembre 2010 (2)
  • septembre 2010 (1)
  • août 2010 (1)
  • juillet 2010 (1)
  • juin 2010 (1)
  • mai 2010 (1)
  • avril 2010 (1)
  • mars 2010 (1)
  • février 2010 (1)
  • décembre 2009 (1)
  • novembre 2009 (1)
  • octobre 2009 (2)
  • septembre 2009 (2)
  • août 2009 (3)
  • juillet 2009 (1)
  • juin 2009 (2)
Suivez-moi sur Twitter
Suivez-moi sur Linkedin
Suivez-moi sur Stackoverflow
Suivez-moi sur Rss
Link to my Contact
Suivez-moi sur Github
 
Fabian Piau | © 2009 - 2023
Tous droits réservés | Haut ↑