Ki (気, "Energía") es un framework web moderno, rápido y minimalista para
Go, inspirado en la simplicidad de la librería estándar pero con características avanzadas como inyección de
dependencias, middlewares y enrutamiento con parámetros, sin dependencias externas para el router.
Características
- 100% Go puro: Router basado en
net/http
, sin
dependencias externas.
- Enrutamiento flexible: Soporte para rutas con parámetros, grupos,
prefijos y expresiones regulares.
- Middlewares sencillos y potentes: Globales, por grupo o por ruta.
- Inyección de dependencias: Handlers con argumentos inyectados
automáticamente.
- Gestión avanzada de sesiones y cookies.
- Servir archivos estáticos con facilidad.
- Respuestas JSON, XML, CSV, texto, templates o personalizadas.
- Manejo de logs y cabeceras de proxy nativo.
Instalación
go get -u github.com/jad21/ki
Primer Ejemplo
package main
import (
"net/http"
"github.com/jad21/ki"
)
func main() {
app := ki.New()
app.Get("/kame", func(ctx *ki.Context) {
ctx.Text(http.StatusOK, "hame-ha")
})
app.Get("/kaio", func(ctx *ki.Context) {
ctx.JSON(http.StatusOK, ki.M{"body": "ken"})
})
app.ListenAndServe()
}
Ejemplo de Definición de Rutas
Método |
Ruta |
Descripción |
GET |
/kame |
Devuelve texto plano "hame-ha" |
GET |
/kaio |
Devuelve JSON con {"body": "ken"} |
GET |
/user/:id |
Devuelve datos para un usuario (parámetro id ) |
POST |
/login |
Login de usuario, usa sesión |
GET |
/me |
Perfil de usuario autenticado |
Ejemplo de Definición de Rutas
Método |
Ruta |
Descripción |
GET |
/kame |
Devuelve texto plano "hame-ha" |
GET |
/kaio |
Devuelve JSON con {"body": "ken"} |
GET |
/user/:id |
Devuelve datos para un usuario (parámetro id ) |
POST |
/login |
Login de usuario, usa sesión |
GET |
/me |
Perfil de usuario autenticado |
Ejemplo de Grupo de Rutas
// Definir un grupo con prefijo '/admin'
app.Group("/admin", func(r ki.Router) {
r.Get("/dashboard", func(ctx *ki.Context) {
ctx.Text(200, "Panel de Admin")
})
r.Get("/stats", func(ctx *ki.Context) {
ctx.JSON(200, ki.M{"users": 99})
})
})
Resumen de Middlewares y Respuestas
Función |
Ejemplo |
Descripción |
Middleware global |
app.Use(miMiddleware) |
Se ejecuta en todas las rutas |
Middleware por grupo |
admin := app.Group("/admin").Use(AdminAuth) |
Solo en rutas bajo /admin |
Respuesta JSON |
ctx.JSON(200, ki.M{"key": "val"}) |
Respuesta en formato JSON |
Respuesta XML |
ctx.XML(200, data) |
Respuesta en formato XML |
Respuesta CSV |
ctx.CSV(200, records, "export.csv") |
Descarga como archivo CSV |
Redirección |
ctx.Redirect("/login", 302) |
Redirecciona a otra ruta |
Renderizar template |
ctx.Render(200, ki.M{"Name":"Ki"}, "great.html") |
Renderiza un HTML con variables |
|
Función |
Ejemplo |
Descripción |
🌀
|
Middleware global |
app.Use(miMiddleware) |
Se ejecuta en todas las rutas |
👊
|
Middleware por grupo |
admin := app.Group("/admin").Use(AdminAuth) |
Solo en rutas bajo /admin |
⚡️
Ejemplo de Middleware de Autenticación
// Middleware de "Ki Auth" estilo Dragon Ball
func KameAuth(ctx *ki.Context) {
user, err := ctx.Session.User()
if err != nil || user.Username != "goku" {
ctx.Session.Flash("¡Sólo guerreros Z pueden entrar!")
ctx.Redirect("/login", 302)
return
}
ctx.Next()
}
// Usarlo:
app.Group("/torneo").Use(KameAuth).Get("/sala", func(ctx *ki.Context) {
ctx.Text(200, "¡Bienvenido al Torneo de Artes Marciales!")
})