Skip to content

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.

Notifications You must be signed in to change notification settings

ismaelalvesgit/node-horizontal-api

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

Name Description Data
page Página atual default: 1
pageSize Quantidades de itens por Página default: 10
orderBy Ordenação por atributo default: ASC
orderByDescending Tipo de ordenação default: false => true=DESC, false=ASC
filterBy filtro de itens default: empty => "Property" "Condition" "Value"

2. FilterBy

Condition Values Exemple
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 running

image:
  repository: ismaelalvesdoc/node-horizontal-api # Repository name
  tag: latest # Version Tag
  pullPolicy: Always # Policy of download image
  livenessPath: /api/v1/healthcheck # Router (Healthcheck)

service:
  enabled: true # Service enable
  type: NodePort # Type service

ingress: 
  enabled: false # Ingress enable (Nginx)
  host: ingress.local # Host ingress
  rewrite: / # Proxy of pod´s routers

env: # 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´s
  requests: # Provisined
    memory: "700Mi" 
    cpu: 400m
  limits: # Limit of scale vertical
    memory: "1Gi"
    cpu: 800m

autoscaling: # Auto Scaling (Horizontal)
  enabled: true # Auto Scaling enable 
  minReplicas: 1 # Minimal replica count
  maxReplicas: 10 # Maximal replica count
  metrics: # Target´s of auto scaling
  - type: Resource
    resource:
      name: cpu
      target:
        type: Utilization
        averageUtilization: 60
  - type: Resource
    resource:
      name: memory
      target:
        type: Utilization
        averageUtilization: 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

Watchers

Forks

Releases

No releases published

Packages

No packages published