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")
}