🚀 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/harryou/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:
- 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
:usuarioe guardar em uma variável?
6. 🛠️ Prática Obrigatória 2: Escolhendo o Método
- 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:
GETouPOST? Por quê?
7. 📤 Instruções de Entrega (GitHub Desktop + Microsoft Teams)
- Faça o Commit: No GitHub Desktop, digite a mensagem (ex:
Finaliza Capítulo 12 Go_HarryPotter) e clique em Commit to main. - 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:
- O comando é
usuario := c.Param("usuario"). Gabarito da Prática 2: - O método POST! O método
GETcoloca todos os dados que você envia visíveis na barra de endereços da URL do navegador. Se usássemosGET, a senha do usuário ficaria exposta na tela e no histórico do navegador para qualquer um ver! OPOSTenvia os dados escondidos no corpo da requisição.