105 KiB
Новости
🚀 Iris v14 уже в пути. Следующая мажорная версия — самый крупный релиз за всю историю проекта: фреймворк, перестроенный на дженериках Go, конструктор приложения, который проверяет компилятор, помощники запроса, выполняющие валидацию за вас, единая карта ошибок, тридцать встроенных middleware и книга прямо внутри репозитория. Смотрите что нас ждёт в Iris v14 ниже.
Версия, о которой рассказывает этот файл, v12, продолжает работать и получать исправления. v14 выходит на новом пути импорта, поэтому в день релиза у вас ничего не сломается.
Iris Web Framework English
العربية
⚡ Iris — это быстрый, простой, но полнофункциональный и очень эффективный веб-фреймворк для Go.
✨ Он даёт выразительную и простую в использовании основу для вашего следующего сайта или API.
🌟 Узнайте, что говорят другие об Iris, и поставьте звёздочку этому проекту с открытым исходным кодом
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")
}
Как однажды сказал один Go-разработчик, 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 в одном выражении. Порядок шагов задаёт компилятор, поэтому приложение либо собирается правильно, либо не собирается вовсе.
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. Помощники ответа пишут статус успеха или то, что ваша центральная карта назначила этой ошибке.
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.
Конфигурация — это частичный литерал
iris.Configuration и конфигураторы With* заменены на iris.Options. Задавайте только те поля, которые вам важны, остальные придут из значений по умолчанию. Bind читает YAML сначала из переменной окружения SERVER_CONFIG, затем из файла.
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 и его замену, а также изменения поведения, с готовыми командами для механической части.
Публичной даты релиза пока нет. Следите за релизами или подпишитесь на @iris_framework, чтобы узнать первыми.
👑 Спонсоры
С вашей помощью мы можем сделать веб-разработку с открытым исходным кодом лучше для всех!
📖 Изучение Iris
Установка
Единственное требование — язык программирования Go.
Создание нового проекта
$ mkdir myapp
$ cd myapp
$ go mod init myapp
$ go get github.com/kataras/iris/v12@latest # или @v12.2.11
Установка в существующий проект
$ cd myapp
$ go get github.com/kataras/iris/v12@latest
Запуск
$ go mod tidy -compat=1.23 # -compat="1.23" для windows.
$ go run .
У Iris есть подробная и тщательная документация, которая позволяет быстро начать работу с фреймворком.
Более детальную техническую документацию можно найти в наших godocs. А за исполняемым кодом всегда можно заглянуть в подкаталог ./_examples этого репозитория.
Разработка с Plexon AI
Plexon AI — это кроссплатформенный AI-помощник для программирования от Hellenic Development, и он поставляется с отдельным скиллом для Iris: руководством по разработке на v14, написанным самим автором фреймворка, с девятнадцатью справочными документами про маршрутизацию и макросы, context API, помощники rest, обработку ошибок, все тридцать middleware, встроенные контроллеры, SDK аутентификации, усиление безопасности, работу с базами данных, кэширование, i18n, наблюдаемость, производительность, тестирование, развёртывание и переход с v12 на v14.
Установите персону Software Developer — скилл Iris придёт вместе с ней, рядом с инженерными агентами, которые она включает. После этого ваш помощник пишет код на Iris так, как фреймворк и задуман, а не догадывается по тому, что успел увидеть при обучении.
Вы любите читать во время путешествий?
Вы можете запросить PDF-версию и онлайн-доступ к Iris E-Book (новое издание) уже сегодня и принять участие в разработке Iris.
🙌 Содействие
Мы будем рады видеть ваш вклад в веб-фреймворк Iris! Для получения дополнительной информации о содействии проекту Iris, пожалуйста, посмотрите файл CONTRIBUTING.md.
🛡 Уязвимости безопасности
Если вы обнаружите уязвимость безопасности в Iris, отправьте письмо на iris-go@outlook.com. Все уязвимости безопасности будут оперативно устранены.
📝 Лицензия
Проект распространяется под лицензией BSD 3-clause, как и сам язык Go.
Название проекта «Iris» было вдохновлено греческой мифологией.

