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.
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.
El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…
En este post te voy a enseñar a designar una carpeta para imprimir todos los…
En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…
Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…
Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…
Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…
Esta web usa cookies.