Camille846 / firstapi

Criação de uma API com NodeJS

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Criação de uma API com NodeJS

Tabela com conteúdos teóricos necessários

Node JS

Primeiramente, é importante ressaltar que NodeJS não é uma linguagem de programação, mas sim uma plataforma ou runtime que permite a execução de Javascript no servidor.

O NodeJs utiliza um interpretador de código chamado de V8 que converte o código em JavaScript em código executável pela máquina.

Para executar o código, é utilizado uma Call Stack que atua como uma pilha de processamento de códigos, onde o primeiro a entrar é o último a sair.

Apesar de suportar operações de entrada e saída assíncronas (non-blocking I/O) e ser capaz de executar código de forma assíncrona, o NodeJS possui apenas uma call stack, o qeu significa que ele executa apenas um código por vez. No entanto, ele possui um gerenciador de eventos que permite a execução de vários códigos simultaneamente.

O NodeJS utiliza a libuv, que implementa a Thread Pool e o Event Loop, possibilitando assim, a execução de códigos assíncronos.

A Thread Pool processa operações que são mais demoradas e que bloqueariam o uso da call stack.

As Callback Queues funcionam com o método FIFO (First In, First Out), ou seja, a primeira função a entrar é a primeira a sair. Elas são funções que são executadas após a conclusão de uma operação assíncrona. Elas trabalham em conjunto com o Event Loop, que verifica se a call stack está vazia para executar a próxima função.

API

API é a sigla para Application Programming Interface. Ela permite a conexão de várias aplicações e serviços de diferentes tipos, de forma padronizada e estruturada, em uma mesma fonte de dados.

Ela define um conjunto de regras e endpoints (pontos de acesso) que os desenvolvedores podem utilizar para interagir com o sistema ou serviço que disponibiliza a API.

HTTP

HTTP é a sigla para Hypertext Transfer Protocol, ou seja, Protocolo de Transferência de Hipertexto. Ele é um protocolo de comunicação que permite a transferência de informações na internet entre clientes e servidores.

Request

O Request é a requisição feita pelo cliente ao servidor. Ela é formada por blocos de informação que são enviados pelo cliente ao servidor. Esses blocos são::

  • URL/endpoints: é o endereço do servidor e o caminho para o recurso que o cliente deseja acessar. Ou seja, é a identificação de recursos.

  • Query Params: são parâmetros que são enviados na URL após o símbolo de interrogação (?). Eles são utilizados para filtrar, ordenar e paginar os dados.

      Exemplo: http://localhost:3333/users?name=Gabriel&idade=20
    
  • Método: Identifica o tipo de requisição que está sendo feita. Os principais métodos são: GET, POST, PUT, DELETE.

  • Headers: São informações adicionais que podem ser enviadas na requisição. Exemplo: Content-Type, Authorization, Accept, etc.

  • Body: É o corpo da requisição. É utilizado para enviar dados para serem criados ou atualizados. O body é utilizado apenas nos métodos POST e PUT, geralmente, em formato JSON.

Métodos HTTP

Os métodos HTTP são utilizados para indicar a ação que está sendo realizada no recurso. Os principais métodos são:

  • GET: Utilizado para consulta de informações do servidor.

      Exemplo: GET /users 
      Exemplo: GET /users/1
    
  • POST: Utilizado para criar novas registros no servidor.

      Exemplo: POST /users/1
    
  • PUT: Utilizado para alteração de registros no servidor.

      Exemplo: PUT /users/1
    
  • DELETE: Utilizado para deletar registros no servidor.

      Exemplo: DELETE /users/1
    

Response

O Response é a resposta do servidor ao cliente. Ela é formada por blocos de informação que são enviados pelo servidor ao cliente. Esses blocos são:

  • Headers: São informações adicionais que podem ser enviadas na resposta. Exemplo: Content-Type, Authorization, Accept, etc.

  • Content-Type: É o tipo de conteúdo que está sendo retornado na resposta. Exemplo: text/plain, application/json, text/html, etc.

  • Status Code: É o código de status da resposta. Ele indica o que aconteceu com a requisição. Exemplo: 200, 201, 400, 404, 500, etc.

  • Body: É o corpo da mensagem e contém os dados que foram solicitados pelo cliente. O body é utilizado apenas nos métodos POST e PUT, geralmente, em formato JSON.

Código de status

Os códigos de status são utilizados para indicar o que aconteceu com a requisição. Os códigos de status são divididos em categoria, sendo esta indicada pelo primeiro dígito do código. As principais categorias são:

  • 1xx (de 100 a 199): Indica que a requisição foi recebida e o processo continua em andamento.

  • 2xx (de 200 a 299): Indica que a requisição foi recebida, compreendida e aceita.

  • 3xx (de 300 a 399): Indica que a requisição foi recebida, compreendida e que o cliente precisa realizar uma ação para completar a requisição. Ou seja, o cliente precisa realizar um redirecionamento.

  • 4xx (de 400 a 499): Indica que houve um erro na requisição. Ou seja, o cliente realizou uma requisição inválida.

  • 5xx (de 500 a 599): Indica que houve um erro no servidor. Ou seja, o servidor não conseguiu processar a requisição.

