cefet_web

Server-side parte 6

Bancos de dados, Formulários, Arquiteturas REST
e o Jardim Zumbi 🧟


Roteiro

  1. Acesso a bancos de dados
  2. Envio de formulários
  3. Arquitetura REST
  4. Entrando no Jardim Zumbi

Bancos de dados

Acesso aos dados armazenados


SGBDs relacionais


SGBDs NoSQL


Conexão da aplicação com SGBDs

Um pool de conexões visa evitar overhead de abertura de conexões ao reutilizá-las quando se tornam ociosas.


MySQL


MySQL


Primeiros passos (connection vs pool)

  1. Usando um pool de conexões: ✅

    import mysql from 'mysql2/promise'
    const db = mysql.createPool({
      host: 'localhost',
      database: 'nome-do-db',
      user: 'me',
      password: 'secret',
      port: 3306
    
      // configuração das conexões
      multipleStatements: true,
    
      // configuração da pool
      waitForConnections: true,
      connectionLimit: 10,
      queueLimit: 0
    })
    

Fazendo consultas


Exemplos de consultas: refeições dos Hobbits


Inserindo um registro

Daria pra concatenar o valor de parâmetro na string de consulta (em vez do ?), mas deve-se tomar cuidado com ataque SQL-injection. Faça como mostrado, ou concatene usando db.escape(nomeDaRefeicao).


Excluindo um registro


Atualizando um registro


Tratamento de erros


Operações em Transações


Transações


Envio de Formulários

Recebendo info no servidor


O Elemento HTML <form>...</form>


Formulário e Botões


Envio de dados de formulário

<form action="/" method="GET" enctype="application/x-www-form-urlencoded">
  ...
</form>

action ~ URL para onde os dados serão enviados

method ~ GET: dados são colocados na querystring da URL ~ POST: dados enviados no corpo da requisição

enctype ~ application/x-www-form-urlencoded codifica dados “URL-friendly” ~ multipart/form-data para upload de arquivos


Exemplo: O que é, o que é?

O que é terrível, verde, come pedras e mora debaixo da terra??


Exemplo do monstro verde

O terrível monstro verde (etc. etc.) está com fome e você deve dar comida para ele. Ele acaba de ir para a superfície e para que ele não comece a comer pessoas, você deve dar a ele seu segundo alimento preferido: pedras.

Para isso, você deve ir até onde ele está e enviar algumas pedras para ele. Atualmente, ele está neste endereço: https://terrivel.cyclic.app/monster. Para dar comida a ele, você deve encomendá-las a partir de um formulário html.


Formulário com GET e com POST

::: figure . height: 90%; width: 270px;

Grota do monstro

:::


Para receber os dados


GET vs POST

Característica GET POST
Visibilidade Dados visíveis ao usuário Dados “ocultos”
Segurança Menos seguro Mais seguro
Restrição de tamanho Tamanho da URL (~2048) Sem restrição
Restrição de tipo de dados Apenas ASCII Sem restrição
Botão voltar Ok Dados serão ressubmetidos
Ad. aos favoritos Ok Não é possível
Histórico do navegador Parâmetros são salvos Parâmetros não são salvos

Outros métodos (além de GET/POST)


Arquitetura REST

Usando HTTP para entidades de dados


Relembrando o HTTP


Ideia do REST: dados como recursos


Uma API REST

API: conjunto de métodos públicos de um programa

API REST: conjunto de métodos públicos expostos por meio de um web service na arquitetura REST


Exemplo de API REST (1/5)


Exemplo de API REST (2/5)


Exemplo de API REST (3/5)


Exemplo de API REST (4/5)


Exemplo de API REST (5/5)


Negociação de conteúdo


Negociação de conteúdo (na MDN)


Exemplo de negociação de conteúdo


Respondendo HTML e JSON


Padrão REST e modelo de maturidade


Padrão de rotas REST

GET /entidade ~ Lista todos os membros da entidade

POST /entidade ~ Cria nova entidade

GET /entidade/:id ~ Detalhes da entidade com certo id

HEAD /entidade/:id ~ Apenas cabeçalhos da resposta

DELETE /entidade/:id ~ Exclui a entidade com certo id

PUT /entidade/:id ~ Atualiza campos da entidade com certo id


Modelo de maturidade de Richardson (🌐)


Entrando no Logo do Jardim Zumbi


Jardim Zumbi 🧟

Fictício



Atividade de hoje 🧟


Roteador do Express (na documentação)


Layout e templates parciais no handlebars (1/2)


Layout e templates parciais no handlebars (2/2)


Mensagens flash


Referências

  1. Documentação do node-mysql
  2. Seções 5.2 do livro “Node.js in Action”
  3. REST vs RESTful: diferença
  4. REST APIs must be hypertext-driven: Roy fielding xingando programadores