En el capítulo 4 creamos enrutado dinámico capaz de manejar parámetros en la ruta como /users/:id. Pero las APIs reales necesitan más que solo parámetros de ruta: también requieren parámetros de consulta para filtrado, paginación y entrada de usuario. En este capítulo explico cómo trabajar con query parameters para crear APIs más interactivas y prácticas.
Resumen rápido de lo que ya hemos construido: enrutado dinámico con parámetros de ruta, extracción de parámetros, respuestas JSON básicas y manejo de query parameters con validación y conversión de tipos.
Qué son los query parameters y cómo llegan: los parámetros de consulta aparecen después del signo de interrogación en la URL como pares clave=valor. Ejemplos típicos que envía un frontend: curl https://localhost:3000/search?q=javascript&page=2 para búsquedas, curl https://localhost:3000/greet?name=John para saludos opcionales, curl https://localhost:3000/math/add?a=10&b=20 para operaciones matemáticas. El servidor debe extraer esas claves y usarlas según la lógica del endpoint.
Extracción simple de parámetros: en Go se usa r.URL.Query().Get(name) para obtener el valor de la clave name. Si la clave no existe, Get devuelve cadena vacía. Un manejador de saludo básico sería algo como: obtener name con r.URL.Query().Get(name) y si está vacío responder Hello stranger de otra forma devolver Hello seguido del nombre.
Ejemplos de prueba en la línea de comandos: curl https://localhost:3000/greet devuelve Hello stranger. curl https://localhost:3000/greet?name=John devuelve Hello John. La codificación URL funciona normalmente, por ejemplo Jane%20Doe se interpreta como espacio.
Múltiples parámetros: un endpoint de búsqueda puede leer q y page con r.URL.Query().Get(q) y r.URL.Query().Get(page) respectivamente. El orden en la URL no importa y los parámetros faltantes retornan cadenas vacías, así que conviene aplicar valores por defecto cuando corresponde.
Conversión de tipos: frecuentemente hay que convertir parámetros a enteros o booleanos. En Go se usa strconv.ParseInt para enteros y comparaciones simples para booleanos, por ejemplo r.URL.Query().Get(in_stock) == true para flags. Al convertir, valide errores y considere un valor por defecto si la conversión falla.
Patrones comunes: uso de valores por defecto para limit y sort; parámetros booleanos como in_stock o on_sale; parámetros con múltiples valores como tags que se obtienen con r.URL.Query()[tags] y devuelven []string. Para endpoints combinados se lee parámetros de ruta y de consulta, por ejemplo /users/123/posts?limit=10&sort=date obtiene id desde la ruta y limit y sort desde la consulta.
Comparativa con frameworks: la idea es la misma en cualquier framework, solo cambia la API. Por ejemplo en Gin se usa c.Query(name) y c.Param(id). Nuestro enfoque con r.URL.Query().Get es equivalente y portátil sin depender de librerías externas.
Buenas prácticas y validación: siempre sanitice y valide parámetros antes de usarlos, controle límites y paginación con valores razonables, compruebe divisiones por cero en operaciones aritméticas y responda con códigos HTTP apropiados en caso de entrada inválida.
Ejemplo de caso de uso y reto: crea un endpoint /calculator que reciba operation con valores add subtract multiply divide y parámetros a y b. Gestione división por cero y operaciones inválidas; convierta a y b a enteros o floats según necesite y devuelva resultados claros al cliente.
Cómo probar tus handlers: use curl con URLs que incluyan parámetros, por ejemplo curl https://localhost:3000/search?q=golang&page=3 o curl https://localhost:3000/math/add?a=15&b=25. Pruebe casos límite como parámetros no numéricos para asegurarse de que la API responde de forma robusta.
Qué hemos logrado en este capítulo: extracción de query parameters con r.URL.Query().Get(), manejo de múltiples parámetros en un mismo endpoint, conversión de cadenas a números con strconv.ParseInt y ejemplos prácticos como saludos, búsqueda y operaciones matemáticas.
Qué sigue en el libro: en el próximo capítulo ampliaremos el servidor con persistencia de datos, APIs JSON completas, manejo de cuerpos de petición en POST y PUT, y operaciones CRUD para gestionar recursos de forma completa.
Sobre Q2BSTUDIO: somos una empresa especializada en desarrollo de software a medida y aplicaciones a medida, con experiencia en inteligencia artificial, ciberseguridad, servicios cloud AWS y Azure, y soluciones de inteligencia de negocio. Si buscas crear aplicaciones robustas y seguras o integrar agentes IA en tus procesos de negocio visita nuestra página de Desarrollo de aplicaciones y software a medida y conoce cómo podemos ayudarte.
También ofrecemos implementación de modelos y soluciones de IA para empresas, consultoría en ia para empresas y desarrollo de agentes inteligentes; descubre nuestros servicios en servicios de inteligencia artificial. Integramos soluciones de Power BI y business intelligence para transformar datos en decisiones, así como auditorías y pentesting para proteger tus aplicaciones.
Palabras clave integradas naturalmente para mejorar posicionamiento: aplicaciones a medida, software a medida, inteligencia artificial, ciberseguridad, servicios cloud aws y azure, servicios inteligencia de negocio, ia para empresas, agentes IA y power bi.
Conclusión y llamado a la acción: dominar el manejo de query parameters es esencial para construir APIs flexibles y preparadas para producción. Si necesitas apoyo para diseñar, desarrollar o asegurar tus APIs y aplicaciones a medida, Q2BSTUDIO ofrece servicios integrales desde arquitectura hasta despliegue y soporte.