Este projeto é uma POC para fins de estudos onde foi desenvolvido uma arquitetura utilizando conceitos de BFF
Nessa seção é descrito as dependências utilizadas na aplicação como um todo, instruções de como iniciar o projeto em modo de desenvolvimento e realização de testes.
- Node - Necessário para o Angular.
- NPM - Gerenciador de Dependências.
- Jest - Framework de testes, necessário para criação dos specs, contendo spies, stubs, assertions e mais.
- TypeScript - Superset de JavaScript que traz recursos importantes como tipagem de variáveis e funções, criação de interfaces, enum, generics e compila pra JavaScript. TypeScript traz uma segurança pro desenvolvimento e refatoração de códigos devido aos erros em tempo de compilação
- Docker e Docker Compose - Ferramenta de criação de containers para facilitar o processo de desenvolvimento da aplicação replicando a infra de produção no ambiente de desenvolvimento.
- GraphQL - É uma linguagem de query para APIs retornando data. Serve como agregação, possibilitando ao client buscar apenas o que ele necessita. Ferramenta open-source criada pelo Facebook.
- JSON-server - Ferramenta feita com o intuito de disponibilizar APIs mockadas apenas para testes.
O que foi necessário para rodar o projeto:
- Node versão v10.14.2
- GIT instalado
- Docker
O processo para rodar o projeto com docker é relativamente fácil.
- Rode o comando
docker-compose -d up --build
- Após isso:
docker-compose -d up
NOTA: A flag -d é para rodar os serviços em modo detached, caso queira ver os logs no console execute sem essa flag.
Para rodar os testes unitários é necessário dentro do diretório do BFF:
- Instalar as dependências do BFF
npm install
- rodar o comando dentro da pasta do BFF:
npm run test
- GET /health - Para verificar o status do BFF, nesse endpoint pode ser adicionado chamadas específicas para validar o status.
- ALL /api/* - Faz um proxy para todas as APIs do backend (JSON-Server)
- GET /graphql - Faz um proxy pro graphql
- ALL /custom - Onde ficará endpoints com lógicas específicas e customizadas
- GET /custom/users-modified - endpoint exemplo que retorna uma lista de usuários onde é adicionado um atributo extra (completeName) que concatena o firstName e o lastName
- BFF (Backend for Frontend) - É um design pattern para construção de APIs específicas para um client, melhorando a experiência do usuário. É uma camada entre as APIs e o client, possibilitando colocar lógicas que não deveriam nem estar no frontend mas também não deveriam estar na API. Por exemplo, algo específico para um dispositivo móvel. O BFF aqui criado tem uma interface para o GraphQL, também pode ser construido endpoints customizados nele e no /api faz um proxy direto pra chamar qualquer API do backend (nessa POC representado pelo JSON-Server).
- GraphQL - Usado como agregador de APIs.
- JSON-SERVER - Como nessa POC o GraphQL é utilizado para agregação de APIs, utilizeo o JSON-SERVER para simular as APIs, disponibilizando dados de user e company e uma relação entre eles.
- Adrian Lemes Caetano - GitHub
Esta POC possui Licença MIT - veja o arquivo LICENSE.md para saber mais detalhes.