1
0
mirror of https://github.com/kataras/iris.git synced 2026-07-31 00:19:50 +00:00
Files
kararas_iris/README_RU.md
T
2026-07-27 11:40:16 +03:00

105 KiB
Raw Blame History

Новости

🚀 Iris v14 уже в пути. Следующая мажорная версия — самый крупный релиз за всю историю проекта: фреймворк, перестроенный на дженериках Go, конструктор приложения, который проверяет компилятор, помощники запроса, выполняющие валидацию за вас, единая карта ошибок, тридцать встроенных middleware и книга прямо внутри репозитория. Смотрите что нас ждёт в Iris v14 ниже.

Версия, о которой рассказывает этот файл, v12, продолжает работать и получать исправления. v14 выходит на новом пути импорта, поэтому в день релиза у вас ничего не сломается.

Iris Web Framework English العربية

build status view examples chat donate

Iris — это быстрый, простой, но полнофункциональный и очень эффективный веб-фреймворк для Go.

Он даёт выразительную и простую в использовании основу для вашего следующего сайта или API.

🌟 Узнайте, что говорят другие об Iris, и поставьте звёздочку этому проекту с открытым исходным кодом

Benchmarks: Jul 18, 2020 at 10:46am (UTC)

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, чтобы узнать первыми.

👑 Спонсоры

С вашей помощью мы можем сделать веб-разработку с открытым исходным кодом лучше для всех!