Os principais códigos de status são:

  • 200: Indica que a requisição foi bem sucedida "OK".

  • 201: Indica que a requisição foi bem sucedida e um novo recurso foi criado "Created".

  • 204: Indica que a requisição foi bem sucedida, mas não há conteúdo para retornar "No Content".

  • 400: Indica que a requisição foi mal sucedida devido a um erro do cliente "Bad Request".

  • 401: Indica que a requisição foi mal sucedida devido a falta de autenticação do cliente "Unauthorized".

  • 403: Indica que a requisição foi mal sucedida devido a falta de permissão do cliente "Forbidden".

  • 404: Indica que a requisição foi mal sucedida devido a um erro do cliente "Not Found".

  • 500: Indica que a requisição foi mal sucedida devido a um erro do servidor "Internal Server Error".

Padrão REST

REST é a sigla para Representational State Transfer, ou seja, Transferência de Estado Representacional. Ele é um conjunto de princípios que definem como deve ser a arquitetura de um sistema. Sendo assim, é um padrão para construção de API que utiliza o protocolo HTTP e retorna uma representação do estado.

Representação do estado

A representação do estado é a forma como os dados são retornados para o cliente. Os formatos mais comuns são: JSON, XML, HTML, etc.

O React Native não lê HTML, por isso, faz-se o retorno da representação dos dados dentro de um JSON.

Módulos

São funções que são incluídas na aplicação e que podem ser reutilizadas em qualquer lugar. Eles são utilizados para organizar o código e evitar a repetição de código.

incluir módulo

Para incluir um módulo, utiliza-se a palavra reservada require e passa-se o nome do módulo como parâmetro. Exemplo:

const http = require('http');

exportar módulo

Para exportar um módulo, utiliza-se a palavra reservada module.exports e passa-se o nome do módulo como parâmetro. Exemplo:

module.exports = http;

NodeJS como servidor

O NodeJS pode ser utilizado como servidor. Para isso, utiliza-se o módulo http e a função createServer.

A função createServer tem como parâmetro uma função que recebe dois parâmetros: req e res. O req é a requisição do cliente e o res é a resposta do servidor.

Se a resposta de um HTTP deve ser mostrado como HTML, deve-se incluir o header Content-Type com o valor text/html para que o navegador entenda que o conteúdo é HTML e renderize o conteúdo através do método writeHead. Nesse método, é recebido dois parâmetros: o primeiro é o código de status e o segundo é o header.

Depois, para finalizar a resposta, utiliza-se o método end e passa-se o conteúdo que deve ser retornado.

No entanto, o servidor não está rodando. Para isso, utiliza-se o método listen e passa-se a porta que o servidor deve rodar.

Exemplo:

const http = require('http');

const server = http.createServer((req, res) => {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.end('Hello World!');
});

server.listen(3000, () => {
    console.log('Servidor rodando na porta 3000');
});

Query Params

Os query params são parâmetros que são passados na URL. Eles são utilizados para filtrar os dados. Exemplo:

                http://localhost:3000/?nome=Gabriel

WHATWG URL API

A WHATWG URL API é uma API que permite manipular URLs. Ela é utilizada para manipular os query params.

Cria-se uma nova instância da classe URL e passa-se a URL como parâmetro. Exemplo:

const { URL } = require('url');
const parsedUrl = new URL(`http://localhost:3000${request.url}`)

Para pegar os query params, utiliza-se o método searchParams porém é necessário o uso do Object.fromEntries para transformar o objeto de query string em um objeto javascript e assim poder manipular os dados. Exemplo:

request.query = Object.fromEntries(parsedUrl.searchParams);

Receber parâmetros na URL

Para receber parâmetros na URL como, por exemplo, buscar usuário por id na URL, você deve:

  • adicionar em routes.js o nome do parâmetro que será passado na URL, por exemplo, '/users/:id';

  • adicionar em UserController.js o método que será chamado na rota, por exemplo, getUserById;

  • criar variáveis em index.js para pegar o caminho da URL e o id do usuário, por exemplo, let id = null;

  • Assim, depois, criar uma nova constante para dividir a URL em partes, por exemplo:

const splitEndpoint = pathname.split('/').filter(Boolean);
  • A partir disso, criar condicionais para verificar se o tamanho do array é maior que 1, se for, o caminho da URL é o primeiro elemento do array e o id é o segundo elemento do array. Exemplo:
    if(splitEndpoint.length > 1) {
        // se o tamanho do array for maior que 1, o caminho da url é o primeiro elemento do array
        pathname = `/${splitEndpoint[0]}/:id`;
        id = splitEndpoint[1];
    }

Dessa forma, quando o usuário acessar a rota /users/1, o caminho da URL será /users/:id e o id será 1.

Deve-se, ainda, passar request.params = { id }; para que o id seja passado para o request.

About

Criação de uma API com NodeJS


Languages

Language:JavaScript 100.0%