Refit para C# (.NET): guia completo com exemplos práticos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Refit para C# (.NET): Cliente REST Type-Safe

1. O que é e para que serve

Refit é uma biblioteca de código aberto para a plataforma .NET que gera automaticamente implementações de clientes HTTP com base em interfaces descritas pelo desenvolvedor. Ela permite transformar uma interface C# comum em um cliente REST completo, eliminando a necessidade de escrever manualmente código repetitivo para realizar requisições HTTP, serializar/desserializar JSON e tratar erros.

O principal problema que o Refit resolve é a duplicação de código ao trabalhar com APIs REST. Em vez de criar um método separado com HttpClient para cada endpoint, configurar cabeçalhos, processar respostas e exceções, o desenvolvedor simplesmente declara uma interface com métodos anotados por atributos do Refit. A biblioteca gera a implementação automaticamente, utilizando HttpClientFactory (abordagem recomendada) ou diretamente HttpClient.

Refit é especialmente útil no desenvolvimento de arquiteturas de microsserviços, integração com APIs de terceiros (GitHub, Stripe, Telegram, etc.) e em qualquer projeto que exija interação type-safe com serviços HTTP. Ele suporta todos os métodos HTTP principais (GET, POST, PUT, DELETE, PATCH), trabalho com cabeçalhos, parâmetros de query, corpo da requisição, formulários multipart e arquivos.

2. Instalação

O Refit é distribuído via NuGet. Para instalar, use um dos seguintes comandos:

# Via .NET CLI
dotnet add package Refit

# Via Package Manager Console (Visual Studio)
Install-Package Refit

# Ou via NuGet Package Manager na IDE

Para trabalhar com métodos assíncronos e integração com ASP.NET Core, recomenda-se também instalar o pacote Refit.HttpClientFactory:

dotnet add package Refit.HttpClientFactory

Se você usa System.Text.Json (padrão no .NET Core 3.1+), nenhum pacote adicional é necessário. Para Newtonsoft.Json, instale Refit.Newtonsoft.Json.

3. Início rápido — exemplo mínimo funcional

Vamos criar um cliente simples para obter dados do JSONPlaceholder (uma API REST de teste).

Passo 1: Defina o modelo de dados:

public class Todo
{
    public int Id { get; set; }
    public int UserId { get; set; }
    public string Title { get; set; }
    public bool Completed { get; set; }
}

Passo 2: Crie a interface com atributos do Refit:

using Refit;

public interface ITodoApi
{
    [Get("/todos/{id}")]
    Task<Todo> GetTodoAsync(int id);

    [Get("/todos")]
    Task<List<Todo>> GetAllTodosAsync();
}

Passo 3: Use o Refit para criar o cliente:

using Refit;

class Program
{
    static async Task Main(string[] args)
    {
        // Cria o cliente diretamente (sem DI)
        var todoApi = RestService.For<ITodoApi>("https://jsonplaceholder.typicode.com");
        
        // Obtém um único Todo
        var todo = await todoApi.GetTodoAsync(1);
        Console.WriteLine($"Todo: {todo.Title}, Completed: {todo.Completed}");
        
        // Obtém todos os Todos
        var todos = await todoApi.GetAllTodosAsync();
        Console.WriteLine($"Total de todos: {todos.Count}");
    }
}

Este exemplo demonstra a mecânica básica: você descreve a interface e o Refit gera a implementação que executa as requisições HTTP e desserializa as respostas.

4. Principais métodos/funções/classes

4.1. RestService.For<T>()

Assinatura: public static T For<T>

Recommendations