7 - Trabalhando com Formato JSON em Go

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.

O que é JSON?

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"
}

Passo 1: Atualizando o código para responder JSON

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)

}

Entendendo as Novidades do Código

  • "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.

Passo 2: Testando o retorno JSON

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: