1.0.1 • Published 6 months ago

@gleissonneves/liz-api-client v1.0.1

Weekly downloads
-
License
MIT
Repository
bitbucket
Last release
6 months ago

📡 API Client - JavaScript Fetch Wrapper

Uma biblioteca de cliente HTTP moderna e extensível, baseada em fetch, com suporte a interceptadores, retry automático, timeout configurável e tratamento de erros avançado.

✨ Recursos

✅ baseUrl configurável ✅ Timeout nativo por requisição ✅ Retry automático em erros de rede (configurável) ✅ Interceptadores (onRequest, onResponse, onError) ✅ Tratamento de erros com classe ApiError ✅ Parsing automático de JSON e Text ✅ Controle de query params em requisições GET ✅ Totalmente extensível para middlewares e caching

🚀 Instalação

🛠️ Uso básico

  1. Importação e Instância
npm install @gleissonneves/liz-api-client
import { Api } from "@gleissonneves/liz-api-client";

const api = new Api({
  baseUrl: 'https://api.meuservico.com',
  timeout: 10000, // Opcional (default: 15 segundos)
  maxRetries: 2,  // Opcional (default: 2 tentativas)
});
  1. Métodos Disponíveis
  • api.get(endpoint, queryParams = {}, config = {})
  • api.post(endpoint, body = {}, config = {})
  • api.put(endpoint, body = {}, config = {})
  • api.delete(endpoint, config = {})
  • api.setInterceptors({ request, response, error })

📚 Exemplos de uso

  1. Requisição GET com Query Params
const { data } = await api.get('/usuarios', { ativo: true });
console.log(data);
  1. Requisição POST com corpo de dados
await api.post('/login', { email: 'email@exemplo.com', senha: '123456' });
  1. Tratamento de Erros
try {
  const { data } = await api.get('/dados');
} catch (error) {
  if (error instanceof ApiError) {
    console.error('Erro de API', error.status, error.data);
  } else {
    console.error('Erro desconhecido', error);
  }
}

🔥 Interceptadores

Adicionando Interceptadores Globais

api.setInterceptors({
  request: async (config) => {
    const token = localStorage.getItem('token');
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  response: async (response) => {
    // Você pode manipular a resposta aqui
    return response;
  },
  error: async (error) => {
    // Centralize o tratamento de erros aqui
    console.error('Interceptado erro:', error);
    throw error;
  }
});

⚙️ Configurações aceitas no construtor

PropriedadeTipoDescriçãoDefault
baseUrlstringURL base para todas as requisições''
timeoutnumberTempo limite em ms para abortar requisição15000
maxRetriesnumberNúmero máximo de tentativas em erro de rede2
headersobjectCabeçalhos padrão{ 'Content-Type': 'application/json' }

🧩 Classe de Erro: ApiError

Todos os erros de API são lançados como instâncias de ApiError.

Atributos disponíveis:

  • status: Código HTTP da resposta
  • data: Corpo da resposta (JSON ou texto)
  • response: Objeto Response original

🛡️ Roadmap Futuro

  • [] Suporte a cache de respostas (Cache-First)
  • [] Middlewares encadeáveis (use(middleware))
  • [] Retentativas inteligentes baseadas em erro (retryIf)
  • [] Upload progress (com onUploadProgress)
  • [] Caching com invalidation (stale-while-revalidate)