Tratamento de Erros
Trate erros graciosamente em sua aplicação.
MeapleError
Todos os erros da API são encapsulados em MeapleError:
import { MeapleError } from '@meaple/core';
try {
await sdk.events.get('invalid-id');
} catch (error) {
if (error instanceof MeapleError) {
console.error('Status:', error.statusCode);
console.error('Mensagem:', error.message);
console.error('Resposta:', error.response);
}
}Propriedades do Erro
interface MeapleError extends Error {
statusCode: number;
message: string;
response?: any;
originalError?: Error;
}Códigos de Erro Comuns
| Código de Status | Descrição |
|---|---|
| 400 | Requisição Inválida - Parâmetros inválidos |
| 401 | Não Autorizado - Autenticação necessária |
| 403 | Proibido - Permissões insuficientes |
| 404 | Não Encontrado - Recurso não existe |
| 429 | Muitas Requisições - Limite de taxa excedido |
| 500 | Erro Interno do Servidor |
Padrões de Tratamento de Erros
Try-Catch
async function fetchEvent(id: string) {
try {
const event = await sdk.events.get(id);
return event;
} catch (error) {
if (error instanceof MeapleError) {
if (error.statusCode === 404) {
return null;
}
throw error;
}
throw error;
}
}Com React Query
import { useEvents } from '@meaple/react-query'
function EventsList() {
const { data, error, isError } = useEvents()
if (isError) {
return <div>Erro: {error.message}</div>
}
return <div>{/* renderizar eventos */}</div>
}Manipulador de Erro Personalizado
function handleMeapleError(error: unknown) {
if (error instanceof MeapleError) {
switch (error.statusCode) {
case 401:
redirectToLogin();
break;
case 404:
showNotFoundMessage();
break;
case 429:
showRateLimitMessage();
break;
default:
showGenericError(error.message);
}
}
}Lógica de Retry
O SDK inclui lógica automática de retry para falhas transitórias:
const sdk = new MeapleSDK({
baseURL: 'https://api.meaple.com',
timeout: 30000,
retries: 3,
retryDelay: 1000,
});Logging de Erros
Use um logger personalizado:
import { Logger } from '@meaple/core';
class CustomLogger implements Logger {
error(message: string, error?: any) {
console.error(`[Meaple SDK] ${message}`, error);
}
warn(message: string) {
console.warn(`[Meaple SDK] ${message}`);
}
info(message: string) {
console.info(`[Meaple SDK] ${message}`);
}
}
const sdk = new MeapleSDK({
baseURL: 'https://api.meaple.com',
logger: new CustomLogger(),
});