Go puro Sin dependencias Dragon Style Super rápido ⚡️

Ki Web Framework

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

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()
}
Repositorio Documentación Instalación

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