Resty para Go: un cliente HTTP potente y elegante
En el mundo de Go existen muchas librerías para trabajar con peticiones HTTP. El paquete estándar net/http ofrece funcionalidades básicas, pero para proyectos reales a menudo se necesita algo más cómodo y completo. La librería Resty es justo lo que necesitan los desarrolladores que valoran la simplicidad, la legibilidad del código y las potentes capacidades "listas para usar".
Resty se presenta como un "cliente Go para APIs REST, inspirado en la librería RestClient de Ruby". Ofrece una interfaz fluida (encadenamiento de llamadas), procesamiento automático de JSON, mecanismos integrados de reintentos, tiempos de espera, middleware y mucho más. Gracias a su arquitectura, Resty permite escribir código conciso y expresivo para interactuar con cualquier servicio HTTP, desde simples peticiones GET hasta complejas integraciones de API de varios pasos.
¿Por qué usar Resty en lugar del net/http estándar? Primero, reduce significativamente el código repetitivo (boilerplate). No necesitas crear manualmente las estructuras de las peticiones, configurar cabeceras ni analizar respuestas JSON. Segundo, Resty proporciona abstracciones convenientes para trabajar con cookies, autenticación, proxies y subidas de archivos. Tercero, la librería tiene un mantenimiento activo, una documentación excelente y se utiliza en miles de proyectos en producción. Esto convierte a Resty en una de las mejores opciones como cliente HTTP en el ecosistema Go.
Instalación
La instalación de Resty se realiza de la forma estándar en Go, a través del gestor de dependencias go get:
go get -u github.com/go-resty/resty/v2
Después de ejecutar este comando, la librería se añadirá a tu archivo go.mod. Asegúrate de usar Go versión 1.16 o superior para tener soporte de módulos.
En tu código, la importación se verá así:
import "github.com/go-resty/resty/v2"
Inicio rápido
Comencemos con un ejemplo mínimo funcional: haremos una petición GET a una API pública y mostraremos el resultado:
package main
import (
"fmt"
"github.com/go-resty/resty/v2"
)
func main() {
// Creamos el cliente
client := resty.New()
// Ejecutamos la petición GET
resp, err := client.R().
SetHeader("Accept", "application/json").
Get("https://jsonplaceholder.typicode.com/posts/1")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Estado:", resp.StatusCode())
fmt.Println("Cuerpo de la respuesta:", resp.String())
}
Este ejemplo muestra la característica clave de Resty: la interfaz fluida. Creamos un cliente, luego con el método R() creamos una nueva petición, configuramos una cabecera y ejecutamos el GET. Todas las llamadas se encadenan, lo que hace que el código sea muy legible.
Métodos y funciones principales
Veamos 10 métodos clave de Resty que cubren el 90% de las tareas al trabajar con HTTP.
1. resty.New()
Firma: func New() *Client
Qué hace: Crea una nueva instancia del cliente HTTP con la configuración predeterminada. Es el punto de partida para todas las operaciones.
client := resty.New()
// Ahora client está listo para usar
2. Client.R()
Firma: func (c *Client) R() *Request
Qué hace: Crea un nuevo objeto de petición. Todos los métodos para configurar la petición (cabeceras, cuerpo, parámetros) se llaman sobre este objeto.
request := client.R()
request.SetHeader("Content-Type", "application/json")
// ... trabajo posterior con la petición
3. Request.Get(url)
Firma: func (r *Request) Get(url string) (*Response, error)
Qué hace: Ejecuta una petición HTTP GET a la URL indicada. Devuelve la respuesta y un error.
También en la biblioteca
Serialización de objetos en Java: guía completa con ejemplos
Trabajo con XML en JavaScript (Node.js): bibliotecas y ejemplos
gRPC para TypeScript: bibliotecas, configuración y ejemplos de código
Chai para JavaScript (Node.js): guía completa con ejemplos