Erros e limites de requisições
A API responde com códigos de status HTTP padrão e um corpo JSON que explica o erro.
Formato de erro
{
"error": "q must contain 3–120 characters"
}
Códigos de status
| Código | Significado |
|---|---|
200 |
Sucesso. |
400 |
Um parâmetro está ausente ou é inválido; a mensagem indica qual. |
401 |
A chave está ausente, malformada, revogada ou expirada. |
403 |
A chave não permite esta busca. |
404 |
Endpoint desconhecido ou registro que a fonte não publica mais. |
429 |
Limite de requisições excedido. |
503 |
Temporariamente indisponível. |
Limites de requisições
Cada chave pode fazer 300 requisições por minuto, e um limite agregado protege o serviço para todos. Acima do limite, as respostas retornam 429 com um cabeçalho Retry-After em segundos.
Novas tentativas
Repita as requisições que receberem 429 e 503 após o número de segundos indicado em Retry-After, com um número limitado de tentativas. Não repita após outros erros 4xx: a requisição precisa ser alterada.
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))
}
}
Cache
As respostas trazem Cache-Control: no-store. Se você armazenar resultados no seu próprio sistema, guarde o retrievedAt de cada um e atualize-os com GET /v1/drugs/record.