**Um microgateway de alta performance para APIs, com orquestração inteligente e roteamento dinâmico.**
npm install heimdall-api-platformUm microgateway de alta performance para APIs, com orquestração inteligente e roteamento dinâmico.
---
O Heimdall API Platform é um microgateway projetado para lidar com orquestração de APIs, roteamento dinâmico e integração entre microsserviços de forma flexível e performática.
Ideal para arquiteturas modernas, legadas ou híbridas, ele permite centralizar e controlar fluxos de requisições com segurança, cache, validação de licença e observabilidade.
---
* Roteamento inteligente entre múltiplas APIs
* Orquestração de serviços e fluxos condicionais
* Aplicação de padrões de segurança e autenticação
* Cache de respostas via Redis
* Observabilidade com OpenSearch
* Proteção contra ataques DDoS e throttling de requisições
* Transformações dinâmicas de dados de request em tempo de execução
* Facilidade de integração com ambientes heterogêneos (legado + novo)
* Padronização de erros e tratamento uniforme
* Geração de correlation id para rastreamento de requisições
---
* ✅ Gateway de APIs leve e flexível
* 🔁 Roteamento dinâmico baseado em configurações
* ⚙️ Orquestração de múltiplos fluxos por rota
* 🔗 Agregação de vários serviços em uma única requisição utilizando fluxos
* 🔐 Validação de licença (produção exige chave válida)
* 📦 Cache com Redis (opcional, mas recomendado)
* 🔍 Observabilidade com OpenSearch
* 📄 Documentação automática com Swagger e Redocly
* 🎭 Suporte a mocks estáticos e dinâmicos
* ▶️ Execução de functions customizadas, integração com clientes de API e mocks internos
* 🛠️ Padronização de erros e respostas de falha
* 🔖 Geração automática de correlation id para rastreamento
* ☁️ Totalmente compatível com AWS Lambda e Google Cloud Functions
---
* Node.js v18 ou superior
---
``bash`
npm install heimdall-api-platform
---
`js`
module.exports = {
name: 'executeFunction',
description: 'Execute Function',
method: 'POST',
route: '/execute_function',
indexedResult: false,
responseHeaders: {
'Content-Type': 'application/json;charset=UTF-8'
},
flow: [
{
resultVariable: '.',
skipErrors: false,
cacheEnable: true,
cacheTtl: 10, // TTL em segundos
operation: {
functionName: 'return-body-result',
type: 'function'
}
}
]
};
| Atributo | Descrição |
| ----------------- | ----------------------------------------------- |
| name | Identificador único da rota/configuração. |description
| | Descrição para documentação. |method
| | Método HTTP (GET, POST, etc.). |route
| | Caminho exposto no gateway. |indexedResult
| | Se deve indexar o resultado para uso posterior. |responseHeaders
| | Headers fixos retornados na resposta. |
Detalhes do flow
| Campo | Descrição |
| ---------------- | -------------------------------------------- |
| resultVariable | Variável onde armazenar o saída da operação. |skipErrors
| | Se true, ignora erros e continua o fluxo. |cacheEnable
| | Se true, ativa cache para esta operação. |cacheTtl
| | Tempo de vida (segundos) do cache. |operation
| | Configuração da operação (function). |
Configuração operation
| Campo | Descrição |
| -------------- | --------------------------------------- |
| functionName | Nome da função registrada no framework. |type
| | Tipo de operação (function). |
---
`js`
module.exports = {
name: 'executeMock',
description: 'Execute Mock',
method: 'GET',
route: '/execute_mock',
indexedResult: false,
responseHeaders: {
'Content-Type': 'application/json;charset=UTF-8'
},
flow: [
{
resultVariable: '.',
skipErrors: false,
operation: {
file: 'demo-mock.json',
type: 'mock'
}
}
]
};
| Atributo | Descrição |
| ----------------- | ------------------------------------ |
| name | Identificador único da rota de mock. |description
| | Descrição para documentação. |method
| | Método HTTP. |route
| | Caminho exposto no mock. |indexedResult
| | Se deve indexar o mock. |responseHeaders
| | Headers fixos para resposta do mock. |
Detalhes do flow
| Campo | Descrição |
| ---------------- | ----------------------------------------- |
| resultVariable | Variável que receberá o conteúdo do mock. |skipErrors
| | Se true, ignora erros. |operation
| | Configuração da operação (mock). |
Configuração operation
| Campo | Descrição |
| --------- | ---------------------------------- |
| file | Caminho para arquivo JSON de mock. |type
| | Tipo de operação (mock). |
---
`js`
module.exports = {
name: 'addressByZipcodeService',
description: 'Get Address By Zipcode',
method: 'GET',
route: '/:zipcode/by_client_api',
indexedResult: false,
responseHeaders: {
'Content-Type': 'application/json;charset=UTF-8'
},
flow: [
{
resultVariable: '.',
skipErrors: false,
cacheEnable: false,
cacheTtl: 24 60 60 * 30, // 30 dias em segundos
cacheKey: '{{params.zipcode}}',
operation: {
clientName: 'viaCEP',
mergedHeaders: false,
headersTransformation: 'transformation-header-get-cep',
requestTransformation: 'transformation-request-get-cep',
responseTransformation: 'transformation-response-get-cep',
onError: 'on-error-get-cep',
onSuccess: 'on-success-get-cep',
headers: {
'Content-Type': 'application/json;charset=UTF-8',
'X-HEADER-CEP': '{{params.zipcode}}'
},
type: 'http',
method: 'GET',
path: '/{{params.zipcode}}/json'
}
}
]
};
| Atributo | Descrição |
| ----------------- | ----------------------------------------------- |
| name | Identificador único do serviço. |description
| | Descrição para documentação. |method
| | Método HTTP da chamada externa. |route
| | Rota no gateway para chamada externa. |indexedResult
| | Se deve indexar o resultado. |responseHeaders
| | Headers fixos da resposta. |flow
| | Lista de etapas de orquestração para esta rota. |
Detalhes do flow
| Campo | Descrição |
| ---------------- | ----------------------------------------------------- |
| resultVariable | Variável que armazena o resultado da chamada externa. |skipErrors
| | Se true, continua o fluxo mesmo com erros. |cacheEnable
| | Se true, habilita cache para esta operação. |cacheTtl
| | TTL do cache em segundos. |cacheKey
| | Chave de cache baseada em parâmetros da rota. |operation
| | Configuração da operação HTTP. |
Configuração operation
| Campo | Descrição |
| ------------------------ | --------------------------------------------------------- |
| clientName | Nome do cliente HTTP em mappingClients. |mergedHeaders
| | Se true, mescla todos os cabeçalhos de entrada. |headersTransformation
| | Função para transformar cabeçalhos. |requestTransformation
| | Função para transformar payload de request. |responseTransformation
| | Função para transformar a resposta recebida. |onError
| | Função acionada em caso de erro. |onSuccess
| | Função acionada em caso de sucesso. |headers
| | Headers estáticos extras para requisição. |type
| | Tipo da operação (http). |method
| | Método HTTP da chamada externa. |path
| | Path da rota externa, suportando templates de parâmetros. |
---
`js`
module.exports = {
appName: process.env.appName || 'demo-api-gateway',
requestTimeout: process.env.requestTimeout || 20000,
requestPerSecond: process.env.requestPerSecond || 40,
memoryCheckInterval: process.env.memoryCheckInterval || 20000,
serverPort: process.env.serverPort || 9010,
logger: {
Console: {
level: process.env.loggerLevel || 'info'
}
},
enableRedis: true,
redisCache: {
reader: { host: 'localhost', port: 6379, connectTimeout: 5000 },
writer: { host: 'localhost', port: 6379, connectTimeout: 5000 }
},
enableElasticSearch: process.env.elasticEnable,
elasticSearch: {
indexName: process.env.elasticIndexName,
client: process.env.elasticClient,
credentials: { accessKeyId: process.env.elasticAccessKeyId, secretAccessKey: process.env.elasticSecretAccessKey },
host: process.env.elasticHost,
port: process.env.elasticPort
}
};
| Atributo | Descrição |
| ----------------------------- | -------------------------------------------------------- |
| appName | Nome da aplicação exibido nos logs e métricas. |requestTimeout
| | Tempo (ms) para timeout de chamadas a serviços upstream. |requestPerSecond
| | Limite de requisições por segundo do gateway. |memoryCheckInterval
| | Intervalo (ms) para verificar uso de memória. |serverPort
| | Porta na qual o servidor HTTP irá escutar. |logger.Console.level
| | Nível de log para console (info, warn, error). |enableRedis
| | Ativa cache e throttling com Redis. |redisCache.reader.*
| | Configurações de conexão de leitura no Redis. |redisCache.writer.*
| | Configurações de conexão de escrita no Redis. |enableElasticSearch
| | Ativa integração com OpenSearch/ElasticSearch. |elasticSearch.indexName
| | Nome do índice para armazenamento de logs. |elasticSearch.client
| | Driver utilizado para conexão com OpenSearch. |elasticSearch.credentials.*
| | Credenciais de acesso ao OpenSearch. |elasticSearch.host
| | Host/URL do serviço OpenSearch. |elasticSearch.port
| | Porta do serviço OpenSearch. |
---
`bash`
npm run build
npm run test
npm start
---
Para uso em produção é obrigatória uma licença válida. Em ambientes de desenvolvimento e testes, a licença pode ser omitida.
A variável APP_KEY deve estar presente no ambiente:
`bash``
export APP_KEY=minha-chave-da-licenca
---
* Produção: exige licença.
* Dev/local: sem restrição.
* MIT.
---
* 🏢 Empresa: P4F
* 📧 E-mail: contato@p4f.dev
© 2025 P4F - Todos os direitos reservados.