Erreurs et limites de requêtes
L’API répond avec des codes de statut HTTP standard et un corps JSON qui explique l’erreur.
Format des erreurs
{
"error": "q must contain 3–120 characters"
}
Codes de statut
| Code | Signification |
|---|---|
200 |
Succès. |
400 |
Un paramètre est manquant ou invalide ; le message précise lequel. |
401 |
La clé est manquante, mal formée, révoquée ou expirée. |
403 |
La clé ne permet pas cette recherche. |
404 |
Endpoint inconnu, ou fiche que la source ne publie plus. |
429 |
Limite de requêtes dépassée. |
503 |
Service temporairement indisponible. |
Limites de requêtes
Chaque clé peut effectuer 300 requêtes par minute, et une limite globale protège le service pour tous. Les requêtes qui dépassent la limite reçoivent une réponse 429 avec un en-tête Retry-After exprimé en secondes.
Nouvelles tentatives
Relancez les requêtes ayant reçu 429 ou 503 après le nombre de secondes indiqué par Retry-After, avec un nombre limité de tentatives. Ne relancez pas celles qui ont reçu d’autres erreurs 4xx : la requête doit être modifiée.
async function medifontis(path, params, attempts = 3) {
for (let attempt = 1; ; attempt++) {
const response = await fetch(`https://api.medifontis.com${path}?${new URLSearchParams(params)}`, {
headers: { Authorization: `Bearer ${process.env.MEDIFONTIS_API_KEY}` },
})
if (response.ok) return response.json()
if (![429, 503].includes(response.status) || attempt === attempts) {
throw new Error(`Medifontis ${response.status}: ${(await response.json()).error}`)
}
const seconds = Number(response.headers.get('retry-after')) || 2 ** attempt
await new Promise(resolve => setTimeout(resolve, seconds * 1000))
}
}
Mise en cache
Les réponses comportent l’en-tête Cache-Control: no-store. Si vous stockez des résultats dans votre propre système, conservez leur retrievedAt et actualisez-les avec GET /v1/drugs/record.