{{tag>dev web api rest}} ====== Initiez-vous au fonctionnement des API ====== Notes et transcriptions du cours "[[000_start|Adoptez les API REST pour vos projets web]]" disponible sur la plateforme [[https://openclassrooms.com|Openclassrooms]] ===== Découvrez ce qu’est une API ===== C’est dimanche. Vous vous réveillez tard, et même si vous savez que vous devriez vous lever, vous voulez juste rester enroulé bien au chaud dans votre couette et vous vous dites qu’en ce mois de février, partir profiter de la douceur du Portugal ne serait pas une mauvaise idée. Alors, vous ouvrez une application de comparateur de vols et voilà ! ✨Vous trouvez plusieurs offres de différentes compagnies aériennes pour Lisbonne ! Bon, l’avion, ce n’est pas très écolo et entre nous les horaires ne sont pas top, alors vous tentez le train. Vous ouvrez une application pour réserver un billet de train et pareil ! Vous trouvez plusieurs offres de trains pour Lisbonne en passant par l’Espagne. Et tout ça sans avoir à aller chercher l’information sur le site de chaque compagnie ferroviaire ou aérienne. Pas mal, non ? Vous avez l’habitude de voir toutes ces données défiler sans arrêt sous vos yeux comme par magie, que ce soit sur les réseaux sociaux ou les applications de comparatifs en tout genre. De votre point de vue, c’est assez simple : les informations arrivent au fur et à mesure sans effort ; sauf qu’en coulisse, c’est autre chose ! En effet, un gros travail est effectué pour rendre cela possible et pour que cela fonctionne, il nous faut l’un des outils les plus importants : une API. API par ci, API par là, OK OK, mais que signifie API, au juste ? 🤔 **API** est une abréviation et signifie **A**pplication **P**rogramming **I**nterface (ou interface de programmation d’application, en français). Pour faire simple : c’est un moyen de communication entre deux logiciels, que ce soit entre différents composants d’une application ou entre deux applications différentes. OK OK OK... mais du coup, quel est le lien entre une API et le fait de scroller par exemple Instagram non stop jusque 2 h du matin, ou comparer des vols pour Lisbonne ? 🤔 ===== Découvrez le fonctionnement des API ===== Eh bien, pour répondre à cette question, vous devez connaître un peu plus le fonctionnement d’une API. Mais avant, revoyons ensemble les bases d’une communication serveur et client. Prenons l’exemple d'Air France, une compagne aérienne française. Quelque part dans le monde, les serveurs d'Air France ont accès à toutes les données que vous voulez voir pour un trajet Paris-Lisbonne : les différents avions, les tarifs, les statuts des vols, etc. Pour que vous puissiez y avoir accès, votre navigateur (que l’on appelle le **client**) doit recevoir ces informations de quelqu’un. Ce quelqu’un, c’est le **serveur**. L’application doit avoir une conversation avec le serveur. {{schema_com_client_serveur.png|Un échange typique entre client et serveur}} Cela ressemble à ça : * Client : « Salut serveur, est-ce que je pourrais avoir un avion pour Lisbonne le 10 décembre ?» 🤔 * Serveur : « Voilà, tous les transports disponibles vers Lisbonne le 10 décembre! » 🎉 Ou alors, si le serveur ne parvient pas à trouver les données, il pourrait répondre comme ceci : * Serveur : « Désolé, en fait il n’y a pas de vols disponibles le 10 décembre. » 🙁 C’est ce qu’on appelle la communication entre client et serveur : le client formule une requête (ou une demande) pour obtenir une information et le serveur envoie une réponse contenant les données demandées si cela est possible. Et du coup, l’API, elle se place où, dans ce schéma ? Et le rapport avec Air France ? En web, un service web et une API sont tous les deux des moyens de communication. Un service web standard facilite seulement la communication entre deux machines via un réseau. Une API facilite l’interaction entre deux applications différentes afin qu’elles puissent communiquer entre elles : elle sert d’intermédiaire. Le client va demander à l’API une information, celle-ci va aller chercher cette information dans la base de données puis la renvoyer au client dans un second temps. {{schema_web_API.png|Un échange entre le client, l'API et la base de données}} Les API permettent la communication entre de nombreux composants différents de votre application, mais aussi entre des composants de votre application et d’autres développeurs. Elles agissent ainsi comme un intermédiaire qui transmet des messages à travers un système de requêtes et de réponses. Reprenons notre exemple avec Air France. ✈️ On crée une application de comparateur de vols que l’on va l’appeler VolScanner. Celle-ci ne peut pas accéder directement aux informations d'Air France ou de toute autre compagnie aérienne. En effet, l’application n’a pas accès à leurs base de données... Mais si Air France a une API à qui on peut demander des informations et qui partage certaines données de la base de données avec d’autres applications, alors VolScanner peut demander des informations à l’API d'Air France. L’API lui renvoie alors des données que VolScanner peut partager ! Ainsi, VolScanner peut comparer les prix entre les différentes compagnies qui ont mis en place un vol le 10 décembre pour Lisbonne. À vous les délicieuses pasteis de nata ! ✨ Les API peuvent communiquer : * d’un logiciel à un logiciel ; * d’un client à un serveur ; * ou d’un logiciel à des développeurs. Je suis certaine que vous avez déjà vu un exemple d’utilisation d’une API pour communiquer entre logiciels et développeurs : sur certains sites, vous pouvez utiliser votre compte Google ou Facebook pour vous identifier sans avoir à créer un identifiant et un mot de passe. C’est parce que Google et Facebook ont construit des API que d’autres développeurs peuvent utiliser dans leurs propres sites Internet pour s’occuper de l’inscription et de la connexion des utilisateurs à leur place. {{exemple_authentification_via_API.png|Les API rendent possibles les identifications par un service externe !}} Et du coup, comment c’est possible techniquement ? 🤔 Les API créent des méthodes **standardisées** et **réutilisables** qui permettent aux développeurs d’accéder à des données spécifiques lors de la construction d’applications. Prenons un exemple. Quand vous sortez manger, le menu du restaurant offre une grande quantité d’options déjà prédéterminées. Cela vous simplifie la tâche car vous savez ce que vous pouvez commander, et donc obtenir plus rapidement votre plat. Cela donne également une meilleure compréhension de ce que vous voulez pour le chef. Au final, vous n’avez qu’à demander à la serveuse (API) un plat du menu qu’elle transmettra en cuisine, la cuisine prépare votre plat, le remet à la serveuse qui vous le ramène. ===== Observez comment utiliser les API en tant que développeur ===== En tant que développeur, vous serez certainement amené à utiliser diverses API dans votre vie professionnelle ou pour vos projets personnels. Il existe deux types principaux : les API privées et les API publiques. Voyons ensemble de quoi il s'agit ! ==== Les API privées ==== Les API **privées** garantissent que les personnes en dehors de votre entreprise ou de votre application n’ont pas accès aux données disponibles de votre base de données. Par exemple, si les développeurs d'OpenClassrooms voulaient construire une application **interne** pour que les RH puissent gérer et analyser des informations de recrutement, il y aurait de nombreuses données que les salariés voudraient voir, créer, et modifier. Pour que les utilisateurs puissent interagir avec les données, les développeurs d’OpenClassrooms pourraient créer une API pour que les RH puissent accéder aux données de recrutement à travers leur application, sans pour autant donner ces accès aux utilisateurs de la plateforme comme vous et moi. Une API peut être utilisée comme un **tampon** ou une couche intermédiaire entre la base de données et la personne qui veut accéder ou manipuler les données. Une requête directe et non contrôlée sur une base de données pourrait engendrer le chaos ! Et si quelqu’un supprimait accidentellement un cours ou modifiait quelque chose qu’il n’aurait pas dû toucher ? La base de données est la fondation de toutes les données au sein d’une application, donc il ne faut surtout pas qu’elle soit facilement accessible ou manipulable par n‘importe qui. Question de sécurité ! 🔥 Une API permet un niveau de sécurité supplémentaire pour mieux gérer l’accès et les modifications des données, en attribuant ce qu’on appelle des droits aux personnes qui en ont besoin. Ainsi, on s’assure de contrôler les utilisateurs qui auront ou non accès à la base de données. Ainsi, moi seule peux modifier mes informations personnelles sur mon profil OpenClassrooms. Une API **privée** permet uniquement aux utilisateurs **autorisés** au sein de votre entreprise ou de votre application d'utiliser l’API qui peut accéder à la base de données. ==== Les API publiques ==== Contrairement aux API privées, les API que l’on appelle publiques sont utilisables par d’autres personnes, qu’elles soient sur votre application ou non. Elles permettent aux développeurs de récolter les données d’une autre application pour améliorer ou enrichir leurs propres projets sans autorisation stricte. Il existe de nombreuses manières d’utiliser des données provenant d’API tierces (ou externes), mais en voici quelques-unes : * Imaginons que vous vouliez construire un site web qui répertorie les conditions météo des stations de ski. Plutôt que de collecter vos propres données météorologiques, vous pouvez utiliser une [[https://openweathermap.org/api|API de météo]] et y trouver vos données ! 🌤 * Si vous êtes auteur-compositeur-interprète et que vous voulez créer un site web pour que vos fans puissent écouter votre musique, au lieu de construire votre propre lecteur de musique en streaming, vous pouvez utiliser l’[[https://developer.spotify.com/documentation/web-api/|API de Spotify]] et écouter votre musique directement sur votre site web ! 🎵 * Vous voulez créer une page de fans pour votre série télé favorite (Kaamelot, bien sûr), en réunissant tous les comptes Instagram des différents acteurs sur un seul site web – devinez quoi, il existe une [[https://developers.facebook.com/docs/instagram-api/?locale=fr_FR|API Instagram]] pour vous aider à le faire ! Il existe également certaines API à mi-chemin entre une API publique et privée. Cela peut se produire quand différentes requêtes de l’API sont possibles uniquement en fonction du niveau d’accès dont vous disposez. Nous y reviendrons plus tard lorsque nous traiterons de l’authentification. Il existe des milliers d’API publiques que les développeurs peuvent utiliser de différentes façons pour améliorer leurs projets. Voici une [[https://github.com/toddmotto/public-apis|liste d' API disponibles publiquement]] que vous pouvez utiliser ! ===== En résumé ===== * Les API permettent de communiquer des données. * Elles permettent la communication entre différents composants de votre application **et** entre votre application et d’autres développeurs, par l’utilisation de **requêtes** et de **réponses**. * Elles donnent un moyen d’accès aux données de façon réutilisable et standardisée. * Les développeurs peuvent utiliser des API publiques et privées. * Les API publiques sont utilisables par tous sans restriction. * Les API privées sont utilisables seulement par ceux qui ont un accès et y sont autorisés. Pourquoi utiliser une API REST en particulier et pas une simple API ? REST possède de nombreux avantages. Regardons ensemble dans le chapitre suivant ! ⌂ [[000_start|Retour au sommaire]] | [[120_avantages_api_rest|Suivant ▷]]