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.
- 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
Pré-requisitos
- Node.js
- Docker e Docker Compose
- Mysql (caso não use Docker)
git clone https://github.com/ismaelalvesgit/node-horizontal-api.git
cd node-horizontal-api
npm install
docker-compose up -d
npm run dev
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
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)
- 🇧🇷 Português (pt-BR)
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" |
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) |
docker build -t node-horizontal-api .
docker run node-horizontal-api
Deixei configurado o helm para que sejá possivel trabalhar com kubernetes.
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
Sinta-se à vontade para abrir issues ou enviar pull requests. Sugestões são sempre bem-vindas!
Desenvolvido por: Ismael Alves 🤓🤓🤓
- Email: cearaismael1997@gmail.com
- Github: github.com/ismaelalvesgit
- Linkedin: linkedin.com/in/ismael-alves-6945531a0/
Verifique Configurações e Referencias.