arrow_back Voltar ao curso

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:

js
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:

js
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:

bash
curl http://localhost:3000/mensagens
curl -X POST http://localhost:3000/mensagens -d '{"autor":"Ana","texto":"oi"}'

Parando o servidor

js
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.

Comentários