Simplificando o Consumo de API's com Refit



...

Bom dia, boa tarde e boa noite devssssss, tudo bem com vocês? Eu estou bem e ansioso para o fim dessa pandemia, mas não estamos aqui para falar disso e sim sobre um pacote incrível existente no .NET que vai facilitar a vida de quem precisa consumir dados de uma ou mais API’s.

Estamos falando sobre o Refit! Esse pacote simplifica toda a parte de consumo, serialização e deserialização das requisições, além de deixar o código muito menor permitindo uma arquitetura mais limpa!

 

 

Entendendo o Refit

 

Como de praxe, antes de sairmos codando precisamos entender o que estamos fazendo e qual problema estamos resolvendo, então vamos lá.

O consumo de API’s utilizando .NET não é difícil, MAS dependendo da quantidade de rotas que você necessita consultar ou de como você organiza seu código pode ser que ele fique muito extenso e talvez até ilegível.

Como o consumo de API’s no .NET é algo “padrão” na maioria dos casos, podemos abstrair utilizando uma biblioteca e focar no que realmente importa, o negócio!

E basicamente é isso que o Refit faz, ele abstrai a parte de consumo da API ja trazendo para nós o objeto de acordo com a resposta da API.

 

 

Mãos no código

 

Antes de mostrar como funciona o Refit vou demonstrar como seria o consumo de uma API do modo tradicional no .NET e no fim do artigo você pode comparar o quão mais limpo e organizado ficou o código.

 

O código a seguir consome uma url que traz serializado um objeto do tipo Customer ja existente na aplicação.

 

Como vocês podem ter visto, o código acima está usando o modo tradicional de consumo de API’s no .NET, esse trecho será simplificado em apenas 1 linha, isso mesmo, UMA linha utilizando o Refit!

É claro que, “por trás dos panos” o Refit vai estar utilizando essa forma de consulta, mas isso será abstraido e não vamos precisar nos preocupar com isso.

Além disso, estamos consumindo a seguinte rota:

https://refitapi.herokuapp.com/api/v1/customer/

Essa rota é de uma API pública que eu fiz para podermos demonstrar nesse artigo, a documentação dela está aqui:

https://refitapi.herokuapp.com/swagger

E o projeto completo dessa API está aqui:

https://github.com/Eschechola/EntityFrameworkInMemoryAPI

 

Agora que já entendemos um pouco do que acontece por “debaixo dos panos” vamos botar esse Refit em prática!

Pra isso vamos precisar de 1 classe e 1 interface, na classe iremos criar os métodos pra consumir o Refit e na interface vamos definir o contrato no qual o Refit irá se basear para criar seus métodos de consumo.

Parece confuso a primeira vista, mas vai ficar simples, bora lá!

Ah, não podemos esquecer da nossa classe que será a entidade dos métodos de consumo.

 

Agora que já temos nossa entidade, vamos precisar instalar o Refit no nosso projeto, caso você esteja utilizando o VS2019, pode adicionar o pacote através do NuGet.

 

Caso você esteja utilizando o VS Code, pode adicionar o pacote usando o seguinte comando:

dotnet add package refit --version 5.2.1

Com o pacote já instalado vamos construir nossa interface, que irá informar para o Refit quais métodos ele deve construir.

 

Perceba que, cada método tem um tipo de retorno Taskesse tipo de retorno é necessário para podermos criar nossas requisições assíncronas, também é interessante ressaltar que em cima de cada método temos uma tag informando qual verbo HTTP queremos utilizar na requisição (GET, POST, DELETE, PUT), outra coisa que podemos observar é que nos métodos InserAsync e UpdateAsync temos um [Body] atrás do parâmetro, indicando os dados que serão serializados e enviados no corpo da requisição.

Por fim, nas rotas que necessitam enviar valores pela url basta apenas colocar “{parâmetro}”, com o mesmo nome do parâmetro recebido pelo método.

Bacana, agora quando chamarmos nossa classe do Refit ele irá mapear essa interface e construir os métodos necessários para fazermos as requisições.

Por fim vamos criar agora a classe que irá consumir os métodos do Refit.

Lembra que eu falei pra vocês que iria ser abstraído em uma linha? Vejam a mágica acontecer!

 

OBS: O mais correto aqui era se utilizar injeção de dependência, mas como não era o intuito do artigo, fiz da forma mais simples.

O foco aqui é especificamente no construtor dessa classe, perceba que, para a varíavel globa privada _customer service, passamos o valor:

RestService.For

E é nesse momento que o Refit mapeia nossa interface e cria os métodos para consumir nossa API.

Depois vem os métodos retornando os valores dos métodos criados pelo Refit.

Com 1 linha de código simplificamos um trecho de código consideravelmente grande, deixando nosso código mais limpo!

Caso você queira testar o código a seguir, eu criei um projeto console apenas pra testar o consumo, NÃO É NECESSÁRIO PARA PODER UTILIZAR O REFIT.

 

O resultado do teste

 

 

Conclusão

 

Hoje nós vimos como simplificar o consumo de API’s no .NET utilizando o Refit, uma requisição que levaria algumas linhas foi reduzida a UMA, além de ficar com uma arquitetura bem bacana agiliza o processo de desenvolvimento!

Por fim eu gostaria de dizer que, esses tempos tivemos pouco conteúdo, porém a partir desse mês de setembro de 2020 iremos ter artigo todas as semanas e a série "Fábrica de Arquitetos" irá continuar!!!

Agradeço a atenção e bons estudos!!!!!

Caso precise entrar em contato, me mande uma mensagem aqui.

Baixe o projeto clicando aqui.