Alura > Cursos de Programação > Cursos de Node.JS > Conteúdos de Node.JS > Primeiras aulas do curso Nest.js: criando uma API Restful

Nest.js: criando uma API Restful

Conhecendo o Nest - Apresentação

Boas-vindas ao curso de NestJS! Meu nome é Wanderson Macedo.

Wanderson é negro, tem cabelos pretos curtos. Usa bigode e cavanhaque e está com uma camisa escura. Está em um ambiente com iluminação azul suave. Ao fundo, uma parede de cor neutra, uma luminária com o logo da Alura e um vaso de planta.

Esse curso é para quem está dando os primeiros passos na construção de APIs Restful. E que pretende ou já está usando o NestJS em suas aplicações.

O projeto que vamos desenvolver é uma API Restful, no back-end, que foi muito inspirada em projetos como Mercado Livre ou Enjoei, onde as pessoas podem se cadastrar e colocar seus produtos disponíveis na loja.

Durante as aulas deste curso, desenvolveremos juntos:

E durante os exercícios você farão a parte de produtos:

Neste curso, não lidaremos com banco de dados, até porque vamos focar principalmente nos conceitos de construção de APIs Restful e faremos isso usando o NestJS com todas as bibliotecas e integrações que ele possui.

O banco de dados veremos em um outro momento, em outro treinamento aqui na Alura.

Lembre-se de focar bastante nos exercícios, pois teremos muita mão na massa durante este curso.

As ferramentas que utilizaremos são:

Para este curso, usaremos algumas ferramentas como o Visual Studio Code, o próprio NodeJS com o NPM para instalar as dependências, mas fique à vontade se quiser usar o Yarn, e usaremos o Postman para testar nossas requisições.

Para ter um melhor aproveitamento deste curso, é fundamental que você conheça o básico sobre TypeScript, um pouco sobre seus decorators, e também já tenha estudado a construção de APIs com Node, se ainda não tiver esses conhecimentos veja os cursos disponíveis aqui na Alura sobre Node e TypeScript.

Estou animado para construir essa aplicação com você e te espero no próximo vídeo.

Conhecendo o Nest - O que é o NestJS

Boas-vindas à primeira aula do curso sobre NestJS. Vamos desenvolver uma API seguindo o padrão Restful usando o NestJS.

O projeto que vamos desenvolver parece uma API que poderia ser usada em sites como Enjoei ou Mercado Livre, por exemplo, onde as pessoas podem entrar, cadastrar seus produtos e realizar suas vendas.

Não vamos entrar na parte de venda e pagamento, mas veremos toda a construção de uma API Restful na qual as pessoas conseguem se cadastrar e cadastrar seus produtos.

Antes de começarmos a escrever código, vamos entrar no site do NestJS para entender o que ele é e como pode nos ajudar na construção dessa aplicação.

O site nos informa que o Nest é um framework para o NodeJS que nos ajuda a construir aplicações de forma eficiente e confiável, e escalável para o lado do servidor.

Ao clicarmos no link do menu "Documentation" (documentação), vamos para a página que tem um texto introdutório que cita as motivações que o criador do Nest teve para construí-lo.

Veremos algumas palavras-chaves que descrevem um pouco do que o NestJS nos traz como benefício.

ele suporta TypeScript, que já vem configurado; permite trabalharmos de forma orientada a objetos, funcional ou usando programação reativa; e ele usa outras bibliotecas como base para o funcionamento dele, uma dessa bibliotecas é o ExpressJS, que vem configurado por padrão, e também podemos usar o Testify se fizer sentido no projeto.

Nessa introdução da documentação ele fala um pouco sobre a filosofia por trás da construção do NestJS e também tem um passo a passo de como iniciar um projeto.

No próximo vídeo começaremos o nosso projeto, te encontro lá!

Conhecendo o Nest - Criando o projeto

Nesta aula começaremos a criar o projeto da nossa loja, a API Restful que vamos construir com NestJS.

Na documentação encontraremos dicas de como criar um projeto com NestJS.

O NestJS tem uma linha de comando que cria e configura todas as dependências que ele precisa para funcionar e faz isso de forma automática. Basta executarmos um comando e ele cria o package.json, baixa as dependências e deixa o projeto completamente configurado para nós começarmos a escrita do código.

Estes são os comandos informados na documentação paras instalação e criação de novo projeto:

$ npm i -g @nestjs/cli
$ nest new project-name

Poderíamos usar o comando npm i -g @nestjs/cli para instalar a linha de comando na ferramenta, para conseguir criar projetos com o NestJS. E depois, para criar um projeto, poderíamos usar nest new project-name.

Mas eu, pessoalmente, não gosto muito de instalar ferramentas de linhas de comando de frameworks de forma grupal, até porque se tivermos projetos usando esse mesmo framework com pessoas diferentes pode ter algum problema.

Então, faremos de um jeito um pouco diferente, mas fique à vontade para fazer como a documentação indica, se você preferir.

Vamos abrir o terminal, já estou na pasta com meu usuário, C: \_alura-users\Wanderson Macedo. Agora vamos digitar o comando para o NestJS criar o projeto.

