Refit para C# (.NET): guía completa con ejemplos prácticos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Refit para C# (.NET): Cliente REST type-safe

1. ¿Qué es y para qué sirve?

Refit es una librería de código abierto para la plataforma .NET que genera automáticamente implementaciones de clientes HTTP a partir de interfaces definidas por el desarrollador. Permite convertir una interfaz común de C# en un cliente REST completo, eliminando la necesidad de escribir manualmente código repetitivo para realizar peticiones HTTP, serializar/deserializar JSON y manejar errores.

El principal problema que resuelve Refit es la duplicación de código al trabajar con APIs REST. En lugar de crear un método separado con HttpClient para cada endpoint, configurar cabeceras, procesar respuestas y excepciones, el desarrollador simplemente declara una interfaz con métodos marcados con atributos de Refit. La librería genera la implementación automáticamente, utilizando HttpClientFactory (el enfoque recomendado) o directamente HttpClient.

Refit es especialmente útil en el desarrollo de arquitecturas de microservicios, integraciones con APIs de terceros (GitHub, Stripe, Telegram, etc.) y en cualquier proyecto que requiera una interacción type-safe con servicios HTTP. Soporta todos los métodos HTTP principales (GET, POST, PUT, DELETE, PATCH), manejo de cabeceras, parámetros de consulta, cuerpo de la petición, formularios multiparte y archivos.

2. Instalación

Refit se distribuye a través de NuGet. Para instalarlo, usa uno de los siguientes comandos:

# A través de .NET CLI
dotnet add package Refit

# A través de Package Manager Console (Visual Studio)
Install-Package Refit

# O a través del NuGet Package Manager en tu IDE

Para trabajar con métodos asíncronos e integrarte con ASP.NET Core, también se recomienda instalar el paquete Refit.HttpClientFactory:

dotnet add package Refit.HttpClientFactory

Si usas System.Text.Json (por defecto en .NET Core 3.1+), no necesitas paquetes adicionales. Para Newtonsoft.Json, instala Refit.Newtonsoft.Json.

3. Inicio rápido — ejemplo mínimo funcional

Vamos a crear un cliente simple para obtener datos de JSONPlaceholder (una API REST de prueba).

Paso 1: Define el modelo de datos:

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

Paso 2: Crea la interfaz con los atributos de Refit:

using Refit;

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

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

Paso 3: Usa Refit para crear el cliente:

using Refit;

class Program
{
    static async Task Main(string[] args)
    {
        // Creamos el cliente directamente (sin DI)
        var todoApi = RestService.For<ITodoApi>("https://jsonplaceholder.typicode.com");
        
        // Obtenemos un solo Todo
        var todo = await todoApi.GetTodoAsync(1);
        Console.WriteLine($"Todo: {todo.Title}, Completado: {todo.Completed}");
        
        // Obtenemos todos los Todos
        var todos = await todoApi.GetAllTodosAsync();
        Console.WriteLine($"Total de todos: {todos.Count}");
    }
}

Este ejemplo muestra la mecánica básica: tú describes la interfaz y Refit genera la implementación que realiza las peticiones HTTP y deserializa las respuestas.

4. Métodos/funciones/clases principales

4.1. RestService.For<T>()

Firma: public static T For<T>

Recommendations