[PITCH] Como eu criei um clone do Insomnia no terminal com golang

Open Source Love PRs Welcome

Não você não leu errado, eu resolvi criar clone do Isomnia no terminal. Tudo isso começou porque eu decidi que queria aprender outras linguagens e não ficar refém apenas do ecossistema JavaScript. Uma das linguagens que eu resolvi aprender foi Golang, e meu primeiro projeto foi o gorest. A ideia seria criar uma aplicação de terminal que fosse inspirada no Insomnia, já que eu gosto de fazer tudo pelo terminal. Para isso eu usei a lib tview, a mesma usada em grandes projetos como o k9s.

Ideia de layout

Como o objetivo é ser semelhante ao Insomnia, eu coloquei a lista de requisições na esquerda, os parâmetros da requisição no meio e a resposta na direita.

Insomnia

Insomnia screenshot

Gorest

gorest screenshot

Organização de código

Como esse foi meu primeiro projeto, posso ter errado em alguns padrões, mas procurei seguir as especificações de projeto do golang standards.

gorest project layout

Dificuldades

Sou do mundo do desenvolvimento web e a criação de uma aplicação visual de terminal com uma linguagem nova foi um pouco difícil no começo. A parte de debug me deixava perdido às vezes, mas foi muito bom ver o projeto tomar forma. Se você tem experiência com golang, por favor corrija meus erros (e vícios de outras linguagens).

Deploy

O deploy foi feito com a ferramenta goreleaser. Ele o build de projetos go, permitindo que você configure a cross-compilation e entregue os binários por meio de diversas plataformas. Vale a pena conhecer essa ferramenta. Por enquanto, eu estou usando apenas as releases do GitHub.

Roadmap

  • Salvar requests localmente com sqlite;
  • Poder colar requests curl como o Insomnia permite;
  • Adicionar temas;
  • Adicionar o gorest a alguns gerenciadores de pacotes como flatpak, snap, aur, winget etc;

Muito bom! Parabéns pelo projeto. Como usuário de Linux, também curto pra caramba aplicações feitas pelo terminal haha! Sucesso aí no projeto. Já fui lá no Github e dei uma estrela para contribuir. Tentar rodar local na minha máquina depois.

Que maneiro meu amigo, eu tambem sou apaixonado por ferramentas de linha de comando. Essa idea que você teve é muito interessante/desafiadora pois você precisa conhecer de fato o protocolo HTTP para poder implementar algo desse tipo. Meus parebens mesmo, sair do javascript e cair pro golang é muito desafiador.

Valeu! Só pra complementar, é desafiador sim, mas não chega a ser no nível de precisar conhecer o protocolo http a fundo não, basta realizar as requests usando a standard library da linguagem, assim como fazemos no JavaScript (apesar de no JS geralmente usarmos outras libs como o axios).

Adorei o projeto! Estou começando no mundo Go e esse Golang Standards, que você citou, é um achado, valeu. Atualmente, eu uso a extensão Rest API client no VSCode para fazer requisições, mas gosto bastante de usar o terminal e fazer CLIs (apesar de nunca ter feito uma TUI). Dei uma estrelinha ⭐