Este capítulo presenta cómo obtener parámetros de solicitud GET, POST y otros en el marco de iris, incluida la lectura y escritura de cookies.
Parámetros en la ruta
func main() {
app := iris.Default()
// Este controlador coincidirá con /usuario/john, pero no con /usuario/ o /usuario
app.Get("/usuario/{nombre}", func(ctx iris.Context) {
nombre := ctx.Params().Get("nombre")
ctx.Writef("Hola %s", nombre)
})
// Sin embargo, este controlador coincidirá con /usuario/john/ y /usuario/john/enviar
// Si ningún otro enrutador coincide con /usuario/john, se redirigirá a /usuario/john/
app.Get("/usuario/{nombre}/{accion:path}", func(ctx iris.Context) {
nombre := ctx.Params().Get("nombre")
accion := ctx.Params().Get("accion")
mensaje := nombre + " " + accion
ctx.WriteString(mensaje)
})
// Para cada solicitud coincidente, el contexto conservará la definición del enrutador
app.Post("/usuario/{nombre:string}/{accion:path}", func(ctx iris.Context) {
ctx.GetCurrentRoute().Tmpl().Src == "/usuario/{nombre:string}/{accion:path}" // true
})
app.Listen(":8080")
}
Tipos de parámetros integrados disponibles:
Tipo de parámetro | Tipo Go | Validación | Función de ayuda de acceso |
---|---|---|---|
:string |
string | Cualquier contenido (un solo segmento de ruta) | Params().Get |
:uuid |
string | uuidv4 o v1 (un solo segmento de ruta) | Params().Get |
:int |
int | -9223372036854775808 a 9223372036854775807 (x64) o -2147483648 a 2147483647 (x32), dependiendo de la arquitectura del host | Params().GetInt |
:int8 |
int8 | -128 a 127 | Params().GetInt8 |
:int16 |
int16 | -32768 a 32767 | Params().GetInt16 |
:int32 |
int32 | -2147483648 a 2147483647 | Params().GetInt32 |
:int64 |
int64 | -9223372036854775808 a 9223372036854775807 | Params().GetInt64 |
:uint |
uint | 0 a 18446744073709551615 (x64) o 0 a 4294967295 (x32), dependiendo de la arquitectura del host | Params().GetUint |
:uint8 |
uint8 | 0 a 255 | Params().GetUint8 |
:uint16 |
uint16 | 0 a 65535 | Params().GetUint16 |
:uint32 |
uint32 | 0 a 4294967295 | Params().GetUint32 |
:uint64 |
uint64 | 0 a 18446744073709551615 | Params().GetUint64 |
:bool |
bool | "1" o "t" o "T" o "TRUE" o "true" o "True" o "0" o "f" o "F" o "FALSE" o "false" o "False" | Params().GetBool |
:alfabético |
string | Letras minúsculas o mayúsculas | Params().Get |
:archivo |
string | Letras minúsculas o mayúsculas, números, guion bajo (_), guion (-), punto (.), no puede contener espacios u otros caracteres especiales de nombre de archivo no válidos | Params().Get |
:ruta |
string | Cualquier contenido, puede estar separado por barras (segmentos de ruta), pero debe ser la última parte de la ruta del enrutador | Params().Get |
:correo |
string | Dirección de correo electrónico, dominio no validado | Params().Get |
:email |
string | Dirección de correo electrónico, dominio validado | Params().Get |
:fecha |
string | Formato yyyy/mm/dd, por ejemplo /blog/{param:fecha} coincide con /blog/2022/04/21 | Params().GetTime y Params().SimpleDate |
:día de la semana |
uint (0-6) o string | La cadena debe ser una constante time.Weekday ("domingo" a "lunes" o "Domingo" a "Lunes"), por ejemplo /programación/{param:día de la semana} coincide con /programación/lunes | Params().GetWeekday |
func main() {
app := iris.Default()
// Analizar parámetros de cadena de consulta utilizando el objeto de solicitud existente de nivel bajo.
// Coincidencia de URL de solicitud: /welcome?firstname=Jane&lastname=Doe
app.Get("/welcome", func(ctx iris.Context) {
firstname := ctx.URLParamDefault("firstname", "Invitado")
lastname := ctx.URLParam("lastname") // Atajo para ctx.Request().URL.Query().Get("lastname")
ctx.Writef("Hola %s %s", firstname, lastname)
})
app.Listen(":8080")
}
func main() {
app := iris.Default()
app.Post("/form_post", func(ctx iris.Context) {
message := ctx.PostValue("message")
nick := ctx.PostValueDefault("nick", "Anónimo")
ctx.JSON(iris.Map{
"status": "Publicado",
"message": message,
"nick": nick,
})
})
app.Listen(":8080")
}
POST /post?id=1234&page=1 HTTP/1.1
Content-Type: application/x-www-form-urlencoded
name=kataras&message=this_is_great
func main() {
app := iris.Default()
app.Post("/post", func(ctx iris.Context) {
id, err := ctx.URLParamInt("id", 0)
if err != nil {
ctx.StopWithError(iris.StatusBadRequest, err)
return
}
page := ctx.URLParamIntDefault("page", 0)
name := ctx.PostValue("name")
message := ctx.PostValue("message")
ctx.Writef("id: %d; página: %d; nombre: %s; mensaje: %s", id, page, name, message)
})
app.Listen(":8080")
}
id: 1234; página: 1; nombre: kataras; mensaje: this_is_great
POST /post?id=a&id=b&id=c&name=john&name=doe&name=kataras
Content-Type: application/x-www-form-urlencoded
func main() {
app := iris.Default()
app.Post("/post", func(ctx iris.Context) {
ids := ctx.URLParamSlice("id")
names, err := ctx.PostValues("name")
if err != nil {
ctx.StopWithError(iris.StatusBadRequest, err)
return
}
ctx.Writef("ids: %v; nombres: %v", ids, names)
})
app.Listen(":8080")
}
ids: [a b c], nombres: [john doe kataras]
import "github.com/kataras/iris/v12"
func main() {
app := iris.Default()
app.Get("/cookie", func(ctx iris.Context) {
// Leer cookie
value := ctx.GetCookie("mi_cookie")
if value == "" {
value = "NoEstablecido"
// Crear cookie
ctx.SetCookieKV("mi_cookie", value)
// Alternativamente: ctx.SetCookie(&http.Cookie{...})
// Crear cookie
ctx.SetCookie("", "test", 3600, "/", "localhost", false, true)
}
ctx.Writef("Valor de la cookie: %s \n", value)
})
app.Listen(":8080")
}