Actualités
> đ **Iris v14 arrive.** La prochaine version majeure est la plus importante de l'histoire du projet : le framework reconstruit sur les gĂ©nĂ©riques de Go, un constructeur d'application vĂ©rifiĂ© par le compilateur, des aides de requĂȘte qui valident Ă votre place, une table d'erreurs centrale, trente middlewares intĂ©grĂ©s et un livre livrĂ© dans le dĂ©pĂŽt lui-mĂȘme. Voir [ce qui arrive dans Iris v14](#-ce-qui-arrive-dans-iris-v14) plus bas.
>
> La version décrite ici, **v12**, continue de fonctionner et de recevoir des correctifs. v14 arrive sur un nouveau chemin d'import, donc rien ne casse chez vous le jour de sa sortie.
#
Iris Web Framework English
ۧÙŰč۱ۚÙŰ©
[](https://github.com/kataras/iris/actions/workflows/ci.yml) [](https://github.com/kataras/iris/tree/main/_examples) [](https://gitter.im/iris_go/community) [](https://iris-go.com/donate)
⥠Iris est un framework web pour Go à la fois rapide, simple, trÚs complet et trÚs efficace.
⚠Il fournit des moyens simples et élégants de construire les bases de votre prochain site web ou API.
đ Lisez [ce que les dĂ©veloppeurs pensent d'Iris](https://www.iris-go.com/#review) et **[Ă©toilez](https://github.com/kataras/iris/stargazers)** ce projet open source
[](https://iris-go.com/testimonials/)
[](https://github.com/kataras/server-benchmarks)
```go
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 %s!", "World")
})
app.Listen(":8080")
}
```
Comme l'a dit un jour un [dĂ©veloppeur Go](https://twitter.com/dkuye/status/1532087942696554497), **Iris vous couvre sur tous les fronts et tient bon au fil des annĂ©es** â
Quelques-unes des fonctionnalités qu'offre Iris :
* HTTP/2 (Push, y compris les données embarquées)
* Middlewares (Accesslog, Basicauth, CORS, gRPC, Anti-Bot hCaptcha, JWT, MethodOverride, ModRevision, Monitor, PPROF, Ratelimit, Anti-Bot reCaptcha, Recovery, RequestID, Rewrite)
* Versionnage d'API
* Model-View-Controller
* Websockets
* gRPC
* Auto-HTTPS
* Prise en charge intégrée de ngrok, le moyen le plus rapide de publier votre application sur internet
* Un routeur unique avec des chemins dynamiques en paramÚtre, des types standards comme :uuid, :string, :int... et la possibilité de créer les vÎtres
* Compression
* Moteurs de vues (HTML, Django, Handlebars, Pug/Jade et plus)
* Créez votre propre serveur de fichiers et hébergez votre propre serveur WebDAV
* Cache
* Localisation (i18n, sitemap)
* Sessions
* Réponses riches (HTML, Text, Markdown, XML, YAML, Binary, JSON, JSONP, Protocol Buffers, MessagePack, Content Negotiation, Streaming, Server-Sent Events et plus)
* Compression des réponses (gzip, deflate, brotli, snappy, s2)
* RequĂȘtes riches (Bind URL Query, Headers, Form, Text, XML, YAML, Binary, JSON, Validation, Protocol Buffers, MessagePack et plus)
* Injection de dépendances (MVC, Handlers, API Routers)
* Suite de tests
* Et le plus important... vous obtenez des réponses rapides et du support, depuis le premier jour jusqu'à aujourd'hui
## đ Ce qui arrive dans Iris v14
Iris v14 est la plus grande version de l'histoire du projet. Elle reconstruit le framework sur les génériques de Go et change la façon dont une application est assemblée : moins de cùblage dans `main`, des handlers plus courts, et un seul endroit pour les décisions qui étaient auparavant éparpillées sur chaque route.
Rien de tout cela ne demande votre attention aujourd'hui. v12 continue de fonctionner, continue de recevoir des correctifs, et v14 arrive avec un guide de migration qui couvre chaque API renommée ou supprimée.
### Toute l'application dans une chaßne vérifiée par le compilateur
`iris.NewBuilder` cùble CORS, compression, journalisation des accÚs, l'endpoint de santé, la table d'erreurs, vos services et vos groupes d'API en une seule expression. Le compilateur impose l'ordre des étapes : une application se construit correctement, ou ne se construit pas du tout.
```go
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")
```
### Les handlers cessent de se répéter
Le dĂ©codage, la validation et le rendu des erreurs sortent du corps du handler. `rest.ReadJSON[T]` dĂ©code la requĂȘte, exĂ©cute la mĂ©thode `Validate() error` de votre type lorsqu'elle existe, et Ă©crit lui-mĂȘme le 400. Les aides de rĂ©ponse Ă©crivent le statut de succĂšs, ou ce que votre table centrale dit que cette erreur doit renvoyer.
```go
func (api *ProductsAPI) create(ctx iris.Context) {
input, ok := rest.ReadJSON[catalog.ProductInput](ctx)
if !ok {
return // 400 déjà écrit : JSON malformé ou Validate en échec.
}
id, err := api.svc.Create(ctx, input)
rest.Created(ctx, id, err) // 201, ou l'erreur mappée centralement.
}
```
`rest.OK`, `rest.NoContent`, `rest.Count` et `rest.Paginated` couvrent les autres formes de réponse d'une API.
### Les erreurs sont déclarées une seule fois
Le nouveau paquet `rest/errors` contient la correspondance entre les erreurs de votre domaine et les rĂ©ponses HTTP. Les clients reçoivent des charges utiles canoniques et lisibles par une machine. Les messages internes restent internes. Enregistrez un collecteur et chaque Ă©chec atteint votre logger ou votre base de donnĂ©es depuis un seul endroit. Une erreur peut ĂȘtre rendue en JSON ou en vue, selon ce que le client a demandĂ©.
### L'injection de dépendances partout, pas seulement en MVC
Les constructeurs dĂ©clarent ce dont ils ont besoin et le conteneur le fournit : pour les handlers, pour les groupes d'API, pour les contrĂŽleurs. Un service qui implĂ©mente `Init(ctx context.Context) error` s'exĂ©cute une fois dans `Build()`. Tout ce qui peut ĂȘtre fermĂ© est fermĂ© Ă l'arrĂȘt. Le paquet `hero` disparaĂźt, remplacĂ© par `dep` et `rest`, qui en font plus en moins de lignes. Les contrĂŽleurs MVC sont construits sur les gĂ©nĂ©riques.
### Les paquets sont lĂ oĂč on les attend
`sessions`, `cache`, `websocket`, `i18n`, `view` et `versioning` sont devenus des middlewares. `mvc` a été déplacé sous `controller`, aux cÎtés des nouveaux contrÎleurs `fileserver`, `sitemap` et `apigraph`. `apigraph` dessine votre arbre de routes sous forme de graphe D3 interactif.
Trente middlewares sont fournis d'origine, dont de nouveaux : `httpcost` (temps, mĂ©moire et CPU par requĂȘte, pour l'analyse de performance ou la facturation), `bodylimit`, `compress`, `counter`, `referrer`, `geolocation`, `ipaccess` et `servertiming`. Les implĂ©mentations de moteurs de vues ont Ă©tĂ© dĂ©placĂ©es vers [iris-contrib/views](https://github.com/iris-contrib/views).
### La configuration est un littéral partiel
`iris.Configuration` et les configurateurs `With*` sont remplacés par `iris.Options`. Renseignez les champs qui vous intéressent, le reste vient des valeurs par défaut. `Bind` charge du YAML depuis la variable d'environnement `SERVER_CONFIG`, puis depuis un fichier.
```go
app := iris.New(iris.Options{Name: "myapp", LogLevel: "debug"})
```
### Des noms qui disent ce qu'ils font
Lire un en-tĂȘte de requĂȘte et dĂ©finir un en-tĂȘte de rĂ©ponse ne partagent plus un prĂ©fixe qui change discrĂštement de sens : `ctx.Header` lit la requĂȘte, tandis que `ctx.SetHeader` et `ctx.ResponseHeader` travaillent sur la rĂ©ponse. `Party` devient `Router`. `ctx.URLParam` devient `ctx.Query().Get`. Chaque renommage figure dans le guide de migration avec son remplacement, et la plupart tiennent en un rechercher-remplacer.
### Sécurisé par défaut
Les cookies de session sont livrĂ©s avec `Secure` et `SameSite=Lax`. La limite de taille du corps de requĂȘte est appliquĂ©e sur tous les chemins de lecture. La reconstruction a emportĂ© des bugs de longue date, parmi lesquels un limiteur de dĂ©bit qui enregistrait les limites sans jamais les appliquer et un appel Ă `Logout` capable d'emporter le processus avec lui.
### Une documentation qui se lit du début à la fin
v14 est livré avec un livre de 23 chapitres dans le dépÎt, un tutoriel de démarrage qui construit une API REST testée en un seul document, un guide de migration pour les applications v12, et un wiki IA en direct généré depuis les sources qui répond aux questions sur le code.
### Ce que cela signifie pour votre code v12
Le chemin d'import devient `github.com/kataras/iris/v14`, donc v12 et v14 peuvent cohabiter et rien ne casse le jour de la sortie. Mettez Ă jour quand cela vous arrange. Le guide de migration couvre le chemin d'import, les dĂ©placements de paquets, chaque API supprimĂ©e et son remplacement, ainsi que les changements de comportement, avec des commandes prĂȘtes pour les parties mĂ©caniques.
Il n'y a pas encore de date de sortie publique. Surveillez les [releases](https://github.com/kataras/iris/releases) ou suivez [@iris_framework](https://twitter.com/iris_framework) pour l'apprendre en premier.
## đ Soutiens
Avec votre aide, nous pouvons améliorer le développement web open source pour tout le monde !
## đ DĂ©marrer avec Iris
### Installation
Le seul prérequis est le [langage de programmation Go](https://go.dev/dl/).
#### Créer un nouveau projet
```sh
$ mkdir myapp
$ cd myapp
$ go mod init myapp
$ go get github.com/kataras/iris/v12@latest # ou @v12.2.11
```
Installer dans un projet existant
```sh
$ cd myapp
$ go get github.com/kataras/iris/v12@latest
```
**Exécuter**
```sh
$ go mod tidy -compat=1.23 # -compat="1.23" sous windows.
$ go run .
```

Iris possÚde une **[documentation](https://www.iris-go.com/docs)** complÚte et précise qui facilite la prise en main du framework.
Pour une documentation technique plus détaillée vous pouvez consulter nos [godocs](https://pkg.go.dev/github.com/kataras/iris/v12@v12.2.11). Et pour du code exécutable vous trouverez toujours le sous-dossier [./_examples](_examples) du dépÎt.
### Développer avec Plexon AI
[Plexon AI](https://plexon.ai) est un assistant de programmation IA multiplateforme signé Hellenic Development, et il est livré avec une **skill dédiée à Iris** : un guide de développement v14 écrit par l'auteur du framework, avec dix-neuf documents de référence couvrant le routage et les macros, l'API de contexte, les aides `rest`, la gestion des erreurs, les trente middlewares, les contrÎleurs intégrés, le SDK d'authentification, le durcissement de la sécurité, la persistance, le cache, l'i18n, l'observabilité, les performances, les tests, le déploiement et la migration de v12 vers v14.
Installez la persona **Software Developer** et la skill Iris arrive avec elle, aux cĂŽtĂ©s des agents d'ingĂ©nierie qu'elle active. Votre assistant Ă©crit alors du code Iris tel que le framework est censĂ© ĂȘtre utilisĂ©, au lieu de deviner Ă partir de ce qu'il a croisĂ© pendant son entraĂźnement.
### Vous aimez lire en voyageant ?
[](https://twitter.com/intent/follow?screen_name=makismaropoulos)
[](https://twitter.com/intent/follow?screen_name=iris_framework)
[](https://www.facebook.com/iris.framework)
Vous pouvez [demander](https://www.iris-go.com/#ebookDonateForm) dÚs aujourd'hui le PDF et l'accÚs en ligne à l'**E-Book Iris** (nouvelle édition) et participer au développement d'Iris.
## đ Contribuer
Toute contribution à Iris est la bienvenue ! Pour plus d'informations sur la contribution au projet référez-vous au fichier [CONTRIBUTING.md](CONTRIBUTING.md).
[Liste des contributeurs](https://github.com/kataras/iris/graphs/contributors)
## đĄ SĂ©curitĂ© et vulnĂ©rabilitĂ©s
Si vous trouvez une vulnérabilité dans Iris, envoyez un e-mail à [iris-go@outlook.com](mailto:iris-go@outlook.com). Toute vulnérabilité sera corrigée aussi rapidement que possible.
## đ Licence
Le projet est sous [licence BSD 3 clauses](LICENSE), tout comme le langage Go lui-mĂȘme.
Le nom "Iris" est inspiré de la mythologie grecque.