← Ver a árvore completa

ROTA · 6 CLASSES · 1 GRUPOS

API do Zero

Crie handlers, rotas, JSON, validação e um CRUD completo em memória.

Pré-requisitos orientam, mas nunca bloqueiam. Cinco classes da árvore são grátis com conta.

O ARCO DA ROTA

01Web

ORDEM RECOMENDADA

6 classes, do primeiro passo ao fechamento.

Cada classe leva cerca de 15–25 minutos no novo formato de slides. Você pode sair da ordem quando outro nó fizer mais sentido.

  1. 01
    API do ZeroSeu primeiro handler HTTP

    Construa e teste em memória um handler HTTP em Go, entendendo Request, ResponseWriter, status, headers e corpo.

  2. 02
    API do ZeroRotas e ServeMux com padrões do Go 1.22

    Modele rotas por método e caminho com os padrões do ServeMux do Go 1.22, incluindo parâmetros e precedência.

  3. 03
    API do ZeroRespondendo JSON com contratos claros

    Produza e receba JSON com encoding/json, status e headers corretos, limites de corpo e validação de contrato.

  4. 04
    API do ZeroPath params e erros HTTP úteis

    Valide parâmetros de rota e devolva erros JSON consistentes com status que distinguem entrada inválida e recurso ausente.

  5. 05
    API do ZeroCRUD em memória com um store seguro

    Implemente armazenamento CRUD em memória com ids monotônicos, cópias, ordem determinística e proteção por mutex.

  6. 06
    API do ZeroCapstone: API completa de tarefas com testes

    Assemble uma API de tarefas com rotas, JSON, validação, CRUD em memória e testes determinísticos usando httptest.

PRÉVIA DA PRIMEIRA CLASSE

Seu primeiro handler HTTP

Imagine o balcão de uma oficina. O cliente entrega uma ordem de serviço com o que deseja; a pessoa no balcão lê o pedido e preenche uma resposta. Ela não dirige até a casa do cliente nem controla a rua. Seu trabalho começa quando recebe o pedido e termina quando registra o resultado. Um handler HTTP ocupa essa fronteira: recebe uma requisição e escreve uma resposta.

Essa separação resolve um problema concreto. Se a regra de resposta depende de abrir uma porta TCP, escolher uma porta livre e fazer uma chamada pela rede, cada teste fica lento e sujeito ao ambiente. Em Go, o contrato central é a interface http.Handler, com o método ServeHTTP(http.ResponseWriter, *http.Request). Você pode executar esse contrato inteiramente em memória. O servidor de produção e o teste entregam os mesmos dois argumentos.

*http.Request descreve o que chegou: método, caminho, headers, corpo e contexto. http.ResponseWriter é o destino da resposta. Primeiro você ajusta headers; depois escolhe o status; por fim escreve o corpo. A primeira escrita do corpo envia implicitamente 200 OK quando nenhum status foi informado. Essa conveniência também cria uma armadilha: tentar mudar o status depois de escrever já é tarde.

O handler não devolve uma resposta como valor. Ele produz efeitos no ResponseWriter. Em produção, esses efeitos viram bytes na conexão. Com httptest.NewRecorder, viram campos inspecionáveis: Code, Header() e Body. A mesma função fica útil no trabalho e verificável sem rede, sem espera e sem processo auxiliar.

Há três detalhes de protocolo que merecem uma inspeção mais lenta. O status representa o resultado da operação, não o estado geral do processo. Um endpoint de saúde pode usar 204 porque não precisa entregar representação; uma criação costuma usar 201; uma entrada inadequada usa 400. Escolher sempre 200 força todo consumidor a abrir o corpo para saber se a operação funcionou e piora métricas de erro.

Headers descrevem como interpretar ou tratar a resposta. Content-Type fala do corpo enviado; Allow informa quais métodos um recurso aceita. Eles não são comentários opcionais. Um navegador, proxy ou SDK pode decidir comportamento com base neles. No teste, afirmar headers impede uma regressão que não apareceria ao comparar somente texto.

O corpo é uma sequência de bytes. Converter string em []byte deixa essa fronteira explícita. Para texto pequeno, a alocação é aceitável; para respostas estruturadas, um encoder escreverá no writer. O importante agora é perceber que chamadas sucessivas a Write concatenam partes da mesma resposta, não criam respostas separadas.

Também há diferença entre função handler e valor handler. Uma função comum com a assinatura certa ganha o método ServeHTTP por meio de http.HandlerFunc. Esse adapter é um tipo da biblioteca, não geração mágica. Já um struct pode implementar ServeHTTP diretamente e guardar logger, store ou configuração. Comece com função; migre para struct quando dependências justificarem estado nomeado.

A introdução termina aqui

Entre para continuar nos slides, rodar o código e enfrentar os desafios.

Começar pela rota →

ESTA ROTA E TODAS AS OUTRAS

Qualquer plano abre os 188 nós.

Mensal R$19,90 · anual R$149 · lifetime R$499. Todos têm garantia de 7 dias.

Comparar os 3 planos →Começar pelas classes grátis