AULA 21 MÓDULO 1 HTTP ⏱ 45 min

GET e POST

GET para leitura, POST para criação. Idempotência. Por que parâmetros sensíveis não vão na URL. Validação de body.

GETPOSTidempotênciabodyquery string201400

GET — buscar dados

GET é o método mais usado da web. Toda vez que você digita uma URL no browser ou clica em um link, é um GET. Ele deve ser seguro (sem efeitos colaterais) e idempotente (mesma requisição = mesmo resultado).

CARACTERÍSTICAS DO GET
• Parâmetros na URL — visíveis e cacheáveis
• Sem body (payload)
• Pode ser bookmarkado e compartilhado
• Sem efeito colateral — nunca altera dados
• Resposta pode ser cacheada pelo browser e CDN
⚠️
cuidado
Nunca use GET para ações que alteram dados (criar, editar, deletar). GET deve ser sempre uma leitura. Motores de busca seguem links GET — um bot pode acionar ações destrutivas se mal implementado.

POST — criar dados

POST envia dados no body da requisição — não visíveis na URL. Usado para criar novos recursos, fazer login, enviar formulários.

GET /users?name=João
Parâmetros visíveis na URL
Sem body
Idempotente
Cacheável
POST /users
Body com dados
{"name":"João","email":"..."}
Cria novo recurso
Não cacheável

Validação e status codes

Toda POST que cria dados precisa validar o body antes de salvar. Retorne o status code correto para comunicar o resultado.

idempotência
GET e PUT são idempotentes — chamar N vezes = mesmo resultado. POST não é — cada chamada pode criar um novo recurso. POST /users 3x pode criar 3 usuários iguais.
javascript
// GET com query string + POST com body — Express
const express = require('express')
const app = express()
app.use(express.json())

// GET — buscar usuários com filtro opcional
app.get('/users', async (req, res) => {
  const { search, page = 1, limit = 20 } = req.query
  // SELECT * FROM users WHERE name LIKE ? LIMIT 20 OFFSET ?
  res.json({ data: [], page, limit })
})

// POST — criar usuário com validação
app.post('/users', async (req, res) => {
  const { name, email, password } = req.body

  // Validação básica
  if (!email || !email.includes('@')) {
    return res.status(400).json({ error: 'Email inválido' })
  }

  // Criar no banco...
  const user = { id: 1, name, email }
  res.status(201).json(user)
})
quiz · aula 21
Teste seus conhecimentos
0/3 respondidas
QUESTÃO 01
GET deve ser usado quando você quer...
QUESTÃO 02
Por que parâmetros de login não devem ir na URL (GET)?
QUESTÃO 03
Se POST /orders é chamado 3 vezes com os mesmos dados, o resultado esperado é...
0/3