Diferente do que está na documentação, vamos digitar npx @nestjs/cli e passaremos o comando para criar o projeto que será nomeado como "loja".

npx @nestjs/cli new loja

Após pressionarmos "Enter" o NPX vai perguntar se queremos instalar o pacote do CLI, vamos responder que sim. E vamos esperar a CLI criar o projeto. Vai criar a parte de loja, o package.json, vai instalar todas as dependências que o NestJS precisa para funcionar.

Ele exibe uma lista com os arquivos criados e pergunta qual gerenciador de pacotes queremos usar no projeto e dá três opções: npm, yarn ou pnpm. Vamos selecionar o NPM e esperar algum tempo para instalação dos pacotes. Ele exibe também uma lista com os arquivos criados:

CREATE loja/ .eslintrec.js (665 bytes)
CREATE loja/prettierrc (51 bytes)
CREATE loja/nest-cli.json (118 bytes)
CREATE loja/package.json ( 1989 bytes)
CREATE loja/README.md (3340 bytes)
CREATE loja/tsconfig.build.json (546 bytes)
CREATE loja/src/app.controller.spec.ts (617 bytes)
CREATE loja/app.controller.ts (274 bytes)
CREATE loja/app.module.ts (249 bytes)
CREATE loja/app.service.ts (142 bytes)
CREATE loja/src/main.ts (208 bytes)
CREATE loja/test/app.e2e-spec.ts (630 bytes)
CREATE loja/test/jest-e2e.json (183 bytes)

Após executar, ele exibe a mensagem "Successfully created project loja" para indicar que nosso projeto foi criado e podemos entrar na pasta "loja" com o comando cd loja e executar o comando npm run start.Por padrão, o NPM executa o start se colocarmos apenas npm start.

cd loja
npm start

Ele vai imprimir alguns logs e não informa em qual porta está executando. Podemos abrir uma nova aba no navegador e acessar no navegador o endereço http://localhost:3000. O Servidor estará ouvindo requisições na porta 3000 e veremos uma mensagem de Hello World.

Agora vamos abrir o código do projeto. Eu usarei o VS Code, você pode usar o editor que preferir.

No VS Code, vamos abrir a pasta onde criamos o projeto "loja".

Agora, na seção "explorador" do VS Code, podemos ver os arquivos criados para o nosso projeto. Temos, por exemplo, o package.json que já vem com vários comandos de build, de formatação de código, inicializar o servidor, testes configurados, etc.

O NestJS já traz todas as configurações de teste, podemos ver que foi criada a pasta "test" que tem um arquivo com o teste como exemplo.

na pasta "src" temos uma série de arquivos:

O main.ts é o arquivo que inicializa o nosso projeto e fica ouvindo as requisições na porta 3000, app.listen(3000). Em breve entenderemos como os outros arquivos funcionam.

Primeiro, vamos dar uma olhada de onde vem aquele Hello World que acessamos no navegador. Vamos abrir o arquivo app.controller.ts:

import { Controller, Get} from '@nestjs/common';
import { AppService } from './app.service';

@Controller() 
 export class AppController {
 constructor(private readonly appService: AppService) {}

  @Get() 
  getHello(): string {
    return this.appService.getHello();
 }
}

Por ser em TypeScript o NestJS tem vários decorators para nós usarmos, isso facilita muito o desenvolvimento. Neste arquivos temos um @Controller, uma classe AppController, e tem um @Get() que retorna a execução do this.appService.getHello(). E o AppService é recebido no construtor da classe AppController.

Vamos clicar na classe AppService pressionando o "Ctrl", assim conseguimos abrir o arquivo app.service.ts:

import { Injectable } from '@nestjs/common';

@Injectable()
  port class AppService {
  getHello(): string {
  return 'Hello World!';
  }
}

Podemos ver que ele tem alguns decorators e tem o método getHello() que retorna o Hello World que vimos no navegador.

Inclusive, neste arquivo podemos substituir "Hello World" por "Minha Loja". Salvar este arquivo e atualizar a página no navegador.

A mensagem não mudou. O que aconteceu?

Nós inicializamos um servidor que não observa as mudanças nos nossos arquivos e por isso ele não reflete as atualizações na página do navegador. Para termos essa visualização contínua das atualizações acontecendo, precisamos executar o servidor de desenvolvimento.

Então, no terminal, vamos encerrar o processo e digitar/;

npm run start:dev

Ele vai inicializar em modo de desenvolvimento e ficará observando os arquivos. Agora, podemos atualizar a página no navegador e veremos que a mensagem que está na página mudou para "Minha Loja!".

Agora sim podemos iniciar a escrita de código da nossa aplicação. Começaremos no próximo vídeo!

Sobre o curso Nest.js: criando uma API Restful

O curso Nest.js: criando uma API Restful possui 191 minutos de vídeos, em um total de 49 atividades. Gostou? Conheça nossos outros cursos de Node.JS em Programação, ou leia nossos artigos de Programação.

Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:

Aprenda Node.JS acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas