Até o momento, nossa API está respondendo com texto puro (Plain Text). No entanto, o padrão de comunicação do mercado para APIs REST é o formato JSON. Nesta aula, vamos entender o que é o JSON e como adaptar nosso código para que ele responda de forma profissional.
JSON é a sigla para JavaScript Object Notation (Notação de Objeto JavaScript). Trata-se de um formato extremamente leve, legível por humanos e fácil de ser processado por computadores, utilizado para transferir dados entre sistemas independentemente da linguagem de programação que eles usam.
O JSON funciona com uma estrutura de chave e valor envolvida por chaves. Veja um exemplo prático:
{
"nome": "Ralf",
"idade": 36,
"curso": "APIs com Golang"
}
Para fazer com que a nossa rota GET / retorne uma estrutura de dados formatada em JSON, precisamos alterar a lógica interna da função e importar o pacote de codificação do Go. Abra o seu main.go e atualize o código com a estrutura abaixo:
// Pacote principal da aplicação
package main
// Importações: adicionamos o pacote "encoding/json"
import (
"encoding/json"
"fmt"
"net/http"
)
// Função que processa a requisição e retorna um JSON
func helloWorld(w http.ResponseWriter, r *http.Request) {
// 1. Definir o cabeçalho informando ao navegador que a resposta é um JSON
w.Header().Set("Content-Type", "application/json")
// 2. Criar uma estrutura de dados dinâmica usando um 'map' do Go
mensagem := map[string]string{
"mensagem": "Hello World!",
}
// 3. Converter o 'map' para JSON e enviar diretamente na resposta (w)
json.NewEncoder(w).Encode(mensagem)
}
// Função principal
func main() {
// Rotas
http.HandleFunc("GET /", helloWorld)
// Retornar o funcionamento do servidor
fmt.Println("Servidor em execução no endereço: http://localhost:8080")
// Configurar servidor
http.ListenAndServe(":8080", nil)
}
"encoding/json": Este pacote nativo do Go é o responsável por traduzir dados do nosso código (como objetos e mapas) para texto no formato JSON, e vice-versa.w.Header().Set("Content-Type", "application/json"): Informa formalmente ao cliente (ex: o navegador ou aplicativo) que o tipo de conteúdo entregue não é um texto comum, mas sim um documento JSON estruturado.map[string]string{...}: Uma estrutura nativa do Go usada para armazenar chaves de texto vinculadas a valores de texto. Ela se encaixa perfeitamente no formato que o JSON espera receber.json.NewEncoder(w).Encode(mensagem): Cria um codificador que pega o nosso mapa do Go, transforma em texto JSON por baixo dos panos e já injeta diretamente no fluxo de saída da nossa resposta HTTP.Se você configurou o Air nas aulas anteriores, ele já deve ter reiniciado o servidor sozinho. Caso contrário, pare o terminal com Ctrl + C e execute go run main.go de novo.
Abra o navegador e acesse http://localhost:8080. Você notará que o resultado agora aparece formatado em pares de chaves, exatamente assim:
{"mensagem":"Hello World!"}
Acompanha nossa aula que está no YouTube, vamos abordar na prática o uso do JSON em nossa API: