Les APIs

Introduction

Applications monolithique

Une application est souvent composées de plusieurs composants qui communiquent entre eux. Par exemple, une interface graphique pourrait demander à un composant responsable de gérer l'identification des utilisateurs l'utilisateur actuellement connecté et sa ville, puis demander à un composant de cartographie de produire une carte qui lui même demandera à un composant de météo des prévisions.

Ces composants peuvent être hébergés dans le code de l'application (architecturés par exemple avec différentes classes); on parle alors d'application monolithique:

Bien que simple et performante (la communication entre les composants se faisant par des appels direct de méthodes), on peut émettre des critiques sur cette architecture:

  • Homogénéité: elle doit être développée sur le même socle technologique,
  • Scalabilité: on ne peut pas facilement déplacer les composants sur une autre machine physique,
  • Maintenabilité: une application monolithique est amenée à grossir jusqu'à devenir éventuellement impossible à maintenir.

Approche "microservices"

Une autre approche plus moderne consiste en la création de multiples applications qui communiquent entre elles, on parle alors de microservices :

Ainsi:

  • Les différentes applications peuvent utiliser des langages différents,
  • Elles peuvent également être hébergées sur des machines différentes,
  • On peut faire évoluer un "morceau" de l'architecture globale sans toucher au reste.

API

On souhaite donc faire communiquer des applications ensemble, à travers ce qu'on appellera une API.

API: Application programming interface

Les problèmes sous-jacents sont:

  1. Quels sont les protocoles / couches réseau permettant de réaliser cette communication ?
  2. Quel est le format des données échangées ?

API REST

Présentation

Une API REST (representational state transfer), parfois appelé RESTful est un style d'architecture d'API basé sur HTTP. Une API REST est:

  • Client-serveur: les responsabilités sont séparées (par exemple, la logique de l'interface graphique est séparée du serveur)
  • Sans état: chaque requête est indépendante (pas de sessions par exemple)
  • Support du cache: les réponses indiquent si elles peuvent être gardées en cache,
  • Support des couches: si des couches intermédiaires sont ajoutées entre le client et le serveur (par exemple à l'aide de load balancing), la communication ne doit pas être altérée.

Principe

Une API REST expose une liste d'URLs qui peuvent être atteinte à l'aide de certains verbes (méthodes) HTTP. Par exemple:

  • GET /api/product/34: obtient les informations sur le produit 34
  • POST /api/product: créer un produit
  • PATCH /api/product/34: mettre à jour le produit 34
  • DELETE /api/product/34: supprimer le produit 34

On appelle cela des endpoint.

Remarque: dans une API REST, il est recommandé d'utiliser les méthodes HTTP pour désigner l'action que l'on souhaite utiliser.

On ne fera PAS: GET /api/delete/product/34
Mais plutôt DELETE /api/product/34

Il existe de nombreuses méthodes HTTP standard, les plus connues étant GET, POST, PUT, PATCH et DELETE.

Passage de paramètres

Une API REST peut recevoir des paramètres via les méthodes classiques:

  • Dans la query string, /get/products?orderBy=price&direction=DESC,
  • Dans le corps de la requête, qui peut contenir:
    • Des variables de formulaire encodées de la même manière que la query string
      • On parle du format x-www-form-urlencoded
    • Des champs qui peuvent être de type différents (notamment des fichiers)
      • On parle du format multipart
    • Des données dans un format standard, type JSON, XML etc.

Authentification

Comme mentionné précédemment, une API REST est sans état, ce qui implique qu'il n'y a pas de système de session. Il existe plusieurs manières d'implémenter l'authentification à travers une API REST, qui reposent presque toutes sur l'utilisation d'un jeton (token) d'identification.

Ce jeton peut être passé au serveur de plusieurs façons, notamment:

  • Dans l'en-tête dédiée Authorization: Bearer <token>
  • Dans la query string (?api_key=<token>
  • Dans une en-tête X-API-Key: <token>
  • Dans un Cookie Cookie: X-API-Key=<token>

Outils

Postman

Postman est un outil permettant d'envoyer des requêtes HTTP manuellement:

Il permet de spécifier l'URL, la méthode HTTP, les paramètres query string, le corps de la requête etc. Mais aussi de sauvegarder une collection de requêtes pour les réutiliser plus tard.