Construindo Minha Primeira API Real em Go com Gin

Estou passando da teoria para a prática.

Depois de estudar structs, interfaces, goroutines e tratamento de erros, construí uma API de Pedidos (Orders API) funcional usando Go e o framework Gin.

A API realiza três tarefas:

  • Criar um pedido
  • Buscar um pedido por ID
  • Listar todos os pedidos

Escolhi o Gin porque ele simplifica o roteamento e o middleware. Ele fornece funções auxiliares como c.JSON e c.AbortWithStatusJSON. Essas ferramentas eliminam código repetitivo.

Estrutura do Projeto: Utilizei um layout de pacotes plano para manter o código limpo:

  • handler: Gerencia a lógica HTTP.
  • model: Define as estruturas de dados.
  • store: Lida com o armazenamento de dados.
  • middleware: Gerencia logs e requisições.

Principais Escolhas Técnicas:

• Validação de Dados Utilizei struct tags para serialização JSON. Também usei tags de binding do Gin. Isso garante que os campos obrigatórios existam e que os valores sejam maiores que zero.

• Persistência e Concorrência A versão atual utiliza um armazenamento em memória. Usei um sync.RWMutex para gerenciar o acesso concorrente. Isso permite múltiplas leituras, mas mantém as escritas seguras.

• Interfaces O handler depende da interface OrderStore. Ele não se importa se os dados residem na memória ou em um banco de dados. Isso facilita a troca da camada de armazenamento.

• Tratamento de Erros Utilizei errors.Is para verificar erros específicos como ErrNotFound. Isso permite que a API retorne o código de status 404 adequado ao usuário.

• Middleware Construí um logger personalizado. Ele rastreia o método, o caminho, o código de status e a duração da requisição.

Esta configuração reúne tudo o que foi aprendido nas partes anteriores. É uma base funcional, estruturada e escalável.

Como você estrutura seus projetos em Go? Você prefere pacotes planos ou um aninhamento profundo orientado a domínios?

Fonte: https://dev.to/mihirmohapatra/building-my-first-real-api-in-go-with-gin-3kio