Backend for Dummies (Introdução)

João Victor Golias
Outsmart Digital
Published in
4 min readOct 21, 2018

O backend de uma aplicação normalmente possui a responsabilidade de toda regra de negócio e de comunicação com o banco de dados. Como qualquer projeto de software, ele exige que tomemos várias decisões importantes durante todo o processo. Dentre elas, as mais importantes talvez sejam a linguagem, a arquitetura e a estrutura.

No nosso backend, preferimos usar Typescript. Essa linguagem pode ser resumida como ‘um javascript tipado’; basicamente, ela permite que atribuamos tipos às nossas variáveis e traz consigo alguns conceitos de OO (interfaces, encapsulamento, atributos estáticos, e outros). Dizemos que é, na verdade, um superset (superconjunto) do Javascript, porque, no final das contas, um código em Typescript é transpilado para Javascript. Isso faz com que ele tenha o comportamento desta última linguagem, podendo gerar alguns erros que outras, com uma tipagem mais forte, poderiam ter efeitos mais amenizados.

Essa linguagem traz diversos benefícios: uma sintaxe bem simples; vários métodos prontos que facilitam usar, por exemplo, array; uma maneira bem simples de se construir e manipular objetos; uma comunidade muito grande… É por isso que a escolhemos.

A arquitetura de um projeto de software implica em definir quais serão as diretrizes organizacionais dos arquivos, podendo implicar em regras de pastas, nomeação de arquivos e quantidade de camadas. Uma arquitetura má definida pode implicar na criação de diversas classes e métodos subutilizados e de difícil interpretação. Por isso, esta talvez seja a decisão mais delicada do projeto.

A nossa é baseada em Clean Architecture e possui três camadas. Data é a responsável por manipulações direto no nosso banco de dados; todas as funções de CRUD, por exemplo, ficam lá. Core é o ‘núcleo’ do nosso projeto por ser o responsável por todas as lógicas de negócio, conectando, quando necessário, várias classes que mexem com banco de dados. Presentation é a responsável pela comunicação da nossa aplicação com eventos externos, contendo o contrato para que outros agentes acessem nossas funções.

Atualmente, existem diversos serviços que possuem toda estrutura necessária para hospedarmos os projetos: banco de dados; ambiente para deploy; análise de desempenho; histórico de chamadas, etc. Para os nossos, decidimos usar a Amazon Web Service (AWS). Abaixo, há alguns serviços que utilizamos:

  • Lambda: É uma estrutura que permite que hospedemos nosso código sem nos preocuparmos com o gerenciamento do servidor;
  • Cognito: O serviço de autenticação da AWS. Usamos para login e signup, por garantir uma estrutura segura de uma maneira simples;
  • DynamoDB: É o banco de dados não relacional da AWS. Para manipulação dele, usamos a biblioteca type-dynamo;
  • API Gateway: É um serviço que permite criar, publicar, monitorar nossas API de uma forma fácil e segura.

Para entender tudo isso de uma maneira simples, preparamos um treinamento que consiste em elaborar um projeto com 6 etapas passando por cada parte importante para compor o backend de um projeto nosso. Abaixo, há uma descrição resumida e um link para acessar os enunciados e tutorias de cada projeto.

Etapa 1 - Meu-Primeiro-Script.ts

Essa etapa consiste em uma manipulação de arquivos JSON (JavaScript-Object-Notation), que contém arrays com informações de usuários e relações entre eles. Além disso, conceitos importantes serão abordados, como: timestamp; funções de array; erros e tratamentos; e sintaxe básica de Typescript.

O mais interessante é o desafio de fazer um projeto em Typescript, usando o Node.js do zero, sem uma arquitetura ou estrutra pré-definidas.

Etapa 2 - API e Endpoint

Depois dessa familiarização, começa-se por transformar as funções implementadas em endpoints de uma API. Para isso, usará o nosso base-project e uma lib interna que funciona como builder do nosso backend, o os-bob. Isso implicará em um primeiro contato com a estrutura da AWS (mais especificamente o serviço API Gateway) e a nossa arquitetura (mexendo com a camada de Presentation).

Será ensinado um dos maiores medos dos programadores novos: deploy; e o uso do Postman

Etapa 3 - Regras de negócio

Aqui não será ensinado nenhum conceito grande novo, e serve mais como um aprofundamento da nossa estrutura. Introduziremos a nossa camada de negócios, fazendo o uso de duas fontes de dados diferentes.

Também será abordado, pela primeira vez, o conceito de CRUD e como uma task do Jira (nossa ferramenta de organização interna) pode ser transformada em um endpoint.

Etapa 4 - Data

Depois dessa etapa, já terá visto toda a nossa arquitetura e estará pronto para implementar diversos tipos de endpoint. Usaremos a camada Data para acessar as informações dos JSON.

Aqui, uma task delicada será pedida e amplamente discutida: a deleção de um usuário e todas as informações relacionadas a ele.

Etapa 5 - DynamoDB

Uma mudança complicada no nosso projeto será feita: a fonte dos dados. Pararemos de usar os JSON e será mostrado como nosso banco de dados funciona e o uso do type-dynamo.

Por fim, espera-se que se tenha uma boa compreensão de porque e como é a nossa arquitetura.

Etapa 6 - Sign’s

O objetivo dessa etapa é uma familiarização com o serviço de sing-in e sing-up da AWS, o cognito. Passaremos por endpoints básicos de autenticação e autorização, além de fazer um refactor do projeto para que ele exija um usuário logado em alguns endpoints.

O backend é uma parte importantíssima de projetos web e mobile, permitindo que isolemos as regras de negócio do código que o usuário usa. Fazer um endpoint e uma API pode parecer um monstro de 7 cabeças mas é simples, quando se entende toda sua elegante composição.

--

--