← Développement

Services web et API REST

Sommaire

Comment deux applications échangent des données, indépendamment de leur plateforme et de leur langage.

1. Service web, API, REST

Principe général : un serveur expose des données et des services ; une application cliente les consomme via HTTP(S). Les données échangées sont formatées dans un standard, généralement JSON ou XML.

2. La ressource REST

Une ressource REST se compose de :

Convention d'URI : un nom de ressource au pluriel, pas de verbe. /api/v1/books plutôt que /api/getAllBooks — c'est le verbe HTTP qui porte l'action.

3. La requête HTTP

Les verbes HTTP correspondent aux opérations CRUD :

VerbeOpérationCRUD
GETRécupérer une ressourceRead
POSTCréer une ressource (données dans le body)Create
PUT / PATCHMettre à jour une ressource existanteUpdate
DELETESupprimer une ressourceDelete

PUT remplace la ressource entière, PATCH n'en modifie qu'une partie.

En-têtes courants

En-têteRôle
AcceptFormat(s) de réponse acceptés (application/json, application/xml)
Content-TypeFormat des données contenues dans le corps de la requête
AuthorizationInformations d'identification pour l'authentification

Paramètres de requête

Informations envoyées via l'URL sous forme de couples CLE=VALEUR placés après un ? et séparés par des &.

GET http://library.demo.local/api/v1/books?genre=policier&tri=titre&page=2

4. La réponse HTTP

FamilleSensCodes fréquents
1xxInformation
2xxSuccès200 OK (GET réussi), 201 Created (POST, ressource créée), 204 No Content
3xxRedirection301, 304 Not Modified
4xxErreur côté client400 Bad Request (syntaxe invalide), 401 Unauthorized (authentification invalide), 403 Forbidden (accès interdit), 404 Not Found
5xxErreur côté serveur500 Internal Server Error

Distinction souvent demandée : 401 signifie « je ne sais pas qui tu es » — authentification manquante ou invalide. 403 signifie « je sais qui tu es, mais tu n'as pas le droit » — c'est un problème d'autorisation. La même différence qu'entre authentification et habilitation.

5. Le format JSON

JSON (JavaScript Object Notation) est un format léger d'échange de données, facile à lire et à interpréter par des traitements informatiques.

{
  "id": 12,
  "titre": "L'Étranger",
  "auteur": {
    "nom": "Camus",
    "prenom": "Albert"
  },
  "genres": ["roman", "philosophie"],
  "disponible": true,
  "emprunteur": null
}

Les clés sont toujours entre guillemets doubles, et une virgule finale après le dernier élément est interdite — ce sont les deux erreurs de syntaxe les plus courantes.

6. Types d'API et documentation

TypeDescription
API privéeRéservée à un usage interne : elle permet la communication entre les composants du SI de l'organisation
API partenairePermet d'enrichir une application avec des fonctionnalités de partenaires externes, souvent avec une tarification selon le volume : paiement en ligne, cartographie, réseaux sociaux
API publiqueAPI Open Data : données libres, gratuites et sans restriction majeure

Chaque API est accompagnée d'une documentation qui décrit son objectif, la politique d'utilisation (sécurité, mécanisme d'authentification, quotas), les endpoints (URI, actions possibles, formats, paramètres), des exemples de requêtes et de réponses copiables, et des exemples de code dans différents langages.

Des outils génèrent cette documentation automatiquement : Swagger / OpenAPI, ApiDoc.

7. Sécurité des API

Objectif : contrôler l'accès et garantir la confidentialité des données, via des mécanismes d'authentification, d'autorisation et de gestion des quotas.

MécanismePrincipeLimite
API Key Chaîne alphanumérique unique générée par le fournisseur, fournie à chaque requête. Permet de gérer des quotas. Ne permet pas de distinguer les utilisateurs individuels ; si la clé fuite, tout l'accès est compromis
Basic Auth Login et mot de passe transmis dans l'en-tête de la requête Identifiants envoyés à chaque appel : inutilisable sans HTTPS
Bearer Token Un serveur d'authentification génère un jeton attestant l'identité et les autorisations. Il est fourni dans l'en-tête de chaque requête. — c'est le mécanisme recommandé : le jeton peut expirer ou être révoqué

Quel que soit le mécanisme, une API se consomme en HTTPS : sans chiffrement du transport, clé, identifiants ou jeton circulent en clair et sont interceptables.

8. Tester et créer une API

Avant d'intégrer une API dans une application, il est primordial de voir comment elle fonctionne :

curl -X GET "https://swapi.dev/api/people/1/" -H "Accept: application/json"

curl -X POST "http://library.demo.local/api/v1/books" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer <token>" \
     -d '{"titre":"L Etranger","auteur":"Camus"}'

Pour créer une API, le développeur peut utiliser différents langages (JavaScript, PHP…) et des frameworks orientés API : API Platform, Express.js, Django REST Framework.