Conceitos do Node

Apresento o ambiente, conceitos e características do Node, NPM, Yarm, Event Loop, Call Stack e muito mais

Ambientes e conceitos

Node

A maneira mais recomendada é usar o nvm (Node Version Manager) para os sistemas Unix (Linux e MacOS). Com ele é possível gerenciar várias versões do Node na mesma máquina.

Depois de instalado o nvm, para instalar um versão do node:

❯ nvm install 10.16.3

Deixando a versão como padrão:

❯ nvm alias default 10.16.3

Com Node já vem o NPM (Gerenciador de pacotes do Node) ❯ node -v ❯ npm -v

Yarn (Gerenciador de pacotes de terceiros)

Yarn tem o mesmo propósito que o NPM, porém ele é mais performático, serve para baixar pacotes(bibliotecas de terceiros) que estão publicado no npmjs.com.

Instalação recomendada para MacOS:

❯ brew install yarn --without-node

Isso porque eu já tenho o node na máquina.

Conceitos do NodeJS

O que é Node.js?

  • Javascript no backend \o/ - Integração com banco de dados, pagamentos, código de regra de negócio; - Não lidamos com eventos do usuário final no NodeJS: - Aqui NÃO é feita a manipulação do html, css, quem faz isso é o frontend. - Rotas e integrações: - O que pode ser feito é o frontend chamar uma rota que é enviada para o servidor e o mesmo dispara para um porta que está executando a aplicação, a aplicação ouve essa requisição verifica na rota no servidor node qual é a rota e se tem a rota a qual foi chamada se sim, executa o código de negócio e retorna alguma coisa para o frontend, se não tiver a rota no backend o frontend recebe uma mensagem de erro, o qual ele deve passar de forma amigável para o usuário; - Node não é uma linguagem, ele é uma plataforma de desenvolvimento - Node foi construído em cima da engine V8. V8 é o motor do chrome, é um código que interpreta o JS para navegador, e a mesma estrutura e conceito foi usado para construir o Node para rodar no Sistema Operacional. O que faz o Node ser muito adotado é que você pode escrever um código JS que pode rodar no Frontend no Backend, salvo algumas API's que são específicas para cada. - Node é comparavél ao PHP/Ruby/Pyton/GO - Node tem algumas diferenças e vantagens em relação a essas e outras linguagem backend.

O que é o NPM?

  • NPM permite que instalemos bibliotecas de terceiros, qualquer um pode escrever uma lib, e publicar no site do npmjs, para que outros possam utilizar. Isto é você pode instalar e também fornecer libs.
  • Por que utilizar o Yarn? - é muito mais rápido e está avançando com novas funcionalidades mais rápido que o npm, por exemplo: yarn workspaces que serve para trabalhar com múltiplos projetos que tem as mesmas dependências sem precisar duplicá-las. Ver conceito de monorepo.
  • NPM é comparado ao - Composer do PHP; - Gems do Ruby; - PIP do Pyton; - Maven do Java; e por ai vai;

Características do Node

  • Arquitetura Event-loop - Baseada em eventos(Rotas na maioria das vezes); - Call Stack (ponto central da arquitetura): - Pilha de eventos, um evento pode ser como uma função sendo disparada pelo nosso código o qual é processado pelo Node de dentro de um loop que verifica se tem um novo código para ser processado. Então, todo nosso código é executado de dentro da Call Stack, cada código entra na stack e é executado no processo do event loop. - Node é single-thread; - Independente da máquina tiver vários núcleos no processador, o código em node é executado em apenas um (diferentemente no Java, etc). - O Node usa o libuv do C++ e com isso faz com que o Node fique mais rapido pois essa libuv em baixo dos panos permite que os processos da Call Stack seja executadas em threads no processador. Isto é o C++ sim pode fazer isso o NodeJS não. Ou seja, multithread acontece com um sistema em Node - Non-blocking I/O, input e output não bloqueante, isto significa que o Node pode receber requisições a qualquer momento, inclusive quando está processando alguma, isso facilita o desenvolvimento de aplicações em Real time, no momento que o frontend chama o backend, a conexão fica aberta para ambos estarem conversando. É uma implementação mais simples de ser fazer com Node, em outras linguagens que não possuem essa arquitetura fica mais complexo fazer chats, etc.

