Golang: validar parámetros GET en URL con servidor HTTP

En este post vamos a ver cómo validar y obtener los parámetros GET pasados en la URL cuando estamos leyendo la petición de un servidor HTTP.

Recuerda que con net/http podemos obtener el mapa de parámetros con http.Request.URL.Query, luego cuando accedemos a una clave nos devolverá un arreglo con todos los valores para esa clave GET y finalmente si solo queremos el primero accederemos a la posición 0 de ese arreglo.

Yo te enseñaré cómo pasar de esta validación:

variablesGet := r.URL.Query()
fechaInicioComoArreglo := variablesGet["fechaInicio"]
fechaFinComoArreglo := variablesGet["fechaFin"]
if len(fechaInicioComoArreglo) <= 0 {
  return nil, errors.New("no hay fechaInicio")
}
if len(fechaFinComoArreglo) <= 0 {
  return nil, errors.New("no hay fechaFin")
}

A esta más limpia:

valores, err := validarParametrosGetDePeticionHttp(r, []string{"fechaInicio", "fechaFin"})
if err != nil {
  return nil, err
}
fechaInicio, fechaFin := valores[0], valores[1]

De este modo podremos validar que el parámetro GET se encuentre presente en la petición HTTP además de que no esté vacío, y no importará la cantidad, siempre tendremos las mismas líneas.

Nota: seguramente habrá frameworks o librerías que ya hacen el trabajo. Yo lo haré usando solo la librería estándar y el paquete net/http de Golang.

Función para validar valores GET con Go

Estaba dándole mantenimiento a mi plugin para imprimir PDF silenciosamente desde cualquier lugar y vi que podía simplificar la extracción de parámetros get de la url con la siguiente función:

/*
Valida que toda la lista de parametros exista en r.URL.Query. Si no encuentra alguno o
está vacío, regresa el error del parámetro faltante. En caso de éxito regresa una lista conteniendo
los parámetros en el mismo orden que fueron validados
*/
func validarParametrosGetDePeticionHttp(r *http.Request, parametros []string) ([]string, error) {
	var valores []string
	mapaDeValoresDeUrl := r.URL.Query()
	for _, parametro := range parametros {
		valorComoArreglo, ok := mapaDeValoresDeUrl[parametro]
		if !ok {
			return valores, fmt.Errorf("Falta el parámetro '%s'", parametro)
		}
		valor := valorComoArreglo[0]
		if len(valor) <= 0 {
			return valores, fmt.Errorf("El parámetro '%s' está vacío", parametro)
		}
		valores = append(valores, valor)
	}
	return valores, nil
}

Si te fijas recibimos una lista de valores que deben estar presentes en la URL. Primero verificamos si existe en la línea 11, si no, lo indicamos y regresamos el error.

Después extraemos el primer valor (tipo string) en la línea 14 y comprobamos que no esté vacío. Si todo va bien entonces agregamos ese valor a la lista de valores ya extraídos en la línea 18 y finalmente devolvemos la lista en la línea 20.

De este modo podemos verificar que se estén enviando los valores necesarios en la URL y ahorramos código comprobando cada valor.

Por aquí te dejo más tutoriales de Golang.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *