O Refit é uma biblioteca de código aberto para .NET que simplifica a criação de chamadas HTTP baseadas em REST. Ele gera automaticamente clientes HTTP a partir de interfaces, tornando as chamadas a APIs REST muito mais fáceis e limpas. O Refit também lida com serialização e deserialização de JSON e permite adicionar headers e parâmetros de forma simples. Neste exemplo, veremos como configurar o Refit para realizar uma requisição GET e obter dados de uma API.
Bibliotecas:
Para usar a biblioteca Refit, instale o seguinte pacote NuGet no seu projeto:
Install-Package Refit
Código de Exemplo:
using Refit;
using System;
using System.Threading.Tasks;
namespace RefitExemplo
{
// Definindo a interface que representa a API
public interface IJsonPlaceholderApi
{
[Get("/posts/{id}")]
Task<Post> GetPostAsync(int id);
}
// Classe para mapear a resposta
public class Post
{
public int Id { get; set; }
public string Title { get; set; }
public string Body { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
// Criando o cliente da API usando Refit
var apiClient = RestService.For<IJsonPlaceholderApi>("https://jsonplaceholder.typicode.com");
// Fazendo uma requisição GET para obter um post
var post = await apiClient.GetPostAsync(1);
// Exibindo os dados no console
Console.WriteLine($"Título: {post.Title}\nConteúdo: {post.Body}");
}
}
}
Explicação do Código:
Neste exemplo, utilizamos o Refit para definir uma interface que representa a API jsonplaceholder.typicode.com. A interface IJsonPlaceholderApi define um método GetPostAsync que faz uma chamada GET para o endpoint /posts/{id}. O Refit cuida de criar automaticamente o cliente HTTP e realizar a chamada. No método Main, instanciamos o cliente da API com RestService.For, fazemos uma requisição GET para obter os dados de um post e exibimos os resultados no console.
Conclusão:
O Refit torna as chamadas HTTP mais simples e intuitivas, eliminando a necessidade de escrever código repetitivo para lidar com requisições. Ele facilita a integração com APIs REST, oferecendo uma abordagem orientada a interfaces que melhora a legibilidade e manutenção do código.
Código fonte: GitHub