Contextualizando o back-end na aplicação Pomodoro
Antes de começarmos a desenvolver nossa aplicação, precisamos entender o que é o back-end (lógica e serviços no servidor).
Quando falamos de uma aplicação Pomodoro, na qual trabalharemos foco e concentração, teremos alguns minutos de foco e alguns minutos de concentração. Para desenvolver essa aplicação, precisamos compreender o back-end (lógica e serviços no servidor), que será o núcleo do nosso curso aqui. Quem guarda as tarefas? Quem sabe se uma tarefa foi completada ou se está pendente? Onde ficam essas regras? Como os dados continuam existindo depois que fecharmos a aplicação? Onde organizamos tudo isso? O front-end (camada de interface do usuário) exibe os dados. Vamos criar a aplicação Pomodoro com um front-end (camada de interface do usuário) bem estruturado, mas onde esses dados são armazenados? Quem realiza esse processamento? É isso que veremos aqui.
Definindo as responsabilidades do back-end
O que é o back-end (lógica e serviços no servidor), propriamente dito? O back-end (lógica e serviços no servidor) é responsável pelo armazenamento e pela recuperação das informações. Aqui trabalharemos com banco de dados, não com memória volátil.
Dentro do back-end (lógica e serviços no servidor), também temos as regras de negócio. Aqui processaremos e validaremos as informações. Por exemplo, existe uma tarefa que está completa ou pendente. A partir disso, podemos tomar outra ação, como enviar um e-mail ou configurar um alerta. Por meio das regras de negócio, podemos executar outras tarefas automatizadas.
Temos ainda a API (interface de programação de aplicações), um ponto muito importante dentro do back-end (lógica e serviços no servidor). A responsabilidade de uma API (interface de programação de aplicações) é expor os dados para que um front-end (camada de interface do usuário), outro back-end (lógica e serviços no servidor) ou qualquer outro sistema possa utilizá-los.
Há também a parte de segurança. Autenticação e autorização são responsabilidades do back-end (lógica e serviços no servidor), não do front-end (camada de interface do usuário). Dentro do back-end (lógica e serviços no servidor), reunimos armazenamento, regras de negócio, API (interface de programação de aplicações) e segurança. Por isso, é essencial compreendermos as responsabilidades do back-end (lógica e serviços no servidor), pois ele é uma parte central de um sistema, a camada por trás do front-end (camada de interface do usuário) que dá dinamismo para que as coisas aconteçam.
Contrastando front-end e back-end
O front-end (camada de interface do usuário) envolve arquivos como HTML (linguagem de marcação de hipertexto), CSS (folhas de estilo em cascata), JavaScript (linguagem de programação JavaScript) e o próprio React (biblioteca para construção de interfaces). É tudo aquilo que a pessoa usuária vê e com o que pode interagir.
O back-end (lógica e serviços no servidor) corresponde a tudo que é executado em um servidor remoto — remoto porque não está com a pessoa usuária. A pessoa usuária acessa um serviço, por exemplo, que está na nuvem. Existem várias linguagens de programação para trabalhar com back-end (lógica e serviços no servidor). Neste curso, trabalharemos com Java, mas poderíamos utilizar outras linguagens, como C++, Go ou Node.js. Aqui escolhemos trabalhar com Java e criaremos nosso back-end (lógica e serviços no servidor) usando conceitos do Spring Boot (framework do ecossistema Spring), além de bancos de dados.
Quando falamos de back-end (lógica e serviços no servidor), referimo-nos ao que a pessoa usuária não vê: tudo que acontece por trás, o que dá vida ao front-end (camada de interface do usuário).
Explicando onde o back-end é executado
Onde o back-end (lógica e serviços no servidor) é executado? Temos três pontos importantes para compreender:
-
Servidores físicos: um servidor físico é a máquina que permanece ligada 24 horas nos centros de dados. Hoje, essa prática é menos comum. Chamamos esse modelo de servidores on-premises (instalado localmente). Ele ainda é utilizado, especialmente em bancos. Antigamente, os bancos trabalhavam com esses servidores de forma física; ao entrar em uma instituição, por exemplo, havia uma sala grande com vários computadores, que eram os servidores dos serviços bancários. Com o passar dos anos, esse cenário se modernizou.
-
Nuvem: temos provedores como a AWS (Amazon Web Services), a Google Cloud Platform (GCP) (plataforma de nuvem da Google) e a Microsoft Azure (plataforma de nuvem da Microsoft). São servidores sob demanda, isto é, contratamos um serviço e podemos fazer deploy (publicação) em qualquer uma dessas nuvens, pagando apenas pelo que queremos usar. Se quisermos utilizar somente o servidor, pagamos por ele; se quisermos somente o banco de dados, pagamos por ele; e assim por diante.
-
Execução local: há a forma local de executar nosso back-end (lógica e serviços no servidor), que também utilizaremos no curso. Ao longo do desenvolvimento, executaremos o projeto em nossa máquina.
Definindo a API como contrato e exemplificando
Temos três formas de executar o desenvolvimento do nosso back-end (camada de servidor) aqui. Ao falar de back-end, há um ponto extremamente importante: nossa API (Interface de Programação de Aplicações). A API é um contrato entre o front-end (camada de interface) e o back-end. É a forma de definir o que queremos e o que receberemos como resposta. Esse é um conceito central para o desenvolvimento moderno, sobretudo na web.
No mundo real, há diversos exemplos. Na Netflix, quando acessamos o aplicativo, aparecem recomendações — séries e filmes — na nossa tela do front-end. Isso ocorre por meio de uma API. No contexto do Spotify, acontece o mesmo: as playlists que temos, as recomendações e aquela banda de que gostamos aparecem para nós quando acessamos o aplicativo por meio de uma API. O mesmo ocorre no Uber: quando fazemos uma viagem, como a pessoa motorista aparece no nosso aplicativo e como nós aparecemos no aplicativo da pessoa motorista, na posição de pessoa passageira, tudo é viabilizado pelo back-end por meio de APIs.
A ideia é que o back-end se conecte com o front-end. O front-end não possui a lógica necessária para realizar tudo o que uma API faz; por isso, é importante separar os contextos. Além disso, precisamos armazenar certas informações e dados, e utilizamos um banco de dados para isso. O back-end processa informações como login, dados da pessoa usuária, cartões (como cartão de crédito) e informações que manipulamos, por exemplo, a localidade para a qual queremos ir. Tudo isso é armazenado em um banco de dados.
Ilustrando com a analogia do restaurante e reforçando boas práticas
Fazendo uma analogia com o que temos no mundo real, imaginemos um restaurante. Nós, como pessoas clientes, fazemos um pedido — por exemplo, um prato de massa. Não sabemos como a comida é preparada, mas solicitamos ao atendente o prato desejado. O atendente recebe o pedido e o leva à cozinha. Na analogia, quem é o atendente no contexto do back-end? A API. A API recebe o pedido feito pela pessoa cliente (isto é, pelo front-end) e o leva ao back-end. A cozinha realiza o processamento, produz o prato de massa e o atendente o traz de volta. É exatamente assim que o back-end funciona: o front-end faz a solicitação junto com a pessoa cliente; existe uma API para intermediar o caminho — muitas vezes chamada de middleware (camada intermediária) — e essa API leva a solicitação ao back-end. O back-end processa o pedido feito pelo front-end, devolve para a API e a API retorna para a pessoa cliente.
Um ponto importante: a pessoa cliente — o front-end — nunca se comunica diretamente com a cozinha — o back-end. Se virmos isso em algum exemplo, trata-se de uma má prática de desenvolvimento. O front-end, por si só, não deve conter lógica de negócio; tudo isso deve estar no back-end. A comunicação deve sempre passar pela API, que organiza e orquestra a comunicação entre front-end e back-end.
Construindo a arquitetura da aplicação Pomodoro
Olhando para a arquitetura da aplicação, o que vamos desenvolver no nosso Pomodoro? O front-end nós já temos: o temporizador, a lista de tarefas e uma UI (Interface do Usuário) completa. Precisamos desenvolver mais duas camadas. Usaremos Spring Boot para criar uma API. Trabalharemos com REST (Transferência de Estado Representacional), com endpoints (rotas) e com as regras de negócio, pois, novamente, não podemos ter regras de negócio no front-end. Iremos também para uma terceira camada, a camada de banco de dados. Precisamos persistir, por exemplo, as tarefas e se foram concluídas ou não. Mais adiante, adicionaremos dados da pessoa usuária e autenticação. Tudo isso deve estar na camada de back-end. Teremos uma camada de banco de dados para armazenar e persistir os dados.
Essa será exatamente a arquitetura que construiremos ao longo do curso. Na próxima aula, falaremos sobre como a web se comunica por meio do back-end.