Новости
> 🚀 **Iris v14 уже в пути.** Следующая мажорная версия — самый крупный релиз за всю историю проекта: фреймворк, перестроенный на дженериках Go, конструктор приложения, который проверяет компилятор, помощники запроса, выполняющие валидацию за вас, единая карта ошибок, тридцать встроенных middleware и книга прямо внутри репозитория. Смотрите [что нас ждёт в Iris v14](#-что-нас-ждёт-в-iris-v14) ниже.
>
> Версия, о которой рассказывает этот файл, **v12**, продолжает работать и получать исправления. v14 выходит на новом пути импорта, поэтому в день релиза у вас ничего не сломается.
#
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 — это быстрый, простой, но полнофункциональный и очень эффективный веб-фреймворк для Go.
✨ Он даёт выразительную и простую в использовании основу для вашего следующего сайта или API.
🌟 Узнайте, что [говорят другие об Iris](https://www.iris-go.com/#review), и поставьте **[звёздочку](https://github.com/kataras/iris/stargazers)** этому проекту с открытым исходным кодом
[](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")
}
```
Как однажды сказал один [Go-разработчик](https://twitter.com/dkuye/status/1532087942696554497), **Iris прикрывает вас со всех сторон и держится крепко все эти годы** ⭐
Часть возможностей, которые даёт Iris:
* HTTP/2 (Push, в том числе встроенные данные)
* Middleware (Accesslog, Basicauth, CORS, gRPC, Anti-Bot hCaptcha, JWT, MethodOverride, ModRevision, Monitor, PPROF, Ratelimit, Anti-Bot reCaptcha, Recovery, RequestID, Rewrite)
* Версионирование API
* Model-View-Controller
* Websockets
* gRPC
* Auto-HTTPS
* Встроенная поддержка ngrok — самый быстрый способ выложить приложение в интернет
* Уникальный роутер с динамическими путями в качестве параметров, со стандартными типами вроде :uuid, :string, :int... и возможностью создавать свои
* Сжатие
* Движки шаблонов (HTML, Django, Handlebars, Pug/Jade и другие)
* Создайте собственный файловый сервер и разместите свой WebDAV-сервер
* Кэш
* Локализация (i18n, sitemap)
* Сессии
* Богатые ответы (HTML, Text, Markdown, XML, YAML, Binary, JSON, JSONP, Protocol Buffers, MessagePack, Content Negotiation, Streaming, Server-Sent Events и другие)
* Сжатие ответов (gzip, deflate, brotli, snappy, s2)
* Богатые запросы (Bind URL Query, Headers, Form, Text, XML, YAML, Binary, JSON, Validation, Protocol Buffers, MessagePack и другие)
* Внедрение зависимостей (MVC, Handlers, API Routers)
* Набор средств для тестирования
* И самое важное... вы получаете быстрые ответы и поддержку с первого дня и до сих пор
## 🚀 Что нас ждёт в Iris v14
Iris v14 — самый крупный релиз в истории проекта. Он перестраивает фреймворк на дженериках Go и меняет то, как собирается приложение: меньше проводки в `main`, короче обработчики и одно место для решений, которые раньше были размазаны по каждому маршруту.
Сегодня от вас ничего не требуется. v12 продолжает работать, продолжает получать исправления, а v14 выходит с руководством по миграции, где разобран каждый переименованный и удалённый API.
### Всё приложение в одной цепочке, которую проверяет компилятор
`iris.NewBuilder` связывает CORS, сжатие, журнал доступа, health-эндпоинт, карту ошибок, ваши сервисы и группы API в одном выражении. Порядок шагов задаёт компилятор, поэтому приложение либо собирается правильно, либо не собирается вовсе.
```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")
```
### Обработчики перестают повторяться
Декодирование, валидация и отрисовка ошибок уходят из тела обработчика. `rest.ReadJSON[T]` разбирает запрос, вызывает метод `Validate() error` вашего типа, если он есть, и сам пишет 400. Помощники ответа пишут статус успеха или то, что ваша центральная карта назначила этой ошибке.
```go
func (api *ProductsAPI) create(ctx iris.Context) {
input, ok := rest.ReadJSON[catalog.ProductInput](ctx)
if !ok {
return // 400 уже записан: некорректный JSON или неудачный Validate.
}
id, err := api.svc.Create(ctx, input)
rest.Created(ctx, id, err) // 201 или централизованно сопоставленная ошибка.
}
```
`rest.OK`, `rest.NoContent`, `rest.Count` и `rest.Paginated` закрывают остальные формы ответов API.
### Ошибки объявляются один раз
Новый пакет `rest/errors` хранит соответствие между ошибками вашей предметной области и HTTP-ответами. Клиенты получают канонические, машиночитаемые данные. Внутренние сообщения остаются внутри. Зарегистрируйте коллектор — и каждый сбой попадёт в ваш логгер или базу данных из одного места. Ошибка может отрисоваться как JSON или как представление, в зависимости от того, что запросил клиент.
### Внедрение зависимостей везде, а не только в MVC
Конструкторы объявляют, что им нужно, а контейнер это выдаёт: для обработчиков, для групп API, для контроллеров. Сервис, реализующий `Init(ctx context.Context) error`, выполняется один раз внутри `Build()`. Всё, что можно закрыть, закрывается при остановке. Пакет `hero` исчез, его заменили `dep` и `rest`, которые делают больше меньшим количеством кода. Контроллеры MVC построены на дженериках.
### Пакеты лежат там, где их ожидаешь найти
`sessions`, `cache`, `websocket`, `i18n`, `view` и `versioning` стали middleware. `mvc` переехал под `controller`, рядом с новыми контроллерами `fileserver`, `sitemap` и `apigraph`. `apigraph` рисует дерево ваших маршрутов интерактивным графом D3.
В комплекте тридцать middleware, среди них новые: `httpcost` (время, память и CPU на запрос — для работы над производительностью или для тарификации), `bodylimit`, `compress`, `counter`, `referrer`, `geolocation`, `ipaccess` и `servertiming`. Реализации движков шаблонов переехали в [iris-contrib/views](https://github.com/iris-contrib/views).
### Конфигурация — это частичный литерал
`iris.Configuration` и конфигураторы `With*` заменены на `iris.Options`. Задавайте только те поля, которые вам важны, остальные придут из значений по умолчанию. `Bind` читает YAML сначала из переменной окружения `SERVER_CONFIG`, затем из файла.
```go
app := iris.New(iris.Options{Name: "myapp", LogLevel: "debug"})
```
### Имена, которые говорят, что они делают
Чтение заголовка запроса и установка заголовка ответа больше не делят префикс, который тихо менял смысл: `ctx.Header` читает запрос, а `ctx.SetHeader` и `ctx.ResponseHeader` работают с ответом. `Party` теперь `Router`. `ctx.URLParam` теперь `ctx.Query().Get`. Каждое переименование указано в руководстве по миграции вместе с заменой, и большинство из них — это одна замена по всему проекту.
### Безопасно по умолчанию
Куки сессий выставляются с `Secure` и `SameSite=Lax`. Ограничение на размер тела запроса применяется на всех путях чтения. Вместе с перестройкой ушли давние баги, среди них ограничитель частоты запросов, который фиксировал лимиты, но никогда их не применял, и вызов `Logout`, способный уронить весь процесс.
### Документация, которую можно прочитать от начала до конца
В v14 входит книга из 23 глав внутри репозитория, вводное руководство, которое строит покрытый тестами REST API в одном документе, руководство по миграции для приложений v12 и живая AI-вики, сгенерированная из исходников и отвечающая на вопросы о кодовой базе.
### Что это значит для вашего кода на v12
Путь импорта становится `github.com/kataras/iris/v14`, поэтому v12 и v14 могут существовать рядом и в день релиза ничего не сломается. Обновляйтесь тогда, когда вам удобно. Руководство по миграции охватывает путь импорта, переезды пакетов, каждый удалённый API и его замену, а также изменения поведения, с готовыми командами для механической части.
Публичной даты релиза пока нет. Следите за [релизами](https://github.com/kataras/iris/releases) или подпишитесь на [@iris_framework](https://twitter.com/iris_framework), чтобы узнать первыми.
## 👑 Спонсоры
С вашей помощью мы можем сделать веб-разработку с открытым исходным кодом лучше для всех!
## 📖 Изучение Iris
### Установка
Единственное требование — [язык программирования Go](https://go.dev/dl/).
#### Создание нового проекта
```sh
$ mkdir myapp
$ cd myapp
$ go mod init myapp
$ go get github.com/kataras/iris/v12@latest # или @v12.2.11
```
Установка в существующий проект
```sh
$ cd myapp
$ go get github.com/kataras/iris/v12@latest
```
**Запуск**
```sh
$ go mod tidy -compat=1.23 # -compat="1.23" для windows.
$ go run .
```

У Iris есть подробная и тщательная **[документация](https://www.iris-go.com/docs)**, которая позволяет быстро начать работу с фреймворком.
Более детальную техническую документацию можно найти в наших [godocs](https://pkg.go.dev/github.com/kataras/iris/v12@v12.2.11). А за исполняемым кодом всегда можно заглянуть в подкаталог [./_examples](_examples) этого репозитория.
### Разработка с Plexon AI
[Plexon AI](https://plexon.ai) — это кроссплатформенный AI-помощник для программирования от Hellenic Development, и он поставляется с отдельным **скиллом для Iris**: руководством по разработке на v14, написанным самим автором фреймворка, с девятнадцатью справочными документами про маршрутизацию и макросы, context API, помощники `rest`, обработку ошибок, все тридцать middleware, встроенные контроллеры, SDK аутентификации, усиление безопасности, работу с базами данных, кэширование, i18n, наблюдаемость, производительность, тестирование, развёртывание и переход с v12 на v14.
Установите персону **Software Developer** — скилл Iris придёт вместе с ней, рядом с инженерными агентами, которые она включает. После этого ваш помощник пишет код на Iris так, как фреймворк и задуман, а не догадывается по тому, что успел увидеть при обучении.
### Вы любите читать во время путешествий?
[](https://twitter.com/intent/follow?screen_name=makismaropoulos)
[](https://twitter.com/intent/follow?screen_name=iris_framework)
[](https://www.facebook.com/iris.framework)
Вы можете [запросить](https://www.iris-go.com/#ebookDonateForm) PDF-версию и онлайн-доступ к **Iris E-Book** (новое издание) уже сегодня и принять участие в разработке Iris.
## 🙌 Содействие
Мы будем рады видеть ваш вклад в веб-фреймворк Iris! Для получения дополнительной информации о содействии проекту Iris, пожалуйста, посмотрите файл [CONTRIBUTING.md](CONTRIBUTING.md).
[Список всех участников](https://github.com/kataras/iris/graphs/contributors)
## 🛡 Уязвимости безопасности
Если вы обнаружите уязвимость безопасности в Iris, отправьте письмо на [iris-go@outlook.com](mailto:iris-go@outlook.com). Все уязвимости безопасности будут оперативно устранены.
## 📝 Лицензия
Проект распространяется под [лицензией BSD 3-clause](LICENSE), как и сам язык Go.
Название проекта «Iris» было вдохновлено греческой мифологией.