Aula 12 - CRUD Completo com API 🏗️
Objetivo
Objetivo: Consolidar os conhecimentos de componentes, eventos, binding e APIs para construir uma aplicação funcional completa (CRUD), lidando com a persistência de dados em um servidor.
1. O que é um CRUD? 📝
CRUD é um acrônimo para as quatro operações básicas de gerenciamento de dados:
* Create (Criar) -> POST
* Read (Ler/Listar) -> GET
* Update (Atualizar) -> PUT / PATCH
* Delete (Apagar) -> DELETE
2. Ciclo de Vida do CRUD em uma SPA (Mermaid) 📊
graph TD
A[Lista de Itens] -->|Clique em Novo| B[Formulário de Criação]
B -->|Submit POST| C{Servidor}
C -->|Sucesso| A
A -->|Clique em Editar| D[Formulário de Edição]
D -->|Submit PUT| C
A -->|Clique em Excluir| E[Confirmação]
E -->|Submit DELETE| C
3. Listagem e Exclusão 🗑️
Para listar, usamos o {#each}. Para excluir, chamamos uma função que faz o DELETE e atualiza a lista local.
async function excluir(id) {
const res = await fetch(`https://api.com/itens/${id}`, { method: 'DELETE' });
if (res.ok) {
// Remove da lista local para atualizar a tela instantaneamente
itens = itens.filter(i => i.id !== id);
}
}
4. Criação e Envio de JSON 📤
Ao criar um item, precisamos enviar o body da requisição como uma string JSON e definir o cabeçalho correto.
async function salvar() {
await fetch('https://api.com/itens', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ nome: novoNome })
});
// Recarregar a lista ou adicionar o item retornado
}
5. Simulação de Operação CRUD 💻
<div id="termynal" data-termynal>
<span data-ty="input"># Enviando novo registro...</span>
<span data-ty="progress"></span>
<span data-ty>POST /tasks { "title": "Aprender Svelte" }</span>
<span data-ty>Status: 201 Created</span>
<span data-ty># Item adicionado com sucesso!</span>
</div>
6. Mini-Projeto: Gerenciador de Contatos 🚀
Vamos construir um sistema de contatos completo:
1. Listagem: Busque uma lista de contatos de uma API de testes (ex: JSONPlaceholder).
2. Criação: Adicione um formulário no topo para inserir o nome e telefone.
3. Remoção: Cada contato na lista deve ter um botão "Excluir".
4. Feedback: Mostre um aviso de "Salvando..." enquanto a API processa o pedido.
Dica de UX
Após uma operação de sucesso (como deletar), você pode simplesmente filtrar o array local em vez de fazer uma nova requisição GET. Isso deixa a aplicação muito mais rápida para o usuário!
7. Exercício de Fixação 📝
- Quais os métodos HTTP correspondentes a cada letra do acrônimo CRUD?
- Por que precisamos do header
Content-Type: application/jsonao enviar dados? - Como você atualizaria um item da lista local após receber a confirmação de sucesso do servidor?
Próxima Aula: Vamos entender como otimizar a performance com o Ciclo de Vida e Performance! 🚀