Just my personal API project in GO.

gdias 34832cc581 INITIAL: Initial project GoApi with HMAC hai 3 meses
cmd 34832cc581 INITIAL: Initial project GoApi with HMAC hai 3 meses
db 34832cc581 INITIAL: Initial project GoApi with HMAC hai 3 meses
internal 34832cc581 INITIAL: Initial project GoApi with HMAC hai 3 meses
.env.example 34832cc581 INITIAL: Initial project GoApi with HMAC hai 3 meses
.gitignore 34832cc581 INITIAL: Initial project GoApi with HMAC hai 3 meses
README.md 34832cc581 INITIAL: Initial project GoApi with HMAC hai 3 meses
go.mod 34832cc581 INITIAL: Initial project GoApi with HMAC hai 3 meses
go.sum 34832cc581 INITIAL: Initial project GoApi with HMAC hai 3 meses

README.md

GoApi

Este projeto é uma API simples para aprendizado em GoLang seguindo a estrutura utilizada por padrão em empresas que utilizam Go.

🚀 Como rodar o projeto

Instale as dependências e atualize o go.mod

 go get github.com/joho/godotenv
 go get github.com/mattn/go-sqlite3
 go mod tidy

Inicie o servidor de desenvolvimento

go run ./cmd/GoApi/main.go

A aplicação estará disponível em http://localhost:8080 (ou similar, conforme o terminal indicar).

📝 HMAC

Para funcionamento desse middleware, é necessário adicionar as seguintes headers na requisição:

  • X-Timestamp: unix seconds
  • X-Signature: assinatura em hex

Alem de adicionar um pre-request script no Postman para gerar a assinatura.

```// Lê dados do ambiente const secret = pm.environment.get("hmac_secret"); if (!secret) { throw new Error("Env var 'hmac_secret' não definida no Postman."); }

// Método e path exatos const method = pm.request.method; // GET/POST // Garante que usamos somente o path (sem query) const url = new URL(pm.request.url.toString()); const path = url.pathname;

// Timestamp em segundos const ts = Math.floor(Date.now() / 1000).toString();

// Corpo bruto (para GET deve ser string vazia) let body = ""; if (method !== "GET" && pm.request.body && pm.request.body.raw) { // Use exatamente o que vai no corpo da requisição body = pm.request.body.raw; }

// Monta a mensagem canônica const msg = method + "\n" + path + "\n" + ts + "\n" + body;

// Calcula HMAC-SHA256 em hex usando CryptoJS (nativo do Postman) const signature = CryptoJS.HmacSHA256(msg, secret).toString(CryptoJS.enc.Hex);

// Define headers pm.request.headers.upsert({ key: "X-Timestamp", value: ts }); pm.request.headers.upsert({ key: "X-Signature", value: signature });```