Neste artigo, falarei sobre o Refit, uma biblioteca incrível!
Já precisou implementar comunicação entre os serviços de sua arquitetura utilizando .NET? Nesse cenário, o Refit se destaca!
Usando ele, você reduzirá bastante o código utilizado para integração com outras APIs de sua arquitetura de serviços/microserviços.
Código-fonte em https://github.com/luisdeol/artigo-refit
A biblioteca Refit
O Refit é uma biblioteca que permite representar uma REST API através de uma interface.
Confuso? Creio que seja melhor explicar com um exemplo concreto!
Imagine a seguinte situação:
- Uma API Orders precisa processar um pagamento de um pedido, e para isso ele delegará a transação a outra API Payments;
- A comunicação é síncrona, e através de uma chamada HTTP;
- Logo, será necessário: implementar um método, criar o objeto HttpClient, obter a URL, realizar a requisição, e finalmente deserializar o objeto recebido.
As mesmas operações se repetiriam para cada chamada dessa comunicação entre os serviços. Um pouco repetitivo, certo? Por mais que esses comportamentos sejam extraídos para um método à parte, ainda assim se nota redundância de código.
O Refit permite que esse processo todo seja simplificado através da definição de uma interface, que poderá ser chamada das classes clientes. Isso resulta em uma redução de código incrível.
Por exemplo, no exemplo desse artigo, a seguinte interface representa o API Payments:
Ficou bem legível, certo? É definido o tipo de retorno, o método HTTP utilizado, os parâmetros, e a rota além da base (será mostrado mais para frente como definir a rota base).
E não, não será necessário implementar ela!
Instalação da biblioteca
Os pacotes NuGet necessários para esse artigo são:
- Refit.HttpClientFactory
Utilizei o ASP.NET Core 2.2 para esse exemplo, e a versão usada desse pacote é a 4.7.51.
Com a biblioteca instalada, podemos começar a implementação.
Implementando a comunicação entre os serviços
A comunicação a ser implementada se dará entre dois serviços: Orders e Payments.
O Orders vai receber o pedido de processamento de pagamentos, e delegará isso para o serviço Payments. Ele também realizará consultas no Payments para saber o estado atual do pagamento.
O código abaixo se refere ao OrdersController, que está no serviço ExemploRefitApis.Orders.
Como mostrado anteriormente, o IPaymentsService, que é a interface que representa a API Rest ExemploRefitApis.Payments, é definida utilizando o Refit.
A definição dos endpoints da API, a serem acessados, é feita com o uso das anotações Get e Post. Os parâmetros da chamada, tanto os da URL quanto o corpo da requisição, são definidos como parâmetros do método.
Definida a interface do serviço REST, é necessário configurar o uso do Refit na classe Startup do projeto que o utilizará. Especificamente, essa configuração será feita no método ConfigureServices.
A URL base poderá ser armazenada no arquivo appSettings.json, em uma variável de ambiente, ou ainda no Azure Key Vault.
Finalmente, segue abaixo a implementação do controller Payments do serviço de mesmo nome.
Com os devidos preparativos feitos, é hora de testar a comunicação entre os serviços! Isso pode ser feito utilizando o Postman, ou o REST Client (extensão do Visual Studio Code).
Nesse exemplo, utilizo o Postman. Realizo a requisição GET na imagem abaixo.
Defini um ponto de interrupção, o que mostra que o objeto foi retornado com sucesso desde o serviço Payments.
Tudo correto até então! Com isso, confirmamos que os serviços estão devidamente configurados, e que a comunicação entre eles está funcionando.
Após isso, é testado o método HTTP POST, do serviço Orders. Novamente, é utilizado o Postman.
Novamente, defini um ponto de interrupção, o que mostra que o objeto foi retornado com sucesso desde o serviço Payments.
Perfeito! Ambos endpoints estão acessíveis desde o serviço Orders, ao serviço Payments.
Quer alavancar sua carreira como Desenvolvedor(a) .NET?
Além de Desenvolvedor .NET Sênior, eu sou instrutor de mais de 700 alunos e também tenho dezenas de mentorados.
Conheça o Método .NET Direto ao Ponto, minha plataforma com mais de 800 videoaulas, com cursos cobrindo temas relacionados a linguagem C# e Programação Orientada a Objetos, APIs REST com ASP NET Core, Microsserviços com ASP NET Core, HTML, CSS e JavaScript, Desenvolvimento Front-end com Angular, Desenvolvimento Front-end com React, JavaScript Intermediário, TypeScript, Formação Arquitetura de Software, Microsoft Azure, Agile, SQL, e muito mais.
Inclui comunidade de centenas de alunos, suporte por ela, plataforma e e-mail, atualizações regulares e muito mais.
Clique aqui para ter mais informações e garantir sua vaga
Nesse artigo, foi apresentado o Refit, junto a um exemplo completo de seu uso. O código para comunicação entre os dois serviços foi substancialmente reduzido graças a ele, sem ter a legibilidade degradada.
Código-fonte em https://github.com/luisdeol/artigo-refit
Até o próximo artigo!
Dev .NET Sênior com experiências para Irlanda e Estados Unidos, 2x Microsoft MVP, 9x Microsoft Certified, MBA em Arquitetura de Soluções, Fundador e Instrutor LuisDev Treinamentos,