Projeto Final — API + CRUD + Async
Fundamentos do XanaScript • Aula 20 de 20
Hora de juntar TUDO: ORM, async, tenta/fodeu e o servidor HTTP embutido. Você vai criar uma API completa com poucas linhas — o resumo de tudo que aprendeu.
Servidor HTTP embutido (escuta)
escuta abre um servidor na porta indicada. O segundo argumento é uma função que roda a cada requisição:
escuta(3000, (req, res) => {
grita-ae(req.metodo, req.url)
se-pah (req.url == "/") {
res.enviar("Bem-vindo ao XanaScript Server!")
} ai se-pah (req.url == "/json") {
res.json({ mensagem: "Olá!", versao: "3.0" })
} ai {
res.status(404).enviar("404 - Rota não encontrada")
}
})
grita-ae("Servidor rodando em http://localhost:3000")Por que um servidor embutido?
Sem servidor, seu programa roda e acaba — não serve nada pra ninguém. Com escuta, o programa fica vivo esperando requisições. É o salto de "script local" pra "aplicação que outros usam".
Objeto da requisição (req)
| Campo | Descrição |
|---|---|
req.url |
caminho da URL |
req.metodo |
método HTTP (GET, POST...) |
req.cabecalhos |
cabeçalhos |
req.corpo |
corpo da requisição |
Objeto da resposta (res)
| Método | Descrição |
|---|---|
res.enviar(dados, tipo?) |
envia resposta |
res.json(dados) |
envia JSON |
res.status(codigo) |
define status (chainable) |
res.cabecalho(chave, valor) |
define cabeçalho (chainable) |
Projeto completo: API de mensagens com banco
Agora junte o ORM com o servidor. Crie api.xs:
DB Mensagem {
autor: eh-palavra,
texto: eh-palavra
}
cria repo = Mensagem
escuta(3000, (req, res) => {
tenta {
se-pah (req.url == "/mensagens" && req.metodo == "GET") {
res.json(repo.vê())
} ai se-pah (req.url == "/mensagens" && req.metodo == "POST") {
cria dados = req.corpo
cria nova = repo.bota-ai(dados)
res.status(201).json(nova)
} ai {
res.status(404).json({ erro: "rota não encontrada" })
}
} fodeu (erro) {
res.status(400).json({ erro: erro })
}
})
grita-ae("API rodando em http://localhost:3000")O que cada pedaço ensina
| Pedaço | Conceito usado |
|---|---|
DB Mensagem {...} |
ORM com validação |
cria repo = Mensagem |
CRUD automático |
escuta(3000, fn) |
servidor HTTP + arrow function |
se-pah (req.url...) |
condicional roteando rotas |
res.json / res.status |
resposta HTTP |
tenta ... fodeu |
tratamento de erro: erros viram 400 |
Testando
Rode xana roda api.xs, e em outro terminal:
curl http://localhost:3000/mensagens
curl -X POST http://localhost:3000/mensagens -d '{"autor":"Ana","texto":"oi"}'Parando o servidor
cria server = escuta(3000, handler)
terminamos!(server)Por que isso é o "projeto final"?
Este único arquivo usa quase tudo do curso: variáveis e tipos, condicionais, arrow functions, async/await, tenta/fodeu, módulos de dados e servidor. É o momento em que as peças se encaixam — daqui pra frente você já sabe "ler" XanaScript e construir coisas reais.