Skip to content

Latest commit

 

History

History
78 lines (42 loc) · 2.32 KB

File metadata and controls

78 lines (42 loc) · 2.32 KB

API Gateway

Gateway feito em GraphQL para abstração da camada Rest para o front-end.

Get Starting

Instalando as dependências yarn install

Executando o APP yarn start

Tecnologias utilizadas

  1. Typescript como linguagem base.
  2. GraphQL utilizado para implementação do GraphQL.
  3. Apollo Server uilizado para criação do servidor GraphQL.
  4. Axios utilizado para as chamadas HTTP da API REST.

Arquitetura

Foi utilizado clean-architecture para desacoplar as regras de negócios e chamadas para a API Rest das libraries utilizadas na camada de GraphQL, facilitando mudanças no futuro.

GitHub Logo

Organização do projeto

GitHub Logo

Domain

Aqui onde concentramos nossa camada de negócios e deve ser livre de dependências externas.

GitHub Logo

Entities

Possui a representação das nossas entidades de negócios.

Repositories

Interface que abstrai a manipulação (Busca, Inclusão, Alteração e Remoção) de dados, seja em banco, outro serviço ou arquivo. Essa camada deve ser implementada na camada de gateway mantendo a inversão de dependência.

Gateway

É nessa camada onde implementamos as comunicações externas com aplicações Rest.

GitHub Logo

IHttpClient

Interface de abstração do protocolo HTTP para que não fiquemos presos a implementações específicas como Axios ou Fetch.

AxiosHttpClient

Implementação da interface IHttpClient utilizando o Axios.

RestRepository

Implementação da Interface Repository da camada domain abstraindo a utilização de Rest para a camada de GraphQL.

Factory

Fábrica de componentes das camadas gateway ou domain. Deve retornar sempre Interfaces para componentes do gateway, facilitando a mudança de qualquer componente dessa camada.

GraphQL

Essa camada é onde implementamos tudo relacionado a GraphQL.

GitHub Logo

Resolver

Camada onde implementamos nossas Queries Resolvers ou Mutation Resolvers utilizando diretamente os RestRepository.

Schema

Camada onde definimos nossos types de input ou output.