Documentação / Guias

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

400 Bad Request
{
  "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.

Node.js
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.