2
respostas

Facade em APIs

Ultimamente sempre quando vou desenvolver um API utilizo de facades para encapsular a lógica. Basicamente tenho meu controller que só pegar os parâmetros enviados (seja no query, path ou body) e passo para o método do facade que é capaz de executar tudo aquilo que é esperado ao chamar essa API.

O facade já recebeu tudo que ele precisa via injeção de dependência (repository, service, model, etc.) e ele é capaz de validar os dados e a realizar as chamadas a fim de atingir o objetivo da API. No final retorno o resultado de tudo isso, e fica ao controller apenas retornar essa dado, normalmente um DTO serializavel.

Essa é uma correta implementação desse padrão? Ou parece que estou escondendo um código procedural e chamando de facade?

2 respostas

Pelo que entendi vc está utilizando essa “facade” em uma API Rest, isso? Se for, na verdade vc não está utilizando uma facade já que o cliente não tem contato com seu sistema pela facade e sim pelo endpoint REST do seu controller. Essa “facade” q vc está criando nada mais é do que uma separação em camadas da sua arquitetura.

Já se vc pensar vc q o seu controller é o cliente da API q vc quer encapsular na facade (nao sei se faz sentido nesse caso pois parece apenas uma camada a mais na sua arquitetura), realmente parece q sua facade faz mais do que simplesmente oferecer uma interface simplificada.

Sim, seria uma API Rest. Não entendo porque não seria uma Facade pois não o cliente não tem contato com ela diretamente, e sim com o Controller.

Eu entendi como a Facade sendo algo para fornecer uma entrada simples para executar uma ação possivelmente complexa. Logo, nesse caso, eu estou pegando os dados da requisição e passando pra Facade que sabe tudo que é necessário para aquela necessidade específica. E dou como exemplo uso em uma API que é meu uso quase que diário, mas costumo fazer com que a Facade receba dados de um DTO, uma simples array ou poucos parâmetros em texto, logo seria totalmente aproveitável em outras partes do sistema e outras funcionalidades poderiam se aproveitar.

Não vejo problema como sendo a Facade algo que separa as camadas também, entre a UI (Controller, Console, etc.) e a aplicação com casos de uso, ações necessária, e etc.

Não entendi o que quer dizer como o controller sendo o cliente da API, visto que o controller em um API é basicamente a interface por onde é iniciado o fluxo. Continuo vendo como a Facade sendo uma interface para simplificar as ações uma requisição feita a API visa atender, recebendo os parâmetros de entrada necessários e orquestrando tudo que é necessário.