Home | Sprints | Requisitos | Arquitetura | Configuração | Mockups | Banco de Dados | Instalação | Gerência de Projeto | Horários Disponiveis | Git |
---|
Página da Arquitetura do Sistema
A arquitetura de pacotes pensada para o projeto divide-se em três núcleos:
Frontend:
Será um sistema projetado para acesso via internet por meio de um navegador (WebApp) feito em ReactJS. O ReactJS é uma biblioteca de JavaScript com o foco de criar interfaces de usuário em páginas web misturando códigos de HTML, CSS e JavaScript por meio da prática componentização.
Tecnologias:
Backend:
Será uma Interface de Programação de Aplicações (API) com Transferência de Estado Representacional (REST) que ficará encarregada de comunicar-se com o Frontend e Banco de Dados para que troquem informações.
Faremos uso do framework NestJS para facilitar o desenvolvimento da API. O NestJS é um framework para desenvolvimento eficiente e escalável de aplicações no lado do servidor. Utilizaremos um Mapeamento objeto-relacional (ORM), que será o Prisma, para parte da comunicação com o Banco de Dados.
Utilizaremos também o Swagger, que é uma ferramenta de software que ajuda a projetar, construir, documentar e consumir serviços da web RESTful. Ele fornece uma interface amigável para desenvolvedores e pode gerar automaticamente a documentação do serviço, além de permitir a validação de solicitações e respostas.
Tecnologias:
Banco de Dados:
O Banco de dados que optamos por utilizar na nossa aplicação será o PostgreSQL. É um sistema gerenciador de banco de dados objeto relacional (SGBD) que foi desenvolvido como projeto de código aberto.
Tecnologias:
Diagrama de Deploy
Arquitetura Cloud
Na nossa arquitetura da nuvem usaremos principalmente o serviço ECS(Elastic Container Service) da AWS. Este é um serviço de orquestração de contêineres totalmente gerenciado que facilita a implantação, o gerenciamento e a escala de aplicações em contêineres. Este seviço vai servir para garantir à nossa aplicação uma camada extra de segurança e escalabilidade.
No ECS usaremos uma instância do AWS Fargate que é um mecanismo de computação sem servidor e com pagamento conforme o uso que permite a você se concentrar em construir aplicações sem gerenciar servidores.
Para realizarmos nosso deploy no ECS usaremos o ECR(Elastic Container Registry) que é um registro de contêiner totalmente gerenciado que oferece hospedagem de alta performance para que você possa implantar imagens e artefatos de aplicações de forma confiável em qualquer lugar.
O fluxo da nosso deploy será enviar uma imagem conteinerizada da nossa aplicação, no total 3 imagens (frontend, backend e banco de dados), para o ECR. Com a imagem no ECR iremos para a configuração do ECS, onde criaremos uma task(um serviço) usando uma instancia do AWS Fargate.
Esse é um padrão de deploy oferecido pela propria AWS.
Para mais informações do ECS e seu fluxo de deploy, a AWS oferece um workshop sobre os serviços.
Boas práticas no desenvolvimento
O que são códigos de status HTTP ?
Sempre que você clicar em um link ou digitar uma URL e pressionar Enter, seu navegador envia um pedido ao servidor web para o site que você está tentando acessar. O servidor recebe e processa a solicitação, e depois envia de volta os recursos relevantes juntamente com um cabeçalho HTTP.
Sobre as classes de código de status HTTP
Os códigos de status HTTP são divididos em 5 “classes", que são:
- 100s: Códigos informativos indicando que a solicitação iniciada pelo navegador continua.
- 200s: Códigos de sucesso retornados quando o pedido do navegador foi recebido, compreendido e processado pelo servidor.
- 300s: Códigos de redirecionamento retornados quando um novo recurso foi substituído pelo recurso solicitado.
- 400s: Códigos de erro do cliente indicando que houve um problema com o pedido.
- 500s: Os códigos de erro do servidor indicam que a solicitação foi aceita, mas que um erro no servidor impediu o cumprimento da solicitação.
Os mais utilizados
- 200: "OK". Este é o código que é entregue quando uma página web ou um recurso age exatamente da maneira que é esperado.
- 201: “Created”. O servidor cumpriu o pedido do navegador e, como resultado, criou um novo recurso.
- 204: “No content”. Este código significa que o servidor processou a solicitação com sucesso, mas não vai devolver nenhum conteúdo.
- 400: "Bad Request". O servidor não pode retornar uma resposta devido a um erro no lado do cliente. Veja o nosso guia para resolver este erro.
- 401: “Not authorized”. Isto é devolvido pelo servidor quando o recurso alvo não possui credenciais de autenticação válidas.
- 403: “Forbidden”. Este código é devolvido quando um usuário tenta acessar algo que não tem permissão para visualizar. Por exemplo, tentar chegar ao conteúdo protegido por senha sem entrar no sistema pode produzir um erro 403.
- 404: “Not Found”. Esta é a mensagem de erro mais comum de todas elas. Este código significa que o recurso solicitado não existe, e o servidor não sabe se ele alguma vez existiu.
- 405: “Method Not Allowed“. Isto é gerado quando o servidor de hospedagem (servidor de origem) suporta o método recebido, mas o recurso de destino não suporta.
- 500: “Interal Server Error”. Este é um código genérico que significa simplesmente “erro interno do servidor”. Algo correu mal no servidor e o recurso solicitado não foi entregue.
- 502: “Bad Gateway”. Este código de erro tipicamente significa que um servidor recebeu uma resposta inválida de outro, tal como quando um servidor proxy está em uso. Outras vezes uma consulta ou pedido demorará muito tempo, e por isso é cancelado ou morto pelo servidor e a conexão com a base de dados quebra.
Methods – Backend API
Nas requisições, especificamos o que chamamos de método HTTP ou verbo. Na versão 1.1 do protocolo HTTP(que é a que todos usamos atualmente) temos 9 verbos diferentes. Os mais utilizados são:
GET: Essa é a requisição mais comum de todas. Através dessa requisição nós pedimos a representação de um recurso: que pode ser um arquivo html, xml, json, etc.
POST: O método POST é utilizado quando queremos criar um recurso. Quando usamos POST, os dados vão no corpo da requisição e não na URI.
PUT: Requisita que um recurso seja "guardado" na URI fornecida. Se o recurso já existir, ele deve ser atualizado. Se não existir, pode ser criado.
DELETE: Exclui o recurso especificado.
PATCH: Serve para atualizar partes de um recurso, e não o recurso todo.