Guias
Tratamento de Erros
Como tratar erros da API do Triglit adequadamente
Este guia mostra como tratar erros da API do Triglit de forma adequada.
Documentation Index
Fetch the complete documentation index at: /llms.txt
Use this file to discover all available pages before exploring further.
Como tratar erros da API do Triglit adequadamente
{
"statusCode": 400,
"message": "Validation failed",
"error": "Bad Request",
"details": {
"field": "name",
"message": "Name is required"
}
}
{
"statusCode": 401,
"message": "API key não fornecida. Forneça a chave no header 'X-API-Key'."
}
{
"statusCode": 403,
"message": "Tipo de chave não permitido. Este endpoint aceita apenas: secret key (sk_)."
}
{
"statusCode": 404,
"message": "Workflow not found",
"error": "Not Found"
}
{
"statusCode": 409,
"message": "Workflow with this name already exists"
}
{
"statusCode": 429,
"message": "Rate limit exceeded. Try again in 5 seconds.",
"error": "Too Many Requests",
"retryAfter": 5
}
{
"statusCode": 500,
"message": "Internal server error",
"error": "Internal Server Error"
}
async function handleRequest(requestFn) {
try {
const response = await requestFn();
if (!response.ok) {
const error = await response.json();
throw new TriglitError(error.statusCode, error.message, error);
}
return await response.json();
} catch (error) {
if (error instanceof TriglitError) {
handleTriglitError(error);
} else {
handleNetworkError(error);
}
throw error;
}
}
class TriglitError extends Error {
constructor(statusCode, message, details) {
super(message);
this.statusCode = statusCode;
this.details = details;
}
}
function handleTriglitError(error) {
switch (error.statusCode) {
case 401:
console.error('API key inválida. Verifique suas credenciais.');
break;
case 403:
console.error('Sem permissão. Use a chave secreta (sk_) para esta operação.');
break;
case 429:
const retryAfter = error.details.retryAfter || 5;
console.warn(`Rate limit excedido. Retry após ${retryAfter} segundos.`);
break;
case 500:
console.error('Erro interno do servidor. Tente novamente mais tarde.');
break;
default:
console.error(`Erro ${error.statusCode}: ${error.message}`);
}
}
async function requestWithRetry(requestFn, maxRetries = 3) {
let lastError;
for (let attempt = 0; attempt < maxRetries; attempt++) {
try {
return await requestFn();
} catch (error) {
lastError = error;
// Não retry para erros 4xx (exceto 429)
if (error.statusCode >= 400 && error.statusCode < 500 && error.statusCode !== 429) {
throw error;
}
// Backoff exponencial
const delay = Math.min(1000 * Math.pow(2, attempt), 30000);
await sleep(delay);
}
}
throw lastError;
}
function validateWorkflow(data) {
const errors = [];
if (!data.name || data.name.trim().length === 0) {
errors.push('Name is required');
}
if (data.name && data.name.length > 100) {
errors.push('Name must be less than 100 characters');
}
if (errors.length > 0) {
throw new ValidationError(errors);
}
return true;
}
async function logError(error, context) {
await logger.error('Triglit API Error', {
statusCode: error.statusCode,
message: error.message,
context: context,
timestamp: new Date().toISOString()
});
}
Was this page helpful?
