Skip to content

Latest commit

 

History

35 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Gateway

Gateway responsável por intermediar a comunicação entre a interface web e o servidor de processamento de imagens utilizando gRPC sobre HTTP/2.

Arquitetura

O projeto segue uma arquitetura composta por três projetos:

┌──────────────────────────────────────────────────────────────┐
│                          Browser                             │
│                   (HTML + JavaScript)                        │
└──────────────────────────────┬───────────────────────────────┘
                               │ HTTP
                               ▼
┌──────────────────────────────────────────────────────────────┐
│                        Gateway (.NET 8)                      │
│--------------------------------------------------------------│
│ • Hospeda a interface web                                    │
│ • Recebe o upload da imagem                                  │
│ • Atua como cliente gRPC                                     │
│ • Encaminha a requisição para o Server                       │
│ • Retorna a imagem processada                                │
└──────────────────────────────┬───────────────────────────────┘
                               │ gRPC + HTTP/2
                               ▼
┌──────────────────────────────────────────────────────────────┐
│                     Server (.NET 8 + gRPC)                   │
│--------------------------------------------------------------│
│ • Implementa o serviço gRPC                                  │
│ • Processa a imagem                                           │
│ • Aplica o filtro de escala de cinza                         │
│ • Retorna a imagem processada                                │
└──────────────────────────────────────────────────────────────┘

Responsabilidades

Gateway

Responsável por:

  • Hospedar a interface web.
  • Receber o upload da imagem.
  • Validar o arquivo enviado.
  • Comunicar-se com o Server através de gRPC.
  • Retornar a imagem processada ao navegador.

O Gateway não realiza processamento de imagem.


Server

Responsável por:

  • Implementar o serviço gRPC.
  • Receber a requisição enviada pelo Gateway.
  • Aplicar o filtro de escala de cinza.
  • Retornar a imagem processada.

Shared

Projeto responsável por compartilhar os contratos gRPC entre o Gateway e o Server.

Contém:

  • Arquivos .proto
  • Classes C# geradas automaticamente

Fluxo da aplicação

Usuário

↓

Seleciona uma imagem

↓

Browser

↓

POST /process-image

↓

Gateway

↓

ImageProcessingService

↓

gRPC

↓

Server

↓

Processa imagem

↓

Resposta gRPC

↓

Gateway

↓

Imagem processada

↓

Browser

Tecnologias utilizadas

  • .NET 8
  • ASP.NET Core
  • Razor Pages
  • Minimal APIs
  • gRPC
  • HTTP/2
  • Protocol Buffers
  • Kestrel

Configuração

Server

Executa o serviço gRPC.

Porta:

https://localhost:7101

Configurado para utilizar HTTP/2 através do Kestrel.


Gateway

Executa a interface web.

Porta:

https://localhost:7102

Também configurado utilizando HTTP/2.


Comunicação

O Gateway registra um cliente gRPC apontando para o Server:

builder.Services.AddGrpcClient<ImageService.ImageServiceClient>(options =>
{
    options.Address = new Uri("https://localhost:7101");
});

Toda a comunicação entre os dois backends ocorre através de gRPC.


Processamento da imagem

O endpoint responsável pelo upload é:

POST /process-image

Fluxo interno:

  1. Recebe a imagem enviada pelo navegador.
  2. Valida o arquivo.
  3. Converte a imagem para byte[].
  4. Chama o ImageProcessingService.
  5. O serviço monta a requisição gRPC.
  6. O Server processa a imagem.
  7. O Gateway retorna a imagem processada.

Organização do código

A comunicação gRPC foi isolada na classe:

ImageProcessingService

Essa classe possui como responsabilidade:

  • montar a requisição gRPC;
  • chamar o Server;
  • receber a resposta;
  • retornar apenas os bytes da imagem.

Dessa forma, o Program.cs permanece responsável apenas pelo fluxo HTTP da aplicação.


Como executar

1. Executar o Server

Selecionar o projeto Server como Startup Project e iniciar a aplicação.

O servidor ficará disponível em:

https://localhost:7101

2. Executar o Gateway

Selecionar o projeto Gateway como Startup Project e iniciar a aplicação.

A interface ficará disponível em:

https://localhost:7102

3. Testar

  1. Abrir o Gateway no navegador.
  2. Selecionar uma imagem.
  3. Clicar em Enviar para processamento.
  4. O Gateway enviará a imagem ao Server utilizando gRPC.
  5. O Server retornará a imagem em escala de cinza.
  6. A interface exibirá a imagem processada.
  7. Opcionalmente, realizar o download da imagem.

Padrão arquitetural

A solução utiliza um padrão semelhante ao Backend for Frontend (BFF).

Browser
      │
      ▼
 Gateway
      │
      ▼
  gRPC Server

Dessa forma:

  • O navegador nunca acessa diretamente o serviço gRPC.
  • Toda a comunicação ocorre através do Gateway.
  • O processamento permanece isolado no Server.

Observações

  • A comunicação entre Gateway e Server utiliza gRPC sobre HTTP/2.
  • O projeto Shared centraliza os contratos compartilhados entre os dois backends.
  • A separação entre Gateway e Server permite desacoplar a interface do processamento da imagem, facilitando a manutenção e a evolução da aplicação.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages