Skip to content

Repository files navigation

🧱 node-horizontal-api

API construída em Node.js com Express.js e Mysql, idealizada para práticas pessoais e experimentações com arquitetura modular e escalável. A proposta do projeto é oferecer uma base genérica e reutilizável para diversas aplicações RESTful — com foco em simplicidade, organização de código e boas práticas.

👨‍💻 Screenshots

App UI

⚙️ Tecnologias Utilizadas

  • Node.js: Ambiente de execução JavaScript no servidor.
  • Express.js O Express é um framework para aplicativo da web do Node.js.
  • TypeScript: Superset do JavaScript que adiciona tipagem estática.
  • Mysql: Banco de dados relacional
  • Docker: Plataforma para criação e gerenciamento de containers.
  • Kubernetes: (para implatações em grande escala)
  • Helm: (para implatações em grande escala com kubernetes)
  • Jest: Framework de testes em JavaScript.
  • Axios: Axios é um cliente HTTP baseado-em-promessas para o node.js

🚀 Como rodar o projeto

Pré-requisitos

  • Node.js
  • Docker e Docker Compose
  • Mysql (caso não use Docker)

1. Clone o repositório:

git clone https://github.com/ismaelalvesgit/node-horizontal-api.git

2. Navegue até o diretório do projeto:

cd node-horizontal-api

3. Instale as dependências:

npm install

4. Com docker:

docker-compose up -d

5. Executando...:

npm run dev

📈 Monitoramento & Observabilidade

Para garantir a confiabilidade e performance da aplicação, é recomendada a integração com ferramentas de APM (Application Performance Monitoring). Isso permite acompanhar o desempenho dos endpois da API, identificar gargalos e receber alertas sobre falhas em tempo real.

Benefícios:

  • ⏱️ Análise de tempo de processamento por chamadas de API
  • ⚠️ Detecção de falhas silenciosas e exceções não tratadas
  • 📊 Métricas de throughput e latência
  • 🔍 Tracing distribuído (ideal para arquiteturas baseadas em eventos e micro-serviços)
  • 🔔 Alertas proativos com base em métricas personalizadas

🌐 Suporte Multilíngue (i18n)

O projeto possui suporte a múltiplos idiomas através da integração com o pacote i18n, possibilitando respostas mais amigáveis e localizadas, dependendo do idioma requisitado pelo cliente.

✅ Características:

  • Traduções organizadas em arquivos separados por idioma (locales/)
  • Idioma definido por Accept-Language no header da requisição
  • Mensagens padronizadas para erros, logs e respostas da API
  • Fácil de estender para novos idiomas
  • 💡 Idiomas suportados atualmente:
    • 🇧🇷 Português (pt-BR) default
    • 🇺🇸 Inglês (en-US)

🛠️ Uso

1. QueryData

Criei uma forma simples de realizar pesquisas do dados nos endpoint´s paginados

NameDescriptionData
pagePágina atualdefault: 1
pageSizeQuantidades de itens por Páginadefault: 10
orderByOrdenação por atributodefault: ASC
orderByDescendingTipo de ordenaçãodefault: false => true=DESC, false=ASC
filterByfiltro de itensdefault: empty => "Property" "Condition" "Value"

2. FilterBy

ConditionValuesExemple
Equal"eq" or "Eq" or "EQ"name eq Ismael
NotEqual"ne" or "Ne" or "NE"name ne Ismael
GreaterThan"gt" or "Gt" or "GT"price gt 10
GreaterThanOrEqual"ge" or "Ge" or "GE"price ge 10
LessThan"lt" or "Lt" or "LT"price lt 10
LessThanOrEqual"le" or "Le" or "LE"price le 10
In"In" or "in" or "IN"name in Ismael,Raquel
Like"lk" or "Lk" or "LK"name lk ismael (only string columns)

🚀 Tipos de deploys pre-configurados

🐳 Docker

docker build -t node-horizontal-api .
docker run node-horizontal-api

Helm

Deixei configurado o helm para que sejá possivel trabalhar com kubernetes.

1. Helm Values

replicaCount: 1# Number of pod´s runningimage:
repository: ismaelalvesdoc/node-horizontal-api # Repository nametag: latest # Version TagpullPolicy: Always # Policy of download imagelivenessPath: /api/v1/healthcheck # Router (Healthcheck)service:
enabled: true # Service enabletype: NodePort # Type serviceingress: enabled: false # Ingress enable (Nginx)host: ingress.local # Host ingressrewrite: / # Proxy of pod´s routersenv: # Enviroment´s of service (Not encript)APM_SERVER_URL: "http://localhost:8200"# Name of enviroment and Value of envriroment secret: # Enviroment´s of service (Encript)DB_PASSWORD: "admin"# Name of enviroment and Value of envriroment resources: # Resources of pod´srequests: # Provisinedmemory: "700Mi"cpu: 400mlimits: # Limit of scale verticalmemory: "1Gi"cpu: 800mautoscaling: # Auto Scaling (Horizontal)enabled: true # Auto Scaling enable minReplicas: 1# Minimal replica countmaxReplicas: 10# Maximal replica countmetrics: # Target´s of auto scaling
- type: Resourceresource:
name: cputarget:
type: UtilizationaverageUtilization: 60
- type: Resourceresource:
name: memorytarget:
type: UtilizationaverageUtilization: 70

📫 Contribuições

Sinta-se à vontade para abrir issues ou enviar pull requests. Sugestões são sempre bem-vindas!

🤓 Contato

Desenvolvido por: Ismael Alves 🤓🤓🤓

Customização de Configurações do projeto

Verifique Configurações e Referencias.

About

API construída em Node.js com Express.js e Mysql, idealizada para práticas pessoais e experimentações com arquitetura modular e escalável.

Topics

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages