|

Como criar uma API REST com NodeJS parte 02 – Construindo rotas, requisições e verbos

E ai, tudo bem? Vamos prosseguir com as aulas sobre como criar uma API REST, e hoje nós vamos para uma das partes mais interessantes, na minha opinião: Criação das ROTAS e trabalhar nas requisições e verbos!

Se você não viu a primeira aula, clique aqui para poder entender como fazer toda a instalação e preparar o ambiente de desenvolvimento. E também, vou deixar aqui o índice de postagens dessa sequencia para que você possa se organizar:

** Como você pode perceber, os artigos ainda estão sendo construídos, então nos siga no Instagram para que você saiba assim que o artigo ficar disponível.

Mas sem delongas, vamos começar de fato o artigo porque aqui a gente gosta é de codar! Bora

Construindo Rotas

Bem, o primeiro passo para começar a construir as rotas é instalar o Express. O Express é uma biblioteca toda preparada para receber requisições HTTP.

Você pode fazer isso na mão e não querer utilizar o Express, mas quando já existe uma biblioteca que te ajuda com alguma coisa, é melhor você utiliza-la do que reinventar a roda.

Só pra recapitular, o nosso projeto está da seguinte forma:

Então vamos ao código, abra o arquivo index.js e coloque o seguinte código

require("dotenv-flow").config();
const express = require("express");
const app = express();

app.get("/", function (req, res, next) {
  res.status(200).send("Olá ORANGO.dev!");
});

app.listen(3000);

E claro, aqui não tem só ctrl+c,ctrl+v… Vamos pra explicação:

  • Na primeira linha nós estamos utilizando a extensão dotenv-flow, que serve para aplicar no nosso programa as variáveis de ambiente que nós configuramos na aula anterior.
  • Em seguida, nas linhas dois e três, nós importamos a biblioteca express e instanciamos ela na variavel app
  • Das linhas 5 a 7, nós estamos criando de fato uma rota do tipo GET (quando acessar a raiz da aplicação, por isso a “/”)que é a que usamos geralmente para uma requisição simples para obter alguma informação do servidor, e estamos imprimindo na tela um Olá ORANGO.dev! quando acessamos essa rota
  • E por fim, na linha 9, estamos dizendo que a nossa API ficará disponível na porta 3000. Ou seja, quando a gente acessar no browser, ela sempre será acessada com :3000 no final. PS: Isso pode ser configurado, e você pode colocar a porta que preferir

Bem, ok, agora você pode rodar a sua aplicação indo no terminal e digitando

npm run dev

E quando você acessar no seu browser http://localhost:3000 você deve ver uma tela mais ou menos assim:

Legal, mas isso está muito exposto, tem uma solução um pouco mais elegante então vamos começar DE FATO as regras de negócios com a nossa API e separar alguns arquivos. Vamos aos Handlers

Requisições e Handlers

Bem, vamos fazer um CRUD(Create, Read, Update and Delete) de usuários nessas aulas ok? Então o primeiro passo é ir na pasta handlers e criar um arquivo users.js

Este é o arquivo que vamos fazer todo o controle dos usuários. EU utilizo dessa forma pra ficar mais organizado do que todas as todas no mesmo arquivo como algumas pessoas costumam fazer.

Este arquivo deve ficar assim:

exports.fetch = (req, res, next) => {
  return res.status(200).json([
    {
      name: "Bruno Braga",
      age: 29,
    },
    {
      name: "Mathias Vilas Boas",
      age: 22,
    },
    {
      name: "Mateus Barros",
      age: 26,
    },
  ]);
};

E como de costume, vamos para a explicação de cada uma das partes

  • Na primeira linha, nós estamos exportando a função FETCH, que vai ser a responsável por buscar os usuários(futuramente no nosso banco de dados). Os parâmetros que passamos na arrow function REQ, RES e NEXT, são parâmetros de todas as rotas definidas no Express.
    • REQ(REQUEST): Todos os dados da requisição que o usuário fez, virá neste objeto
    • RES(RESPONSE): É o objeto que vai responder a requisição
    • NEXT: Deixa essa função um pouquinho por enquanto, na hora que chegarmos na etapa de Middlewares você vai entender.
  • Na segunda linha a gente responde a requisição do usuário respondendo o Status Code 200 e um JSON com uma lista de todos os usuários

Bem, agora precisamos mudar novamente o nosso index.js certo? Bora lá, ele deve ficar assim:

require("dotenv-flow").config();
const express = require("express");
const app = express();

const { fetch } = require("./handlers/user");

app.get("/", function (req, res, next) {
  res.status(200).send("Olá ORANGO.dev!");
});

app.get("/users", fetch);

app.listen(3000);

E explicando o que mudou:

  • Quando adicionamos o const { fetch } = require(“./handlers/user”); estamos incluindo a função que exportamos no handler de user
  • E também adicionamos app.get(“/users”, fetch); que faz com que na rota “/users” ele responda a função que acabamos de criar no handler

Legal, agora já temos uma estrutura mais organizada. E se você acessar o seu browser com http://localhost:3000/users você vai conseguir ver a lista de usuários que a gente colocou na função fetch

Verbos

Bem, aqui nós vamos passar rapidamente porque vai fazer mais sentido quando estivermos trabalhando com banco de dados, que é na próxima aula, mas vamos lá.

Adicione as linhas abaixo no seu arquivo users.js dentro dos handlers

exports.create = (req, res, next) => {};
exports.update = (req, res, next) => {};
exports.deleteUser = (req, res, next) => {};

Isso nada mais é para definir as funções que vão fazer a criação, a atualização e a exclusão dos seus usuários(por isso eu disse que vai fazer mais sentido na hora que tivermos banco de dados)

Voltemos no arquivo index.js e vamos adicionar essas funções na hora de importar esse handler

const { fetch, create, update, deleteUser } = require("./handlers/user");

E agora vamos criar as rotas para cada uma das funções que acabamos de criar

app.get("/users", fetch);
app.post("/users", create);
app.put("/users/:id", update);
app.delete("/users/:id", deleteUser);

Perceba que agora cada rota utiliza um verbo específico, para obter a lista usamos o GET, para criar um novo usuário, utilizamos o POST, para atualizar um usuário já existente, utilizamos o PUT e por fim, para deletar algum usuário utilizamos o verbo DELETE.

Se você não entende muito bem como funcionam os verbos recomendo vocês lerem o texto que publiquei explicando exatamente como funciona uma API REST

Legal, agora nosso arquivo de index.js estará dessa forma:

Para podermos testar cada uma das requisições sugiro vocês instalarem o Insomnia, que é um software que você consegue testar qualquer verbo de uma forma muito simples. Mas por hoje vamos apenas testar o GET que, como vimos acima.

Os arquivos da forma com que deixamos esse artigo hoje Orango – Artigo 02. Pra poder comparar se funciona no seu ou não ok?

Perfeito, tudo configurado, programamos as rotas e agora vamos partir para a parte de banco de dados na próxima aula.

  • Parte 03: MongoDB – Conexão com Banco de dados e Models

Espero que este post tenha te proporcionado algum conhecimento a mais, se tiver dúvidas deixe nos comentários… Até a próxima, e tchau! 😉

 

Posts Similares

2 Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *