Refit es una biblioteca de código abierto para .NET, .NET Core y Xamarin que simplifica y facilita el consumo de API REST al permitirle definir los puntos finales de API como interfaces de C#, eliminando así la necesidad de crear solicitudes HTTP y analizar respuestas HTTP manualmente. En este artículo, profundizaremos en la biblioteca Refit para .NET y veremos de primera mano cómo simplifica el desarrollo de API. Para usar los ejemplos de código proporcionados en este artículo, debe tener Visual Studio 2022 instalado en su sistema. Si aún no tiene una copia, puede descargar Visual Studio 2022 aquí. En las secciones siguientes, implementaremos dos aplicaciones, una API de contacto y una aplicación cliente para consumir la API de contacto. La aplicación de API de contacto comprenderá los siguientes tipos: Contacto: representa la clase del modelo. IContactRepository: representa la interfaz para el repositorio de contactos. ContactRepository: representa la clase del repositorio de contactos que contiene métodos para devolver datos de contacto. ContactsController: representa el controlador de API que se utiliza para exponer los puntos finales de la API de contacto a los clientes de API. La aplicación cliente utilizará Refit para consumir la API de contacto y mostrar los registros recuperados en la ventana de la consola. ¿Qué es Refit? ¿Por qué es útil? Refit es una biblioteca REST rápida y segura para .NET, .NET Core y Xamarin que convierte su API REST en una interfaz, lo que facilita el consumo de servicios web RESTful. Refit transforma automáticamente las llamadas HTTP en interfaces de C# utilizando atributos para describir las operaciones REST, simplificando así el proceso de conexión con las API utilizando un código mínimo. Para consumir API mediante Refit, necesita una interfaz que pueda interactuar con su API. Refit actúa como un contenedor de los métodos de esta interfaz y maneja las solicitudes y respuestas HTTP de manera elegante. Refit generará automáticamente el código repetitivo necesario para que pueda acceder a sus API. Si está utilizando Refit por primera vez, primero debe configurar la instancia del cliente HTTP especificando la dirección base, los encabezados HTTP, la información de serialización y deserialización, etc. El siguiente fragmento de código muestra cómo podemos configurar la instancia del cliente HTTP para conectarse a un punto final en ASP.NET Core.string baseAddress = «http://localhost:59904/»; HttpClient _client = new HttpClient(); _client.BaseAddress = new Uri($»{BaseUrl}»); _client.DefaultRequestHeaders.Accept.Clear(); _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(«application/json»)); string url = BaseUrl + «api/authors»; var response = await _client.GetAuthors(url); si (respuesta.IsSuccessStatusCode) { var resultado = await respuesta.Contenido.ReadAsStringAsync(); var datos = JsonSerializer.Deserialize>(result); }Si ya está usando Refit, no necesita molestarse con el código repetitivo, porque Refit puede manejar todas estas tareas con solo unas pocas líneas de código C#. string baseAddress = «http://localhost:59904/»; var endpoint = RestService.For(baseAddress); var contacts = await endpoint.GetAuthors();Como puede ver en los fragmentos de código anteriores, Refit puede ahorrarnos mucho tiempo y esfuerzo al eliminar la necesidad de escribir el código repetitivo. En las siguientes secciones, implementaremos una API web simple en ASP.NET Core. Después de crear nuestra API, implementaremos un cliente de Refit para consumirla. Cree un proyecto de API web de ASP.NET Core en Visual Studio 2022 Para crear un proyecto de API web de ASP.NET Core 8 en Visual Studio 2022, siga los pasos que se describen a continuación. Inicie el IDE de Visual Studio 2022. Haga clic en «Crear nuevo proyecto». En la ventana «Crear nuevo proyecto», seleccione «ASP.NET Core Web API» de la lista de plantillas que se muestra. Haga clic en Siguiente. En la ventana «Configure su nuevo proyecto», especifique el nombre y la ubicación del nuevo proyecto. Opcionalmente, marque la casilla de verificación «Colocar la solución y el proyecto en el mismo directorio», según sus preferencias. Haga clic en Siguiente. En la ventana “Información adicional” que se muestra a continuación, seleccione “.NET 8.0 (Long Term Support)” como la versión del marco y asegúrese de que la casilla “Usar controladores” esté marcada. Usaremos controladores en este proyecto. En otra parte de la ventana “Información adicional”, deje el “Tipo de autenticación” establecido en “Ninguno” (el valor predeterminado) y asegúrese de que las casillas de verificación “Habilitar compatibilidad con API abierta”, “Configurar para HTTPS” y “Habilitar Docker” permanezcan desmarcadas. No usaremos ninguna de esas funciones aquí. Haga clic en Crear. Usaremos este proyecto de API web ASP.NET Core para crear nuestra API en las secciones siguientes. Cree la clase del modelo Contacto Cree una nueva clase llamada Contacto en el proyecto de API web que acaba de crear e ingrese el código que se proporciona a continuación. namespace Refit_Demo { public class Contact { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Address { get; set; } public string Phone { get; set; } } } Usaremos la clase Contact en la siguiente sección para trabajar con datos. Crear la clase ContactRepository A continuación, crearemos una clase de repositorio para trabajar con los datos de Contact. Por el bien de la simplicidad y la brevedad, almacenaremos nuestros datos en una lista en la memoria. Puede cambiar esta implementación para almacenar los datos en una base de datos según sus requisitos. La clase ContactRepository implementa IContactRepository. Esta interfaz contiene la declaración de dos métodos, a saber, los métodos GetContact y GetContacts. Mientras que el primero devuelve un registro de contacto basado en el id que se le pasa como parámetro, el último devuelve todos los contactos. La siguiente lista de códigos ilustra tanto la interfaz IContactRepository como la clase ContactRepository. public interface IContactRepository { public Contact GetContact(int id); public List GetContacts(); } clase pública ContactRepository: IContactRepository { lista privada de solo lectura contactos = nueva lista(); public ContactRepository() { contactos = nueva Lista() { new Contact() { Id = 1, Nombre = «Keaton», Apellido = «Underwood», Dirección = «12/3 ABC Road, Chicago, EE. UU.», Teléfono = «1234567890»}, new Contact(){ Id = 2, Nombre = «John», Apellido = «Smith», Dirección = «12/3 ABC Road, Nueva York, EE. UU.», Teléfono = «0987654321»} }; } public Contact GetContact(int id) { return contacts.SingleOrDefault(c => c.Id == id); } public List GetContacts() { return contacts; } }Puede registrar una instancia del tipo IContactRepository con la colección de servicios en Program.cs utilizando el siguiente fragmento de código.builder.Services.AddScoped();Esto le permitirá usar la inyección de dependencia para crear una instancia del tipo IContactRepository en la aplicación.Crear el controlador de APIAhora, creemos la clase de controlador para nuestra API de contactos. Para ello, cree un nuevo controlador de API llamado ContactsController y reemplace el código generado con el siguiente código.using Microsoft.AspNetCore.Mvc; namespace Refit_Demo.Controllers {
[Route(«api/[controller]»)]
[ApiController]
clase pública ContactsController : ControllerBase { privada de solo lectura IContactRepository _contactRepository; público ContactsController(IContactRepository contactRepository) { _contactRepository = contactRepository; }
[HttpGet]
Tarea pública asincrónica> Obtener() { devolver esperar _contactRepository.GetContacts(); }
[HttpGet(«{id}»)]
Tarea pública asincrónica Get(int id) { return await _contactRepository.GetContact(id); } } }Observe cómo hemos usado la inyección del constructor para crear una instancia del tipo IContactRepository en la lista de códigos anterior. En las siguientes secciones, crearemos un proyecto de aplicación de consola y compilaremos el cliente Refit que consumirá nuestra API de contactos. Cree un proyecto de aplicación de consola .NET Core en Visual Studio Siga los pasos que se describen a continuación para crear un nuevo proyecto de aplicación de consola .NET Core en Visual Studio. Inicie el IDE de Visual Studio. Haga clic en «Crear nuevo proyecto». En la ventana «Crear nuevo proyecto», seleccione «Aplicación de consola (.NET Core)» de la lista de plantillas que se muestra. Haga clic en Siguiente. En la ventana «Configure su nuevo proyecto», especifique el nombre y la ubicación del nuevo proyecto. Haga clic en Siguiente. En la ventana «Información adicional» que se muestra a continuación, elija «.NET 8.0 (Long Term Support)» como la versión del marco que desea usar. Haga clic en Crear. Usaremos este proyecto de aplicación de consola .NET Core para crear nuestro cliente de API de Refit.Instalar el paquete NuGet de RefitPara instalar Refit en su proyecto, seleccione el proyecto en la ventana del Explorador de soluciones, luego haga clic derecho y seleccione “Administrar paquetes NuGet”.En la ventana del Administrador de paquetes NuGet, busque el paquete de Refit e instálelo. Alternativamente, puede instalar el paquete o los paquetes a través de la consola del Administrador de paquetes NuGet ingresando los comandos que se muestran a continuación.PM> Install-Package RefitCrear el cliente de API de RefitAhora reemplace el código generado en el archivo Program.cs con la siguiente lista de códigos.using Refit; string baseAddress = «http://localhost:59904/»; var contactsAPI = RestService.For(baseAddress); var contactos = await contactsAPI.GetContacts(); foreach (var contacto en contactos) { Console.WriteLine($»{contacto.Id} | {contacto.Nombre} | {contacto.Apellido}»); } Console.ReadLine();
[Headers(«Accept: application/json», «Content-type: application/json»)]
interfaz pública IContactService {
[Get(«/api/contacts»)]
Tarea pública ObtenerContacto(int id);
[Get(«/api/contacts»)]
Tarea pública> GetContacts(); } public class Contact { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } public string Address { get; set; } public string Phone { get; set; } }Ejecutar la aplicaciónDado que hay dos aplicaciones en este ejemplo, debe ejecutar ambas una por una. Primero, ejecute la aplicación API seguida de la aplicación de consola del cliente API. Cuando se hayan iniciado ambas aplicaciones, observará los datos recuperados de la aplicación API Contacts que se muestran en la consola como se muestra en la Figura 1. IDG Figura 1. Su cliente API Refit en acción. Refit es una excelente opción para implementar clientes API REST HTTP. Refit simplifica en gran medida el código repetitivo necesario para conectarse y trabajar con las API REST en sus aplicaciones ASP.NET Core. Un punto importante a tener en cuenta es que cuando usa Refit, todas las solicitudes deben ser asincrónicas. Refit no admite llamadas de red sincrónicas. Derechos de autor © 2024 IDG Communications, Inc.