MUTATION

< Act or effect of changing; alteration, modification. />


O que é uma API: parte I

Interface de Programação de Aplicações cuja sigla API provém do inglês Application Programming Interface é um conjunto de rotinas e padrões estabelecidos por um software para realizar troca de dados entre sistemas diferentes permitindo a automatização de processos e facilitando a criação de novas funcionalidades.

Através de uma API é possível por exemplo, criar, ler, atualizar e deletar informações sem precisar acessar esses dados diretamente, cabendo a ela receber o dado, processar internamente e de acordo com o conjunto de funções da API, devolver o resultado esperado para o usuário de forma segura e rápida.

É possível criar uma API para diversas finalidades, para o funcionamento de uma rede social, gerenciamento de vendas, preenchimento de planilhas, apps de streaming a aplicativos de relógios inteligentes, sendo seu acesso privado ou público.

Tomando de exemplo as redes sociais, é através das APIs que é possível curtir uma página do facebook sem precisar sair do site em que esteja.

Arquitetura REST

O REST – Representational State Transfer ou Transferência de Estado Representacional, trata-se de um conjunto de princípios e definições utilizadas para a criação de interfaces bem definidas permitindo a comunicação entre aplicações.

Para tudo isso acontecer a Rest API utiliza requisições HTTP responsáveis pelas operações básicas para manipulação dos dados, sendo elas:

POST: insere os dados no banco

GET: o front recebe os dados

DELETE: exclui os dados

PUT: atualiza os dados

Cliente-servidor

As aplicações existentes no cliente e no servidor devem ser separadas, assim o cliente não precisa se preocupar com a comunicação com o banco de dados, cache, log etc. E o servidor não precisa se preocupar com a interface, experiência do usuário, dentre outros.

Sem estado

O cliente pode mandar várias requisições para o servidor, mas as requisições devem ser feitas de forma independente.

Cache

A API deve utilizar o cache, evitando processamento desnecessário e aumentando a performance.

Interface Uniforme

São pequenas regras para deixar um componente o mais genérico possível, o tornando mais fácil de ser refatorado e melhorado:

    Identificação de resource: cada recource deve ter uma URI especifica e coesa.  

    Representação do resource: é a forma como a informação vai ser devolvida para o cliente. Ex: HTML, XML, JSON, TXT.

    Resposta autoexplicativa: passagem de meta informações de forma clara.

    Hypermidia: navegação por links, retornando todas as informações necessárias na resposta para que o cliente saiba navegar.

Vale ressaltar que as APIs são multiplataformas, escaláveis e confiáveis (se construídas da forma correta). Dito isto, mãos na massa!

Para a construção dessa REST API iremos precisar inicialmente do node.js e Typescript instalados na máquina, além de uma IDE (editor de código) de sua preferência, irei instalar e recomendo o Visual Studio Code pois é amigável, intuitivo, fácil de usar e completo na minha opinião.


Criando uma Rest API


1. Instalando o Básico

Depois de ter instalado o node.js e o visual studio code, crie uma pasta onde preferir no seu sistema, abra o vscode, clique em arquivo > abrir pasta, e selecione a pasta que acabou de criar. Pressione no teclado Ctrl + ‘ para visualizar o terminal e digite o código abaixo para criar o arquivo .json:

npm init -y

Em seguida instale o typescript e o ts-node-dev, este último é uma ferramenta que irá compilar o projeto em Typescript e reiniciar automaticamente quando detectar mudança nos arquivos.

npm install typescript ts-node-dev --save-dev

Abra o arquivo pakage.json e na sessão “scripts”, apague a linha “test” e inclua a linha abaixo:

"start": "ts-node-dev --respawn --transpile-only src/server.ts",

Explicando de forma resumida, “start” vai ser o comando utilizado para rodar a aplicação e ts-node-dev chama a aplicação.

A flag ‘--respawn’ pede ao ts-node para que fique observando alterações no código.

A flag ‘--transpile-only’ pede para o ts-node somente transpilar o código (transformar de TS para JS), sem fazer verificação se o código está certo, isso poupa tempo pois não precisamos fazer essa verificação enquanto desenvolvemos, iremos instalar uma ferramenta chamada Eslint (amado por muitos e odiado pela torcida do flamengo) que irá fazer essas verificações e nos pôr na linha.

Não esquecendo que ‘src/server.ts’ é o caminho do arquivo principal que será executado.

Cole este código conforme a instrução abaixo, o vscode irá cria a pasta e o arquivo dentro dela.

src/server.ts

2. Configurando o  Typescript

Agora vamos criar e configurar o arquivo tsconfig.json.

npx tsc --init
Dentro dele procure por essas seguintes chaves e configure seus valores da seguinte forma (não esqueça de remover a tag [ // ] de comentario do seu arquivo).
"target": "es2017" // especifica a versão do Javascript que será compilada
"experimentalDecorators": true  // Permite o uso de Decorators;
"emitDecoratorMetadata": true  // Mais a frente será explicado o que é Decorators;
"outDir": "./build" // Especifica o diretório de saída dos arquivos compilados;

Express.js 

Vamos instalar o Express, no terminal digite:

npm install express 
Instale os tipos do express:
npm install @types/express --save-dev
No arquivo server.ts iremos realizar uma configuração básica do express.
import express from 'express' // Importa o express para ser utilizado no arquivo server.ts
const app = express() // Criada uma constante para receber o express;
app.use(express.json()) // Informo ao express que ele deve usar arquivos json, que será o corpo (body) da nossa requisição;
app.listen(3333,() => console.log('Server is listening on port: 3333')) // Peço para que o express ouça a porta 3333 (http://localhost:3333), por aqui acessaremos nossa API. O console log é só para sabermos se está tudo ok quando a aplicação rodar.

Rotas 

Na pasta src crie o arquivo routes.ts nele iremos (futuramente) colocar nossas rotas. Insira o seguinte código:

import { Router } from "express" // importa o Router do express.
const router = Router(); // criamos uma constante com o Router.
export default router; // exportamos a constante router como padrão.
De volta no server.ts importe o routes.
import routes from './routes' 

E informe ao express que ele deve utilizar o routes. Deixe esse código abaixo do app.use(express.json()) pois o JS realiza leitura sequencial (na ordem em que definimos), ou seja, ele varre o documento de cima para baixo. Se colocarmos app.use(routes) antes, o express não consegue associar a requisição vinda da rota, consequentemente ele não pegará o conteúdo do body (app.use(express.json())).

app.use(routes);

Agora vamos testar com o script que criamos no package.json. Digite no console:

npm start
Pronto, agora temos a base de uma API para ser turbinada com rotas, middleware, autenticação e muito mais, mas essa é uma história para o próximo capítulo.
                                                                                
to be continued...

REFERÊNCIAS

Imasters, Definição, restrições e benefícios do modelo de arquitetura REST. RICARDO PLANSKY, 02 out 2014. Disponível em: <https://imasters.com.br/desenvolvimento/definicao-restricoes-e-beneficios-modelo-de-arquitetura-rest#:~:text=As%20restri%C3%A7%C3%B5es%20do%20REST&text=%C3%89%20a%20restri%C3%A7%C3%A3o%20b%C3%A1sica%20para,de%20cache%2C%20log%2C%20etc>. Acesso em 04 mai 2022.

Express. GuiaFundação Node.js. Disponível em: <https://expressjs.com/pt-br/guide/routing.html>. Acesso em 04 mai 2022.

Typescript. Doc, Microsoft. Disponível em: <https://www.typescriptlang.org/docs/>. Acesso em 04 mai 2022.


0 Comentários