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