Tests · API
Tester avec une API simulée (mock), pas une adresse d’exemple
Développez et testez avec Prism, WireMock, MSW ou json-server plutôt qu’avec une adresse qui appartient à quelqu’un d’autre.
Guide · API
Les requêtes vers des adresses comme api.example-petstore.com proviennent d’un code qui utilise encore une adresse d’exemple comme URL de base. Ce guide indique où se trouve généralement cette adresse, comment la déplacer dans la configuration et comment éviter que cela se reproduise.
URL de base copiée d’un exemple
API_BASE_URL=https://api.example-petstore.comGET /v2/pet/42 Authorization: Bearer ••••api.example-petstore.com410 Gone La clé est arrivée chez un inconnu : révoquez-laURL de base issue de la configuration
API_BASE_URL=${API_BASE_URL}GET /v2/pet/42 Authorization: Bearer ••••200 OK La requête et la clé arrivent au bon serviceToute requête avec un corps, vers un chemin de type API comme /v2/pet, ou qui demande du JSON, reçoit
410 Gone avec une description du problème (RFC 9457) :
HTTP/1.1 410 Gone
Content-Type: application/problem+json; charset=utf-8
{"type":"https://example-petstore.com/#where","title":"Example domain, not a real service",
"status":410,"detail":"api.example-petstore.com is an example domain used in documentation. …"}
Ce domaine n’est pas l’API d’exemple Swagger Petstore, qui se trouve sur petstore.swagger.io.
BASE_URL = "https://api.example-petstore.com") ;.env ou une variable d’environnement copiés à partir d’un exemple ;host ou servers d’une description OpenAPI utilisée pour générer un client ;{{baseUrl}} ;Lisez l’adresse depuis la configuration et générez une erreur explicite lorsqu’elle est absente :
# Python: read the address from configuration, not from the code
import os
BASE_URL = os.environ["API_BASE_URL"]
// JavaScript / Node.js
const baseURL = process.env.API_BASE_URL;
// PHP 8
$baseUrl = getenv('API_BASE_URL') ?: throw new RuntimeException('API_BASE_URL is not set');
# Python, httpx
client = httpx.Client(base_url=os.environ["API_BASE_URL"])
// Node.js, axios
const api = axios.create({ baseURL: process.env.API_BASE_URL });
# Generated OpenAPI client (Python)
configuration = Configuration(host=os.environ["API_BASE_URL"])
// PHP, Guzzle
$client = new GuzzleHttp\Client(['base_uri' => getenv('API_BASE_URL')]);
// PHP, Symfony HttpClient
$client = Symfony\Component\HttpClient\HttpClient::createForBaseUri(getenv('API_BASE_URL'));
Dans Postman ou Insomnia, définissez baseUrl pour chaque environnement et sélectionnez le bon environnement avant l’envoi.
Ajoutez au démarrage ou dans les tests une vérification qui rejette les adresses d’exemple :
# Python
import os, re
base = os.environ["API_BASE_URL"]
if re.search(r"example-(petstore|commerce-host)\.com", base):
raise RuntimeError(f"API_BASE_URL still points at an example domain: {base}")
// PHP
$base = getenv('API_BASE_URL') ?: '';
if (preg_match('/example-(petstore|commerce-host)\.com/', $base)) {
throw new RuntimeException("API_BASE_URL still points at an example domain: $base");
}
Dans votre propre documentation et vos propres exemples, utilisez des noms réservés à cet usage, comme api.example.com.
Consultez la page domaines d’exemple.
Si des requêtes contenaient une clé API, un jeton, un mot de passe ou un cookie de session, ceux-ci ont atteint le mauvais serveur. Révoquez-les auprès du service qui les a émis et générez-en de nouveaux. Identifiants divulgués : que faire maintenant.
Tester sans le vrai service : Tester avec une API simulée (mock), pas une adresse d’exemple