Skip to main content

Appeler une API avec requests

curl et Bruno, c'est bien pour explorer. Mais pour automatiser, il faut appeler l'API depuis du code. Les exemples sont donnés en Python, avec la bibliothèque requests.

Prérequis

Python 3 et la bibliothèque requests : pip install requests.

Votre clé d'API n'a rien à faire dans le code (ni dans git). Passez-la par une variable d'environnement : export API_KEY=votre-cle.

Lire une ressource

import requests

BASE = "http://api-ritif.portlatch.com/v1"

res = requests.get(BASE + "/cocktails/3")
cocktail = res.json()
print(res.status_code, cocktail["name"])

Paramètres de query

res = requests.get(BASE + "/cocktails", params={"alcohol_free": "true", "per_page": 5})

Envoyer du JSON avec un header

import os

res = requests.post(
    BASE + "/orders",
    json={"cocktail_id": 3},
    headers={"X-API-Key": os.environ["API_KEY"]},
)
print(res.status_code, res.headers.get("Location"))

Avec json=, requests sérialise le body et ajoute le Content-Type tout seul.

Le piège : les erreurs HTTP

requests ne lève pas d'erreur sur un 404 ou un 500 : il ne le fait que si le réseau est coupé. Votre code continue donc tranquillement… avec une réponse d'erreur.

res = requests.get(BASE + "/cocktails/999")
res.raise_for_status()  # lève une exception si le code est 4xx ou 5xx

En résumé

Python (requests)
Code de statutres.status_code
Succès (2xx) ?res.ok
Headerres.headers["Location"]
Body JSONres.json()
Envoyer du JSONjson=...
Lever une erreurres.raise_for_status()