Les APIs : Au-delà de REST – Explorer la richesse des interfaces de programmation

Photo by Walkator on Unsplash

Les APIs : Au-delà de REST – Explorer la richesse des interfaces de programmation

Si vous débutez en développement ou en Data/BI, vous avez probablement entendu parler des API REST. Généralement, la vision des APIs se limite à celle-ci alors qu’il existe tout un univers d’interfaces de programmation, chacune avec ses avantages, ses spécificités et ses cas d’utilisation. Aujourd’hui, on va lever le voile sur ces autres mondes et vous montrer que les APIs, c’est bien plus qu’un simple verbe HTTP.

REST – L’incontournable

REST (Representational State Transfer) est sans doute l’API la plus répandue. Sa simplicité, basée sur les méthodes HTTP (GET, POST, PUT, DELETE), en fait un standard pour créer des services web.

Exemple simple en Express :

const express = require('express');
const app = express();

app.get('/api/data', (req, res) => {
  res.json({ message: "Hello from REST API!" });
});

app.listen(3000, () => console.log("REST API running on port 3000"));

REST est génial pour des applications légères et des échanges de données simples. Mais attention, il n’est pas la seule solution !

GraphQL – L’API qui vous donne le contrôle

Contrairement à REST, qui impose des points d’accès fixes, GraphQL vous permet de demander exactement les données dont vous avez besoin, rien de plus, rien de moins. Conçu par Facebook, il offre une flexibilité incroyable, surtout pour des interfaces complexes.

Exemple de requête GraphQL :

const { graphql, buildSchema } = require('graphql');

// Définition du schéma
const schema = buildSchema(`
  type Query {
    hello: String
  }
`);

// Fonction de résolution
const root = { hello: () => 'Hello from GraphQL API!' };

// Exécution de la requête
graphql(schema, '{ hello }', root).then((response) => {
  console.log(response);
});

GraphQL est idéal pour les applications nécessitant des interactions complexes entre le client et le serveur.

gRPC – La vitesse en action

Pour des communications ultra-rapides entre services, gRPC est le champion. Utilisant le protocole HTTP/2 et la sérialisation en Protobuf, il est parfait pour les microservices qui doivent échanger des données à grande vitesse.

Exemple de fichier de définition (proto) pour gRPC :

syntax = "proto3";

package helloworld;

// Déclaration du service
service Greeter {
  // Méthode RPC
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

// Message de requête
message HelloRequest {
  string name = 1;
}

// Message de réponse
message HelloReply {
  string message = 1;
}

gRPC est utilisé dans des environnements où la performance est cruciale, comme les systèmes distribués et les infrastructures cloud.

SOAP – Le vétéran XML

SOAP (Simple Object Access Protocol) est une norme plus ancienne qui repose sur le XML pour échanger des messages. Bien qu’il soit moins utilisé aujourd’hui, il est encore présent dans de nombreuses entreprises pour des applications critiques.

Exemple de snippet SOAP (WSDL) :

<definitions name="HelloService"
             targetNamespace="http://www.example.org/hello"
             xmlns:tns="http://www.example.org/hello"
             xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
             xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <message name="SayHelloRequest">
    <part name="firstName" type="xsd:string"/>
  </message>
  <message name="SayHelloResponse">
    <part name="greeting" type="xsd:string"/>
  </message>
  <!-- Détails du service -->
</definitions>

SOAP reste pertinent dans des environnements nécessitant une sécurité renforcée et des transactions complexes.

WebSockets – L’API en temps réel

Lorsque le temps réel est de mise, les WebSockets entrent en scène. Ils permettent une communication bidirectionnelle persistante entre le client et le serveur.

Exemple avec Socket.io en Node.js :

const io = require('socket.io')(3000);

io.on('connection', (socket) => {
  console.log('Un utilisateur est connecté');
  socket.emit('welcome', 'Hello from WebSocket API!');
});

Les WebSockets sont parfaits pour les applications de chat, les jeux en ligne, ou tout système nécessitant une interactivité instantanée.

OData – L’API pour des requêtes avancées

OData (Open Data Protocol) offre une manière standardisée d'interroger et de manipuler des données via des URL. C’est une option solide pour exposer des données de manière flexible.

Exemple de requête OData :

GET /Products?$filter=Price gt 20 HTTP/1.1
Host: services.odata.org

OData permet d’effectuer des opérations complexes sur les données avec des filtres, des tris et des agrégations directement dans l’URL.

La diversité, c’est la clé

Penser que les APIs se limitent à REST, c’est passer à côté d’un univers entier de possibilités. Chacune de ces technologies apporte ses propres avantages et répond à des besoins spécifiques. Le choix de l’API dépend de votre contexte, de vos contraintes et des objectifs de votre projet. L’important est de comprendre les forces et les limites de chaque solution pour créer des systèmes robustes et évolutifs.