100 KiB
Novedades
🚀 Iris v14 está en camino. La próxima versión mayor es la más grande en la historia del proyecto: el framework reconstruido sobre los genéricos de Go, un constructor de aplicaciones que verifica el compilador, ayudantes de petición que validan por usted, un mapa central de errores, treinta middleware incluidos y un libro dentro del propio repositorio. Vea qué viene en Iris v14 más abajo.
La versión que se describe aquí, v12, sigue funcionando y sigue recibiendo correcciones. v14 llega en una nueva ruta de importación, así que nada suyo se rompe el día en que salga.
Iris Web Framework English
العربية
⚡ Iris es un framework web rápido, simple pero con todas las funcionalidades y muy eficiente para Go.
✨ Proporciona una base bellamente expresiva y fácil de usar para su próximo sitio web o API.
🌟 Descubra lo que otros dicen sobre Iris y dele una estrella a este proyecto de código abierto
package main
import "github.com/kataras/iris/v12"
func main() {
app := iris.New()
app.Use(iris.Compression)
app.Get("/", func(ctx iris.Context) {
ctx.HTML("Hello <strong>%s</strong>!", "World")
})
app.Listen(":8080")
}
Como dijo una vez un desarrollador de Go, Iris te cubre por todos lados y sigue firme con los años ⭐
Algunas de las funcionalidades que ofrece Iris:
- HTTP/2 (Push, incluso datos embebidos)
- Middleware (Accesslog, Basicauth, CORS, gRPC, Anti-Bot hCaptcha, JWT, MethodOverride, ModRevision, Monitor, PPROF, Ratelimit, Anti-Bot reCaptcha, Recovery, RequestID, Rewrite)
- Versionado de API
- Model-View-Controller
- Websockets
- gRPC
- Auto-HTTPS
- Soporte integrado para ngrok, la forma más rápida de poner su aplicación en internet
- Router único con rutas dinámicas como parámetros, con tipos estándar como :uuid, :string, :int... y la posibilidad de crear los suyos
- Compresión
- Motores de vistas (HTML, Django, Handlebars, Pug/Jade y más)
- Cree su propio servidor de archivos y aloje su propio servidor WebDAV
- Caché
- Localización (i18n, sitemap)
- Sesiones
- Respuestas ricas (HTML, Text, Markdown, XML, YAML, Binary, JSON, JSONP, Protocol Buffers, MessagePack, Content Negotiation, Streaming, Server-Sent Events y más)
- Compresión de respuestas (gzip, deflate, brotli, snappy, s2)
- Peticiones ricas (Bind URL Query, Headers, Form, Text, XML, YAML, Binary, JSON, Validation, Protocol Buffers, MessagePack y más)
- Inyección de dependencias (MVC, Handlers, API Routers)
- Suite de pruebas
- Y lo más importante... obtiene respuestas rápidas y soporte, desde el primer día hasta hoy
🚀 Qué viene en Iris v14
Iris v14 es la versión más grande en la historia del proyecto. Reconstruye el framework sobre los genéricos de Go y cambia cómo se arma una aplicación: menos cableado en main, handlers más cortos y un único lugar para las decisiones que antes estaban repartidas por cada ruta.
Nada de esto necesita su atención hoy. v12 sigue funcionando, sigue recibiendo correcciones, y v14 llega con una guía de migración que cubre cada API renombrada o eliminada.
Toda la aplicación en una cadena que verifica el compilador
iris.NewBuilder conecta CORS, compresión, registro de accesos, el endpoint de salud, el mapa de errores, sus servicios y sus grupos de API en una sola expresión. El compilador impone el orden de los pasos, así que una aplicación se construye correctamente o no se construye en absoluto.
iris.NewBuilder().
Prefix("/api").
AllowOrigin("*").
Compression(true).
LogRequests(true).
Health(true, "production", "kataras").
Errors(errors.NewOptions().
MapErrors(errors.NotFound, catalog.ErrNotFound)).
Services(catalog.NewRepository, catalog.NewService).
API("/products", api.NewProductsAPI).
Build().
Listen(":8080")
Los handlers dejan de repetirse
La decodificación, la validación y el renderizado de errores salen del cuerpo del handler. rest.ReadJSON[T] decodifica la petición, ejecuta el método Validate() error de su tipo cuando existe, y escribe el 400 por sí mismo. Los ayudantes de respuesta escriben el estado de éxito, o lo que su mapa central diga que debe devolver ese error.
func (api *ProductsAPI) create(ctx iris.Context) {
input, ok := rest.ReadJSON[catalog.ProductInput](ctx)
if !ok {
return // 400 ya escrito: JSON mal formado o Validate fallido.
}
id, err := api.svc.Create(ctx, input)
rest.Created(ctx, id, err) // 201, o el error mapeado centralmente.
}
rest.OK, rest.NoContent, rest.Count y rest.Paginated cubren el resto de formas que devuelve una API.
Los errores se declaran una sola vez
El nuevo paquete rest/errors guarda la correspondencia entre los errores de su dominio y las respuestas HTTP. Los clientes reciben cargas canónicas y legibles por máquina. Los mensajes internos se quedan dentro. Registre un colector y cada fallo llega a su logger o a su base de datos desde un único lugar. Un error puede renderizarse como JSON o como vista, según lo que haya pedido el cliente.
Inyección de dependencias en todas partes, no solo en MVC
Los constructores declaran lo que necesitan y el contenedor se lo proporciona: para handlers, para grupos de API, para controladores. Un servicio que implementa Init(ctx context.Context) error se ejecuta una vez dentro de Build(). Todo lo que se pueda cerrar se cierra al apagar. El paquete hero desaparece, reemplazado por dep y rest, que hacen más en menos líneas. Los controladores MVC están construidos sobre genéricos.
Los paquetes están donde uno espera
sessions, cache, websocket, i18n, view y versioning pasaron a ser middleware. mvc se movió bajo controller, junto a los nuevos controladores fileserver, sitemap y apigraph. apigraph dibuja su árbol de rutas como un grafo D3 interactivo.
Vienen treinta middleware incluidos, entre ellos varios nuevos: httpcost (tiempo, memoria y CPU por petición, para trabajo de rendimiento o facturación), bodylimit, compress, counter, referrer, geolocation, ipaccess y servertiming. Las implementaciones de motores de vistas se movieron a iris-contrib/views.
La configuración es un literal parcial
iris.Configuration y los configuradores With* se reemplazan por iris.Options. Establezca los campos que le importan y el resto viene de los valores por defecto. Bind carga YAML desde la variable de entorno SERVER_CONFIG y luego desde un archivo.
app := iris.New(iris.Options{Name: "myapp", LogLevel: "debug"})
Nombres que dicen lo que hacen
Leer una cabecera de petición y establecer una de respuesta ya no comparten un prefijo que cambia de sentido en silencio: ctx.Header lee la petición, mientras que ctx.SetHeader y ctx.ResponseHeader trabajan sobre la respuesta. Party ahora es Router. ctx.URLParam ahora es ctx.Query().Get. Cada renombrado está listado en la guía de migración junto a su reemplazo, y la mayoría son una búsqueda y sustitución.
Seguro por defecto
Las cookies de sesión vienen con Secure y SameSite=Lax. El límite del cuerpo de la petición se aplica en todos los caminos de lectura. Con la reconstrucción cayeron errores de años, entre ellos un limitador de tasa que registraba los límites sin aplicarlos nunca y una llamada a Logout que podía llevarse el proceso por delante.
Documentación que se lee de principio a fin
v14 viene con un libro de 23 capítulos dentro del repositorio, un tutorial de primeros pasos que construye una API REST con pruebas en un solo documento, una guía de migración para aplicaciones v12, y un wiki de IA en vivo generado desde el código fuente que responde preguntas sobre la base de código.
Qué significa para su código v12
La ruta de importación pasa a ser github.com/kataras/iris/v14, así que v12 y v14 pueden convivir y nada se rompe el día del lanzamiento. Actualice cuando le venga bien. La guía de migración cubre la ruta de importación, los movimientos de paquetes, cada API eliminada y su reemplazo, y los cambios de comportamiento, con comandos listos para las partes mecánicas.
Todavía no hay fecha pública de lanzamiento. Siga los releases o a @iris_framework para enterarse antes que nadie.
👑 Patrocinadores
¡Con su ayuda podemos mejorar el desarrollo web de código abierto para todos!
📖 Aprendiendo Iris
Instalación
El único requisito es el lenguaje de programación Go.
Crear un proyecto nuevo
$ mkdir myapp
$ cd myapp
$ go mod init myapp
$ go get github.com/kataras/iris/v12@latest # o @v12.2.11
Instalar en un proyecto existente
$ cd myapp
$ go get github.com/kataras/iris/v12@latest
Ejecutar
$ go mod tidy -compat=1.23 # -compat="1.23" en windows.
$ go run .
Iris cuenta con una documentación amplia y detallada que facilita empezar con el framework.
Para documentación técnica más detallada puede dirigirse a nuestros godocs. Y para código ejecutable siempre puede visitar el subdirectorio ./_examples del repositorio.
Desarrolle con Plexon AI
Plexon AI es un asistente de programación con IA multiplataforma de Hellenic Development, y viene con una skill dedicada a Iris: una guía de desarrollo para v14 escrita por el propio autor del framework, con diecinueve documentos de referencia que cubren enrutamiento y macros, la API de contexto, los ayudantes rest, el manejo de errores, los treinta middleware, los controladores integrados, el SDK de autenticación, el endurecimiento de la seguridad, la persistencia, la caché, i18n, observabilidad, rendimiento, pruebas, despliegue y la migración de v12 a v14.
Instale la persona Software Developer y la skill de Iris viene con ella, junto a los agentes de ingeniería que activa. Su asistente escribe entonces código Iris como el framework está pensado para usarse, en lugar de adivinar a partir de lo que vio durante su entrenamiento.
¿Le gusta leer mientras viaja?
Puede solicitar hoy mismo el PDF y el acceso en línea al E-Book de Iris (Nueva Edición) y participar en el desarrollo de Iris.
🙌 Contribuir
¡Nos encantaría ver su contribución al Iris Web Framework! Para más información sobre cómo contribuir al proyecto Iris consulte el archivo CONTRIBUTING.md.
Lista de todos los contribuyentes
🛡 Vulnerabilidades de seguridad
Si descubre una vulnerabilidad de seguridad en Iris, envíe un correo a iris-go@outlook.com. Todas las vulnerabilidades de seguridad se atenderán con prontitud.
📝 Licencia
Este proyecto está bajo la licencia BSD de 3 cláusulas, igual que el propio proyecto Go.
El nombre del proyecto "Iris" se inspiró en la mitología griega.

