# Qu'est-ce qu'une API distante ?

API signifie **Application Programming Interface** : une interface qui permet à un programme d'utiliser les fonctionnalités d'un autre, sans connaître son fonctionnement interne.

<p class="callout success">L'analogie du restaurant : vous (le client) ne rentrez pas en cuisine. Vous passez commande au serveur avec un vocabulaire défini (la carte), et il vous rapporte le plat. Le serveur, c'est l'API.</p>

### Une API distante

Une API **distante** (ou API web) est exposée sur le réseau, en général via HTTP. Le client et le serveur sont deux programmes séparés, souvent sur deux machines différentes, écrits dans des langages différents.

```bash
curl https://api.github.com/users/thibaudfrichet
```

```json
{
  "login": "thibaudfrichet",
  "id": 277130160,,
  "name": "Thibaud Frichet",
  "public_repos": 5,
  ...
}
```

Un programme Python, une application mobile ou un script bash peuvent tous obtenir ces informations, sans savoir comment GitHub les stocke.

Son rôle : faire communiquer des **services** ou des **applications** entre eux.

- un front (SPA, application mobile) avec son back ;
- deux services d'une même entreprise ;
- votre application avec un service tiers (paiement, météo, cartographie…) ;
- un assistant IA avec vos outils.

### Ce qu'on appelle aussi « API »… mais qui n'est pas distant

<table id="bkmrk-exempleapi-%3Fdistante" style="width: 100%; height: 289.094px;"><thead><tr style="height: 34.1094px;"><th style="width: 29.2486%; height: 34.1094px;">Exemple</th><th style="width: 29.5424%; height: 34.1094px;">API ?</th><th style="width: 41.09%; height: 34.1094px;">Distante ?</th></tr></thead><tbody><tr style="height: 55.2188px;"><td style="width: 29.2486%; height: 55.2188px;">La bibliothèque `math` de Python, `lodash` en JS</td><td style="width: 29.5424%; height: 55.2188px;">Oui, API d'une bibliothèque</td><td style="width: 41.09%; height: 55.2188px;">Non : appel de fonction dans le même programme</td></tr><tr style="height: 34.1094px;"><td style="width: 29.2486%; height: 34.1094px;">`document.querySelector()`</td><td style="width: 29.5424%; height: 34.1094px;">Oui, API DOM du navigateur</td><td style="width: 41.09%; height: 34.1094px;">Non : fournie par le navigateur</td></tr><tr style="height: 55.2188px;"><td style="width: 29.2486%; height: 55.2188px;">Les appels système Linux (`open`, `read`)</td><td style="width: 29.5424%; height: 55.2188px;">Oui, API du noyau</td><td style="width: 41.09%; height: 55.2188px;">Non</td></tr><tr style="height: 55.2188px;"><td style="width: 29.2486%; height: 55.2188px;">Une base de données MariaDB / MySQL</td><td style="width: 29.5424%; height: 55.2188px;">Elle a un protocole, mais on ne parle pas d'API web</td><td style="width: 41.09%; height: 55.2188px;">Elle est sur le réseau, mais ce n'est pas du HTTP</td></tr><tr style="height: 55.2188px;"><td style="width: 29.2486%; height: 55.2188px;">`https://api.github.com/users/thibaudfrichet`</td><td style="width: 29.5424%; height: 55.2188px;">Oui</td><td style="width: 41.09%; height: 55.2188px;">Oui</td></tr></tbody></table>

<p class="callout warning">SSH, MySQL, RDP, etc. : Ce sont des protocoles, comme HTTP. On ne parle pas d'API dans ce cas.</p>

### API, webservice, microservice

- **API** : le contrat, l'interface (les routes, les formats, les règles).
- **Webservice** : un service accessible par le réseau qui expose une API. Le terme est surtout utilisé pour l'époque SOAP.
- **Microservice** : une manière de découper une application en petits services indépendants, qui communiquent entre eux… par API.