AULA 22 MÓDULO 1 HTTP ⏱ 45 min

PUT, PATCH e DELETE

PUT vs PATCH: substituição vs atualização parcial. DELETE e soft delete. A grade completa de CRUD mapeada para métodos HTTP.

PUTPATCHDELETEsoft deleteCRUD204idempotência

PUT vs PATCH — atualizar

Ambos atualizam dados, mas com semânticas diferentes. PUT substitui o recurso inteiro. PATCH atualiza apenas os campos enviados.

PUT /users/42
Envia o recurso completo. Campos não enviados são apagados/resetados. Use quando você tem o objeto inteiro.
PATCH /users/42
Envia apenas os campos a atualizar. Campos não enviados são preservados. Mais eficiente e seguro.

DELETE — remover recursos

DELETE remove o recurso. Deve ser idempotente — deletar um recurso que já foi deletado deve retornar 404, não erro 500.

RESPOSTAS POSSÍVEIS PARA DELETE
204
No Content. Deletado com sucesso. Sem body.
200
OK com body confirmando o que foi deletado.
404
Not Found. Recurso não existia.
403
Forbidden. Não autorizado a deletar.
🗂️
soft delete
Em muitos sistemas, DELETE não apaga fisicamente — seta deleted_at. Permite auditoria, recuperação e integridade referencial. Considere sempre.

CRUD mapeado para HTTP

A grade completa de operações CRUD em REST:

GET /users
Read All
Lista todos
GET /users/1
Read One
Busca um
POST /users
Create
Cria novo
PUT /users/1
Replace
Substitui completo
PATCH /users/1
Update
Atualiza parcial
DELETE /users/1
Delete
Remove
javascript
// PUT vs PATCH — diferença prática
const express = require('express')
const app = express()
app.use(express.json())

// PUT — substitui o recurso inteiro
app.put('/users/:id', async (req, res) => {
  const { name, email, role } = req.body
  if (!name || !email || !role) {
    return res.status(400).json({ error: 'Campos obrigatórios' })
  }
  // UPDATE users SET name=?, email=?, role=? WHERE id=?
  res.json({ id: req.params.id, name, email, role })
})

// PATCH — atualiza apenas o que foi enviado
app.patch('/users/:id', async (req, res) => {
  const updates = req.body // só os campos enviados
  // UPDATE users SET ...updates WHERE id=?
  res.json({ id: req.params.id, ...updates })
})

// DELETE — soft delete
app.delete('/users/:id', async (req, res) => {
  // UPDATE users SET deleted_at=NOW() WHERE id=?
  res.status(204).send()
})
quiz · aula 22
Teste seus conhecimentos
0/3 respondidas
QUESTÃO 01
Qual a diferença entre PUT e PATCH?
QUESTÃO 02
Qual status code indica que um DELETE foi bem-sucedido sem body?
QUESTÃO 03
O que é 'soft delete'?
0/3