Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Criando a minha primeira API com Golang

Criando a minha primeira API com Golang

Nesta sessão iremos compartilhar algumas boas práticas para criação de uma API REST usando alguns frameworks.

Avatar for Fernando Cagale

Fernando Cagale

November 25, 2019
Tweet

Other Decks in Programming

Transcript

  1. WHOAMI Claudio de Oliveira Lead Architect ➔ Book Author, Speaker

    and Developer ➔ containers e service mesh ➔ Java ➔ Go
  2. Agenda Por onde começar? E como? 01 Escolhendo o middleware

    de roteamento Dependency Injection Utilizando Mongodb como storage Docker Vantagens da utilização para Microservices 02 03 04 05 06
  3. Let's start!!! Como começar??? Múltiplos modelos de estrutura de diretórios

    Exemplos não contemplam boas práticas (CRUDs) GO não impõe um modelo padrão de estrutura de projeto
  4. Let's start!!! Como começar??? Siga os padrões convenção de nomes

    da linguagem (Respeita o movimento!!!) https://github.com/golang-standards/project-layout https://github.com/FernandoCagale/c4-order
  5. Gorilla Mux GorillaMUX Implementa abstrações de routers e dispatchers para

    a stack HTTP Roteamento simples e efetivo Facil entendimento Pode ser combinado com a standard lib http do GO Para casos + simples é bastante efetivo https://github.com/gorilla/mux
  6. { Middleware Mux func (routes *SystemRoutes) MakeHandlers() *mux.Router { r

    := mux.NewRouter() r.HandleFunc("/health", routes.healthHandler.Health).Methods("GET") r.HandleFunc("/orders", routes.orderHandler.Create).Methods("POST") r.HandleFunc("/orders", routes.orderHandler.FindAll).Methods("GET") r.HandleFunc("/orders/{id}", routes.orderHandler.FindById).Methods("GET") r.HandleFunc("/orders/{id}", routes.orderHandler.DeleteById).Methods("DELETE") return r } 01. BACKGROUND
  7. Echo - Features Echo Optimized HTTP router which smartly prioritize

    routes Build robust and scalable RESTful APIs Extensible middleware framework Data binding for JSON, XML and form payload Handy functions to send variety of HTTP responses Centralized HTTP error handling Define your format for the logger Automatic TLS via Let’s Encrypt HTTP/2 support https://github.com/labstack/echo
  8. Inversão de Controle Definição Uma struct não deve configurar estaticamente

    suas dependências, mas deve ser configurada por outro elemento de fora. https://www.freecodecamp.org/news/a-quick-intro-to-dependency-injection-what-it-is-and-when-to-use-it-7578c84fa88f/
  9. Dependency Injection Pattern Definição A idéia básica da injeção de

    dependência é ter um objeto separado, um assembler, que preenche um campo em uma struct com uma implementação apropriada para a interface do localizador https://martinfowler.com/articles/injection.html
  10. Dependency Injection Pattern Conclusões Ajuda na habilitação de baixo acoplamento,

    que é uma importante característica de uma aplicação
  11. Repository Pattern Definição Pode ser definido como uma camada de

    abstração que possibilita que o código de lógica de consulta/transformação fique concentrado. https://martinfowler.com/eaaCatalog/repository.html
  12. Repository Pattern Solução Um Repositório faz a mediação entre o

    domínio e as camadas de mapeamento de dados. Os objetos do cliente constroem as especificações da consulta declarativamente e as enviam ao Repositório. https://martinfowler.com/eaaCatalog/repository.html
  13. Repository Pattern Conclusões Isolamento da tecnologia de armazenamento Possibilita a

    abstração de problemas relacionados a consulta Adiciona mais uma camada na sua aplicação Confusão entre Repository Pattern e DAO ou DAL gera erros de implementação https://martinfowler.com/eaaCatalog/repository.html
  14. GO Objetivos Performance Excelente suporte a programação concorrente Suportado em

    múltiplas plataformas Possui garbage collector Baixo overhead computacional https://qarea.com/blog/8-reasons-you-need-to-go-golang
  15. Docker Objetivos Rapidez nos deployments Suportado em múltiplas plataformas Baixo

    overhead computacional se comparado VMs Segurança https://dzone.com/articles/top-10-benefits-of-using-docker
  16. GO & Docker Objetivos Buscam eficiência operacional Buscam redução nos

    tempos de deployment Buscam suporte a múltiplas plataformas
  17. Dicas Dicas Multi-stage builds Imagens intermediárias na criação da imagem

    Reduz o tamanho das imagens para runtime Simplificação e Padronização https://medium.com/capital-one-tech/multi-stage-builds-and-dockerfile-b5866d9e2f84
  18. Resultados Resultados Redução do tempo de bootstrap das aplicações Aumento

    de resiliência da solução Aumento de alta disponibilidade da solução
  19. Vantagens na adoção de GO na arquitetura de microservices Num

    é que funciona mesmo….o que eu ganhei com isso!!!