🚀 Capítulo 12: O Mapa do Maroto (Tema: Harry Potter)

NOTE

Este capítulo utiliza a temática de Harry Potter para explicar as rotas e os parâmetros de URL no Gin. Aprenda a rastrear e capturar dados que vêm pela URL!


1. 🎯 Objetivo da Aula

Compreender como criar rotas dinâmicas no framework Gin, a diferença entre os métodos HTTP (GET e POST) e como capturar parâmetros de rota (Path Params) e de busca (Query Params).

2. 🏢 O Cenário Prático (Seu Desafio)

No universo de Harry Potter, o Mapa do Maroto é um pedaço de pergaminho mágico que mostra a localização exata de cada pessoa dentro do castelo de Hogwarts. Para usar o mapa, você precisa passar um comando específico. Se você quiser saber onde está uma pessoa específica, você diz o nome dela (que funciona como uma variável) e o mapa te mostra o caminho!

No desenvolvimento de APIs, as Rotas são os caminhos (as URLs) que o usuário pode acessar no nosso servidor!

  • E muitas vezes nós precisamos passar informações dinâmicas na própria URL (Ex: /bruxo/harry ou /busca?nome=hermione).
  • O framework Gin possui ferramentas mágicas para capturar esses nomes direto da URL! Seu desafio é mapear as rotas!

🧠 Fundamentos: A Teoria Traduzida

🗺️ 1. O que são Métodos HTTP?

São os verbos que dizem o que o usuário quer fazer no servidor:

  • GET: Usado para buscar ou ler informações (Ex: ver a ficha de um bruxo).
  • POST: Usado para enviar ou criar informações novas (Ex: cadastrar um novo feitiço).

📍 2. Parâmetros de Rota (Path Params):

São variáveis que fazem parte do próprio caminho da URL. Usamos os dois pontos : para indicar que aquilo é uma variável no Gin.

// URL: localhost:8080/bruxo/harry
r.GET("/bruxo/:nome", func(c *gin.Context) {
    nome := c.Param("nome") // Captura a palavra "harry"
    c.String(200, "Localizando o bruxo: " + nome)
})

🔍 3. Parâmetros de Busca (Query Params):

São variáveis que vêm depois de um ponto de interrogação ? na URL. São ótimos para filtros e buscas.

// URL: localhost:8080/busca?casa=grifinoria
r.GET("/busca", func(c *gin.Context) {
    casa := c.Query("casa") // Captura a palavra "grifinoria"
    c.String(200, "Buscando alunos da casa: " + casa)
})

4. 📖 Exemplo Guiado: O Código do Mapa

Vamos criar um arquivo main.go com os dois tipos de parâmetros:

package main
 
import "github.com/gin-gonic/gin"
 
func main() {
    r := gin.Default()
 
    // Exemplo de Path Param
    r.GET("/mapa/:nome", func(c *gin.Context) {
        nome := c.Param("nome")
        c.JSON(200, gin.H{"status": nome + " está no Salão Principal!"})
    })
 
    r.Run(":8080")
}

5. 🛠️ Prática Obrigatória 1: Capturando o Nome

Se você criar a rota /perfil/:usuario no Gin:

  1. Qual comando em Go você deve usar dentro da função da rota para capturar o valor que o usuário digitou no lugar de :usuario e guardar em uma variável?

6. 🛠️ Prática Obrigatória 2: Escolhendo o Método

  1. Se você estivesse criando uma rota para o usuário digitar o seu usuário e senha para fazer login, qual método HTTP seria o mais seguro e adequado para usar: GET ou POST? Por quê?

7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)

  1. Faça o Commit: No GitHub Desktop, digite a mensagem (ex: Finaliza Capítulo 12 Go_HarryPotter) e clique em Commit to main.
  2. Envie para a Nuvem (Push): Clique em Push origin.

8. 📂 Estrutura de Pastas

spec_backend_com_golang_e_gin/
├── capitulos/
│   └── capitulo_12_harry_potter.md

💡 Checkpoint de Lógica

Os parâmetros capturados pelo c.Param ou c.Query sempre vêm como o tipo string! Se você precisar usá-los como números (int), você precisará converter usando a biblioteca strconv do Go!

10. 🔥 Desafio de Fixação

Pesquise o que significa a sigla REST no mundo das APIs web e por que usamos os métodos HTTP nela.

🔑 Gabarito de Código/Fórmulas

Gabarito da Prática 1:

  1. O comando é usuario := c.Param("usuario"). Gabarito da Prática 2:
  2. O método POST! O método GET coloca todos os dados que você envia visíveis na barra de endereços da URL do navegador. Se usássemos GET, a senha do usuário ficaria exposta na tela e no histórico do navegador para qualquer um ver! O POST envia os dados escondidos no corpo da requisição.

Capitulo Anterior | Proximo Capitulo