call stack node

A última função for chamada mais tarde, será a primeira executada, então a call stack recebe várias funções e a primeira a ser executada no event loop é a que entrou por último.

Exemplos de Frameworks

  • Express como base: - Sem opinião: Ele é muito flexível, não tem estrutura fechada, você pode estruturar como quiser - Ele é um microframework, com pouca coisa já pode fazer uma API - Micro-serviços: Com express fica mais fácil construir vários serviços da aplicação.
  • Frameworks opinados: - AdonisJS: Tem uma documentação muito boa, ele já tem um arquitetura e plugins disponíveis, segue a arquitetura MVC; - NestJS: Novo no mercado, mas está crescendo.

Conceitos de API Rest

Como funciona?

  • Fluxo de requisição e resposta do servidor: - Requisição feita por um cliente: - Browser (frontend) faz uma requisição (via ajax) ao servidor no backend; - Aguarda uma resposta do servidor; - Resposta retornada através de uma estrutura da de dados: - Servidor recebe a requisição, processa e envia um objeto ou um array de dados para o cliente que fez a requisição. - Cliente recebe a resposta e processa o resultado - Cliente manipula o array, exibindo as informações de forma amigável.

OBS: Diferente de uma outra aplicação, que recebe uma requisição e envia o próprio html com os dados, com REST vc recebe um JSON como resposta e o frontend manipula os dados.

  • Métodos HTTP são os mesmo no conceito Rest:
 - GET http://minhapi.com/users
 - POST http://minhapi.com/users
 - PUT http://minhapi.com/users/1
 - DELETE http://minhapi.com/users/1

Métodos: GET: Busca uma informação, por receber nenhum, 1 ou vários resultados; POST: Envia informações de forma sigilosa, os dados não aparecem na url, a melhor forma para submeter um formulário; PUT: atualiza uma informação, um atributo do usuário por exemplo: status: ativo/inativo; sexo: masculino/feminino; DELETE: para deletar um registro do banco de dados, um usuário por exemplo.

Método HTTP, Recurso/Rota

Benefícios de uma API Rest

  • Múltiplos clientes(frontends), com o mesmo backend - Pode ter um site, um aplicativo mobile e um desktop acessando a mesma API.
  • Protocolo de comunicação padronizado: - Mesma estrutura para web / mobile / API pública; - O retorno é sempre um JSON, que toda aplicação, toda linguagem de programação utiliza para se comunicar entre backend/frontend. - Comunicação com serviços externos

JSON

  • estrutura:
{  
	"user":{  
		"name":"Thiago Marinho",  
		"email":"tgmarinho@gmail.com",  
		"tech":["ReactJS", "NodeJS", "React Native"],  
		"company":{  
			"name":"Freelancer",  
			"url":"https:www.tgmarinho.com"  
			}
		}  
}

JSON pode ter, data em formato de string, Strings, Arrays, Números, Objetos. Tudo fica mais fácil de trabalhar ainda mais com Javascript.

Conteúdo da requisição

GET http://api.com/company/1/users?page=2

Route: company Route Params: 1 Query Params: ?page=2

o método GET recebe a requisição na própria URL, como pode ser visto, a rota, a rota com parâmetros e os parâmetros de consulta.

POST http://api.com/company/1/users

O método POST recebe o dados da requisição no body (Apenas POST/PUT), no formato JSON.

{  
	"user":{  
		"name":"Thiago Marinho",  
		"email":"tgmarinho@gmail.com",  
		"tech":["ReactJS", "NodeJS", "React Native"],  
}

O body não fica visível na URL.

  • Headers: São dados adicionais: usado para enviar Locale, Token, usuário logado.

HTTPS Codes

Código de três dígitos numéricos que informa o status da requisição:

Quando inicia com:

  • 1xx: informational
  • 2xx: Sucesso - 200: SUCCESS - 201: CREATED
  • 3xx: Redirection - 301: Moved Permanently - 302: Moved
  • 4xx: Client Error - 400: Bad Request - 401: Unauthorized - 404: Not Found
  • 5xx: Server Error - 500: Internal Server Error

Agora é só codar! Próximo post terá conceitos mais técnicos.

Show me the code!

Comentários