Sobre o projeto
Ky é um cliente HTTP JavaScript pequeno e elegante, construído sobre a Fetch API. Ele tem como alvo navegadores modernos, Node.js, Bun e Deno, e é distribuído como um pacote pequeno, sem dependências. Pode ser instalado via npm (`npm install ky`) ou carregado de CDNs como jsdelivr, unpkg e esm.sh; no Deno, pode ser importado diretamente de uma URL.
Em comparação com o `fetch` simples, o Ky oferece uma API mais simples com atalhos de métodos (`ky.get()`, `ky.post()`, `ky.put()`, `ky.patch()`, `ky.head()`, `ky.delete()`, `ky.query()`), trata códigos de status diferentes de 2xx como erros após redirecionamentos e retorna uma Response estendida com métodos de corpo convenientes (`.json()`, `.text()`, `.formData()`, `.arrayBuffer()`, `.blob()` e `.bytes()` onde o runtime suporta). Uma opção `json` serializa os payloads e define o cabeçalho Content-Type, enquanto `searchParams` mescla parâmetros de consulta na URL da requisição.
As requisições podem ser configuradas com um `baseUrl` ou `prefix` para resolver URLs relativas, um `timeout` por tentativa (padrão 10000 ms) além de um `totalTimeout` opcional que cobre toda a operação, incluindo novas tentativas, e `maxResponseSize` para limitar os bytes do corpo da resposta descomprimida. As novas tentativas automáticas são altamente configuráveis: limites de tentativas, métodos e códigos de status aplicáveis, backoff exponencial com `backoffLimit`, funções de `delay` personalizadas, `jitter` para evitar efeito manada, respeito aos cabeçalhos `Retry-After` e de limite de taxa, `retryOnTimeout` e um callback `shouldRetry` para decisões de nova tentativa totalmente personalizadas.
Hooks de ciclo de vida (`init`, `beforeRequest`, `beforeRetry`, `beforeError`, `afterResponse`) permitem modificar opções, requisições e respostas durante o ciclo de vida da requisição — por exemplo, anexar cabeçalhos de autorização, reescrever URLs ou simular respostas retornando uma Response de um hook `beforeRequest`. `ky.extend()` cria instâncias com padrões personalizados, útil para construir clientes específicos de API.
O suporte a TypeScript inclui genéricos em `.json()` (padrão `unknown` em vez de `any`), e os corpos de resposta podem ser validados com validadores compatíveis com Standard Schema, como Zod, lançando um `SchemaValidationError` quando a validação falha. O suporte a progresso de upload e download também está listado entre seus benefícios em relação ao `fetch` simples.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.