Manejo de varios parámetros de solicitud en el marco de trabajo Go Fiber
Ejemplo sencillo
Todos los parámetros de solicitud en el marco de trabajo Fiber se obtienen a través del objeto de contexto Ctx
.
app.Get("/user/:name?", func(c *fiber.Ctx) error {
// Obtener parámetros a través del parámetro Ctx de la función de ruta y llamar al método apropiado
// Aquí, el parámetro name se obtiene a través de Params
return c.SendString(c.Params("name"))
})
Obtención de parámetros de ruta
Obtención de parámetros desde la ruta URL
// GET http://example.com/user/fenny
app.Get("/user/:name", func(c *fiber.Ctx) error {
c.Params("name") // "fenny"
// ...
})
// GET http://example.com/user/fenny/123
app.Get("/user/*", func(c *fiber.Ctx) error {
c.Params("*") // "fenny/123"
c.Params("*1") // "fenny/123"
c.Params("*", "valor predeterminado") // Se puede establecer un valor predeterminado con el segundo parámetro
})
Obtención de parámetros de ruta de tipo Int
// GET http://example.com/user/123
app.Get("/user/:id", func(c *fiber.Ctx) error {
id, err := c.ParamsInt("id") // int 123 y sin error
// ...
})
Obtención de parámetros de consulta de solicitud GET
// GET http://example.com/?order=desc&brand=nike
app.Get("/", func(c *fiber.Ctx) error {
c.Query("order") // "desc"
c.Query("brand") // "nike"
// Se puede usar el segundo parámetro para establecer un valor predeterminado, que se devolverá si el parámetro no existe
c.Query("empty", "nike") // "nike"
// ...
})
Devolver todos los parámetros de consulta
// GET http://example.com/?name=alex&want_pizza=false&id=
app.Get("/", func(c *fiber.Ctx) error {
m := c.Queries()
m["name"] // "alex"
m["want_pizza"] // "false"
m["id"] // ""
// ...
})
Vinculación de parámetros de consulta a un objeto struct
// Definir un struct para recibir parámetros
// Utilizar la etiqueta query para especificar los nombres de parámetros a vincular
type Person struct {
Name string `query:"name"`
Pass string `query:"pass"`
Products []string `query:"products"`
}
app.Get("/", func(c *fiber.Ctx) error {
// Definir una variable struct para recibir parámetros
p := new(Person)
// Utilizar QueryParser para vincular los parámetros de consulta a la variable p
if err := c.QueryParser(p); err != nil {
return err
}
log.Println(p.Name) // john
log.Println(p.Pass) // doe
log.Println(p.Products) // [shoe, hat]
// ...
})
// Ejecutar el siguiente comando curl para probar
// curl "http://localhost:3000/?name=john&pass=doe&products=shoe,hat"
Obtención de parámetros de formulario de solicitud POST
app.Post("/", func(c *fiber.Ctx) error {
// Obtener el primer valor del campo del formulario "name":
c.FormValue("name")
// => "john" o "" si no existe
// ...
})
## Manejo de parámetros del cuerpo
Principalmente se utiliza para procesar las solicitudes POST/PUT y admite parámetros JSON, XML y de formulario.
```go
// Define la estructura para recibir parámetros y define los nombres de campo de parámetros que deseas recibir a través de las etiquetas json, xml y form
// json, xml, form se pueden seleccionar según sea necesario; no es necesario incluir todos ellos
type Person struct {
Name string `json:"name" xml:"name" form:"name"`
Pass string `json:"pass" xml:"pass" form:"pass"`
}
app.Post("/", func(c *fiber.Ctx) error {
// Define la variable de estructura para recibir parámetros
p := new(Person)
// Usa BodyParser para enlazar los parámetros del cuerpo a la variable p
if err := c.BodyParser(p); err != nil {
return err
}
log.Println(p.Name) // john
log.Println(p.Pass) // doe
// ...
})
// Ejemplos de varios tipos de solicitudes; para solicitudes de parámetros con formato JSON, recuerda establecer Content-Type: application/json
// curl -X POST -H "Content-Type: application/json" --data "{\"name\":\"john\",\"pass\":\"doe\"}" localhost:3000
// curl -X POST -H "Content-Type: application/xml" --data "<login><name>john</name><pass>doe</pass></login>" localhost:3000
// curl -X POST -H "Content-Type: application/x-www-form-urlencoded" --data "name=john&pass=doe" localhost:3000
// curl -X POST -F name=john -F pass=doe http://localhost:3000
// curl -X POST "http://localhost:3000/?name=john&pass=doe"
Cómo recuperar los datos del cuerpo original es el siguiente:
// curl -X POST http://localhost:8080 -d user=john
app.Post("/", func(c *fiber.Ctx) error {
// Usa BodyRaw para devolver los datos del cuerpo tal como están
return c.Send(c.BodyRaw()) // []byte("user=john")
})
Recuperación de encabezados de solicitud
app.Get("/", func(c *fiber.Ctx) error {
c.Get("Content-Type") // "text/plain"
c.Get("CoNtEnT-TypE") // "text/plain"
c.Get("something", "john") // "john"
// ...
})
Recuperación de la IP del cliente
app.Get("/", func(c *fiber.Ctx) error {
c.IP() // "127.0.0.1"
// ...
})
Si estás desplegado en un servidor que utiliza un proxy o balanceador de carga, necesitas recuperar la IP del cliente a través del encabezado x-forwarded-for configurándolo de la siguiente manera:
app := fiber.New(fiber.Config{
ProxyHeader: fiber.HeaderXForwardedFor,
})
Lectura de cookies
app.Get("/", func(c *fiber.Ctx) error {
// Obtener cookie por clave:
c.Cookies("name") // "john"
c.Cookies("empty", "doe") // "doe"
// ...
})