DEV Community

Gabriel_Silvestre
Gabriel_Silvestre

Posted on • Updated on

Introdução ao Express

Tabela de Conteúdos

HTTP

O que é?

É o protocolo mais utilizado na web para a comunicação entre cliente e servidor.

O que faz?

Carrega informações cliente -> servidor / servidor -> cliente, sendo possível alterar o modo de envio através dos métodos HTTP, onde cada método possui seu significado semântico e diz para o servidor realizar uma ação diferente.

Principais métodos

Existem ao todo 39 métodos diferentes, porém os 5 principais são:

  • GET: Requisita uma informação ao servidor
  • POST: Cria uma nova informação no DB
  • PUT: Atualiza completamente uma informação no DB
  • DELETE: Deleta uma informação no DB
  • PATCH: Atualiza parcialmente uma informação no DB

Maiores detalhes

Para mais detalhes recomendo a leitura da documentação da MDN.

E recomendo os seguintes sites para consulta de status HTTP:

Voltar ao topo


APIs

O que são?

São quaisquer aplicações que permitam a comunicação programática entre diferentes serviços. Enfatizando que, APIs não se restringem apenas a Web, existem APIs para comunicação com Desktop, Mobile e SO (Sistema Operacional).

O que fazem?

Permite a pessoa desenvolvedora construir soluções integradas utilizando determinadas APIs como peças intermediárias, dessa forma não é necessário por exemplo, programar a parte de manipulação de arquivos no SO, pois o Node.js já possui tal API integrada.

API + HTTP

A maior parte das APIs da Web são APIs HTTP, ou seja, aplicações que se comunicam através de protocolos HTTP. Normalmente essas aplicações adotam a versão 1.1 do protocolo, pois nessa versão tem-se uma preocupação maior em relação à semântica dos métodos.

Porém não é obrigatório que todas as API sigam esse modelo, APIs não relacionadas a Web, como fetch API e File System API, que são integradas ao Node.js por exemplo, não utilizam o protocolo HTTP.

Voltar ao topo


Express

O que é?

É um framework criado para facilitar a criação de APIs HTTP, ele foi construído pensando no padrão REST, porém o Express não impõe nenhum padrão de desenvolvimento.

O que faz?

O Express fornece diversos recursos e abstrações úteis na hora de desenvolver uma API HTTP, facilitando o trabalho de desenvolvimento.

Voltar ao topo


API com Express

Como fazer?

Para a criação de uma API utilizando o Express precisamos apenas de três coisas, primeiro precisamos estar trabalhando dentro de um módulo Node, segundo precisamos ter o Express instalado e por fim iremos utilizar alguns métodos do framework para a criação da aplicação.

Comandos

Dentro de uma pasta precisamos inicializar um módulo Node, após isso instalamos o Express e por fim criamos o arquivo que irá conter a API. Respectivamente os comandos são:

npm init -y
npm i express
touch index.js
Enter fullscreen mode Exit fullscreen mode

Estrutura básica

Dentro de nosso arquivo JS podemos utilizar a seguinte estrutura para criar uma API simples.

// index.js

const express = require('express');
  const api = express();

  api.get('/', (_req, res) => {
   res.status(200).send('Hello World');
  });

  api.listen(3001, () => {
   console.log('Server is running on port 3001');
  });
Enter fullscreen mode Exit fullscreen mode

E para executar nossa primeira API utilizamos o comando:

node index.js
Enter fullscreen mode Exit fullscreen mode

Podemos substituir o index.js pelo nome do arquivo que contém o código acima, porém o mais comum é esse arquivo se chamar index.js ou server.js.

Voltar ao topo


Curiosidade: API sem o Express

Apenas para ilustrar o quanto o Express facilita a vida, vou demonstrar a mesma API vista acima utilizando apenas recursos nativos do Node.js.

const http = require("http");
const url = require("url");

http.createServer((req, res) => {
  const path = req.url;

  if (path === '/') {
    res.writeHead(200, {"Content-Type": "text/html;charset-utf-8"});
    res.end('Hello World');
  }
}).listen(3001, (err) => {
  if (err) {
      console.log(err);
  } else {
      console.log("Server is running on port 3001");
  }
})

Enter fullscreen mode Exit fullscreen mode

Voltar ao topo


Nodemon

O que é?

É um pacote que nos disponibiliza o hot-reload do servidor, ou seja, o servidor irá reiniciar automaticamente sempre que sofrer uma alteração, de forma similar ao que ocorre no React.

Lembrando que caso não utilizemos esse pacote, será necessário reiniciar a aplicação manualmente toda a vez que modificamos algo.

Instalação

Por ser um pacote focado no hot-reload, seu uso deve ser feito exclusivamente em ambiente de desenvolvimento, assim como sua instalação. Afinal não iremos precisar de tal funcionalidade no ambiente de produção.

npm i -D nodemon
Enter fullscreen mode Exit fullscreen mode

Utilização

Para utilizarmos esse pacote é muito simples, tudo o que precisamos fazer é criar um novo script no package.json, esse que pode ser nomeado da forma que preferirmos, porém uma recomendação é nomear como "dev".

Esse script irá conter o comando nodemon e o path até seu arquivo de entrada da aplicação, normalmente irá estar na raiz do projeto, ou dentro do diretório src/.

"scripts": {
  "dev": "nodemon index.js"
},
Enter fullscreen mode Exit fullscreen mode

Com o script definido, tudo que nos resta fazer é executá-lo, para isso chamamos o comando:

npm run dev
npm run #nome do script
Enter fullscreen mode Exit fullscreen mode

Voltar ao topo


Links Úteis

Voltar ao topo

Top comments (5)

Collapse
 
fili profile image
Fili • Edited

No http.dog ?? :(

Collapse
 
gabrielhsilvestre profile image
Gabriel_Silvestre • Edited

Hi Fili, i didn't use the http.dog specifically, but the httpstatusdogs.com, to be honest I didn't know the http.dog.

But I will make a mention, after all the more reference the better!

Collapse
 
fili profile image
Fili

indeed!

Collapse
 
jubarcelos profile image
Julia Barcelos

Legal o resumo, parabéns.
Leagl ver o código nativo, mas ele ficou maiorzinho pq tem tratativa de erro tbm né. =)

Collapse
 
gabrielhsilvestre profile image
Gabriel_Silvestre

Muito obrigado! Em uma api simples é só o tratamento de erro que deixa o código um "tiquinho" maior, mas se fosse adicionar outras rotas seria um amontado de if/else, ou no melhor dos casos, um switch/case.