getsentry github lensesio thepunterbot h4rdc0m draFWM gf3 trading-peter AlbinoGeek basilarchia sumjoe simpleittools xiaozhuai Remydeme celsosz linxcoder jnelle TechMaster janwebdev altafino jakoubek alekperos day0ng hengestone thomasfr code-chimp CetinBasoz International Juanses SometimesMage ansrivas boreevyuri brentwilson camilbinas ekobayong lexrus li3p madhu72 mosorize se77en tstangenberg vincent-li DavidShaw sascha11110 clichi2002 derReineke Sirisap22 primadi agoncecelia chrisliang12 zyu hobysmith pluja antonio-pedrazzini clacroix njeff3 ixalender mubariz-ahmed Cesar th31nitiate stgrosshh Didainius DmarshalTU IwateKyle Little-YangYang Major2828 MatejLach amritpal042 andrefiorot boomhut cshum dtrifonov gadokrisztian geordee guanting112 iantuan ichenhe rodrigoghm icibiri jewe11er jfloresremar jingtianfeng kilarusravankumar leandrobraga lfbos lpintes macropas marcmmx mark2b miguel-devs mihado mmckeen75 narven odas0r olaf-lexemo pitexplore pr123 rsousacode sankethpb wixregiga GeorgeFourikis saz59 shadowfiga siriushaha skurtz97 srinivasganti syrm tuhao1020 BlackHole1 L-M-Sherlock claudemuller keymanye wahyuief xuyan2018 xvalen xytis ElNovi IpastorSan KKP4 Lernakow ernestocolombo francisstephan pixelheresy rcapraro soiestad spkarason thanasolykos ukitzmann DanielKirkwood colinf simonproctor FernandoLangOFC Firdavs9512 Flammable-Duck Gepetdo Hongjian0619 JoeD Jude-X Kartoffelbot KevinZhouRafael KrishManohar Laotanling Longf99999 Lyansun MihaiPopescu1985 TBNilles ajanicij aprinslo1 Mohammed8960 NA Neulhan kyoukhana spazzymoto victorgrey ArishSultan ehayun kukaki oshirokazuhide t6tg 15189573255 AGPDev AnatolyUA AwsIT NguyenPhuoc Oka00 PaddyFrenchman RainerGevers Ramblestsad SamuelNeves Scorpio69t Serissa4000 TianJIANG Ubun1 WangYajun39 XinYoungCN YukinaMochizuki a112121788 acdias aeonsthorn agent3bood ajb-neodynamics-io alessandromarotta algobot76 algoflows angelaahhu anhxuanpham annieruci antoniejiao artman328 b2cbd baoch254 bastengao beytullahakyuz bjoroen blackHoleNgc1277 bunnycodego carlos-enginner centratelemedia chrismalek civicwar cnzhangquan cuong48d damiensy danlanxiaohei dextercai dfaugusto dkzhang dloprodu donam-givita dph0899 dvitale ec0629 edwindna2 ekiyooka ekofedriyanto eli-yip eljefedelrodeodeljefe fenriz07 ffelipelimao frenchmajesty gastropulgite geGao123 globalflea gloudx gnosthi gogoswift goten002 guanzi008 hdezoscar93 hieungm hieunmg homerious hzxd inyellowbus iuliancarnaru iysaleh jackptoke jackysywk jeff2go jeremiahyan joelywz kamolcu kana99 edsongley katsubushiken kattaprasanth keeio keval6706 khasanovrs kkdaypenny knavels kohakuhubo korowiov kostasvk lafayetteDan lbsubash leki75 lemuelroberto liheyuan lingyingtan linuxluigi lipatti maikelcoke marek-kuticka marman-hp mattbowen maxgozou maxgozzz mitas mizzlespot mkell43 mnievesco mo3lyana motogo mtrense mukunhao mulyawansentosa nasoma ngseiyu nikharsaxena nronzel odelanno onlysumitg xPoppa yesudeep ymonk yonson2 yshengliao ytxmobile98 yusong-offx zhenggangpku zou8944 SergeShin - BelmonduS Diewald cty4ka martinjanda evan hazmi-e205 jtgoral ky2s lauweliam ozfive paulcockrell paulxu21 pesquive petros9282 phil535 pitt134 poscard qiepeipei qiuzhanghua rapita rbondi relaera remopavithran rfunix rhernandez-itemsoft rikoriswandha risallaw robivictor rubiagatra rubyangxg rxrw saleebm sbenimeli sebyno seun-otosho shobhitsinghal77 solohiroshi su1gen sukiejosh suresh16671 svirmi terjelafton thiennguyen93 unixedia vadgun valsorym vguhesan vpiduri vrocadev vuhoanglam walter-wang martinlindhe mdamschen letmestudy michaelsmanley Curtman SridarDhandapani madrigaltenor opusmagna ShahramMebashar b4zz4r bobmcallan fangli galois-tnp mblandr midhubalan netbaalzovf oliverjosefzimmer peacememories talebisinan valkuere lfaynman ArturWierzbicki aaxx crashCoder derekslenk dochoaj evillgenius75 gog200921 mauricedcastro mwiater sj671 statik supersherm5 thejones CSRaghunandan ndimorle rosales-stephanie shyyawn vcruzato wangbl11 wofka72 geoshan juanxme nguyentamvinhlong yoru74 xsokev oleang michalsz pomland-94 tejzpr theantichris tuxaanand raphael-brand willypuzzle dmcbane malcolm-white-dti HieuLsw carlosmoran092 yangxianglong

📖 Изучение 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 так, как фреймворк и задуман, а не догадывается по тому, что успел увидеть при обучении.

Вы любите читать во время путешествий?

Обложка книги

follow author on twitter

follow Iris web framework on twitter

follow Iris web framework on facebook

Вы можете запросить PDF-версию и онлайн-доступ к Iris E-Book (новое издание) уже сегодня и принять участие в разработке Iris.

🙌 Содействие

Мы будем рады видеть ваш вклад в веб-фреймворк Iris! Для получения дополнительной информации о содействии проекту Iris, пожалуйста, посмотрите файл CONTRIBUTING.md.

Список всех участников

🛡 Уязвимости безопасности

Если вы обнаружите уязвимость безопасности в Iris, отправьте письмо на iris-go@outlook.com. Все уязвимости безопасности будут оперативно устранены.

📝 Лицензия

Проект распространяется под лицензией BSD 3-clause, как и сам язык Go.

Название проекта «Iris» было вдохновлено греческой мифологией.