Recentemente, desenvolvi uma CLI simples em Node.js para visualizar a atividade recente de usuários do GitHub direto pelo terminal.
O objetivo foi praticar fundamentos de backend na prática, sem depender de bibliotecas externas, focando em entender cada etapa do processo.
💡 O que a aplicação faz
A ferramenta permite executar:
github-activity <username>
E retorna algo como:
Pushed commits to user/repo
Opened a new issue in user/repo
Starred user/repo
Os dados são obtidos através da API pública do GitHub:
GET /users/:username/events
⚠️ Desafio encontrado: dados incompletos da API
Inicialmente, a ideia era exibir a quantidade exata de commits em cada push:
Pushed 3 commits to user/repo
Porém, durante os testes, observei que a API de eventos do GitHub nem sempre retorna os dados completos.
Em vários PushEvent, o payload vinha assim:
{
"ref": "refs/heads/main",
"head": "commit_hash",
"before": "commit_hash"
}
Sem os campos:
"commits": []
"size": number
Ou seja:
- Não há lista de commits
- Não há quantidade (
size) - Apenas o intervalo (
before→head)
🧠 Análise técnica
Isso mostra que a API de eventos:
- Funciona como um feed resumido de atividades
- Não garante consistência nos dados
- Pode omitir informações dependendo do contexto
Uma alternativa mais precisa seria usar:
GET /repos/:owner/:repo/compare/:before...:head
Que retorna o número real de commits. Porém, isso exigiria:
- múltiplas requisições por evento
- controle de rate limit
- maior complexidade
Para este projeto, optei por manter a simplicidade.
✅ Solução adotada
Implementei um fallback:
Pushed commits to user/repo
Quando a quantidade de commits não está disponível.
Isso evita exibir dados incorretos e mantém a saída consistente.
🧠 Aprendizados principais
🔹 Entrada via CLI
Uso de process.argv para capturar argumentos do terminal.
🔹 Consumo de API
Utilização do fetch nativo do Node.js para requisições HTTP.
🔹 Manipulação de JSON
Filtragem e transformação de dados complexos em uma saída legível.
🔹 Tratamento de erros
- usuário não encontrado
- falhas de requisição
- propriedades indefinidas
🔹 Limitações de sistemas externos
Nem sempre o problema está no código — às vezes está na fonte de dados.
⚙️ Decisões de implementação
- Sem bibliotecas externas
- Código simples e direto
- Foco em aprendizado ao invés de abstrações
🚀 Próximos passos
- Adicionar flags (
--limit,--type) - Melhorar a formatação da saída
- Adicionar cores no terminal
- Publicar como pacote global (npm)
📌 Conclusão
Esse projeto mostrou, na prática, que:
APIs nem sempre entregam dados completos ou consistentes.
E mais importante:
Um bom software não depende de dados perfeitos — ele se adapta a eles.
Top comments (0)