خبرها
> 🚀 **آیریس v14 در راه است.** نسخه اصلی بعدی بزرگترین انتشار تاریخ این پروژه است: چارچوبی که بر پایه جنریکهای Go بازسازی شده، سازندهای برای برنامه که کامپایلر آن را بررسی میکند، کمککنندههای درخواست که اعتبارسنجی را برایتان انجام میدهند، یک نقشه مرکزی خطاها، سی میانافزار داخلی و کتابی که همراه خود مخزن منتشر میشود. در ادامه [آنچه در 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)
⚡ آیریس یک چارچوب وب پرسرعت، ساده و در عین حال کاملاً برجسته و بسیار کارآمد برای Go است.
✨ آیریس پایهای زیبا، رسا و آسان برای وبسایت یا API بعدی شما فراهم میکند.
🌟 ببینید [دیگران درباره آیریس چه میگویند](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) زمانی گفت، **آیریس از هر جهت هوای شما را دارد و در گذر سالها استوار ایستاده است** ⭐
بخشی از امکاناتی که آیریس ارائه میدهد:
* HTTP/2 (Push، حتی دادههای جاسازیشده)
* میانافزارها (Accesslog، Basicauth، CORS، gRPC، ضدربات hCaptcha، JWT، MethodOverride، ModRevision، Monitor، PPROF، Ratelimit، ضدربات reCaptcha، Recovery، RequestID، Rewrite)
* نسخهبندی API
* Model-View-Controller
* Websockets
* gRPC
* HTTPS خودکار
* پشتیبانی داخلی از ngrok، سریعترین راه برای رساندن برنامه شما به اینترنت
* مسیریاب یکتا با مسیرهای پویا بهعنوان پارامتر، با انواع استاندارد مانند :uuid، :string، :int... و امکان ساخت انواع دلخواه
* فشردهسازی
* موتورهای نمایش (HTML، Django، Handlebars، Pug/Jade و بیشتر)
* ساخت فایلسرور اختصاصی خودتان و میزبانی سرور WebDAV خودتان
* کش
* بومیسازی (i18n، sitemap)
* نشستها (Sessions)
* پاسخهای غنی (HTML، Text، Markdown، XML، YAML، Binary، JSON، JSONP، Protocol Buffers، MessagePack، Content Negotiation، Streaming، Server-Sent Events و بیشتر)
* فشردهسازی پاسخ (gzip، deflate، brotli، snappy، s2)
* درخواستهای غنی (اتصال URL Query، Headers، Form، Text، XML، YAML، Binary، JSON، اعتبارسنجی، Protocol Buffers، MessagePack و بیشتر)
* تزریق وابستگی (MVC، Handlers، API Routers)
* مجموعه ابزار آزمون
* و مهمتر از همه... از روز اول تا امروز پاسخ سریع و پشتیبانی دریافت میکنید
## 🚀 آنچه در Iris v14 خواهد آمد
آیریس v14 بزرگترین انتشار تاریخ این پروژه است. چارچوب را روی جنریکهای Go بازسازی میکند و شیوه سرهمکردن یک برنامه را تغییر میدهد: سیمکشی کمتر در `main`، هندلرهای کوتاهتر، و یک جای واحد برای تصمیمهایی که پیشتر روی تکتک مسیرها پخش بودند.
هیچکدام از اینها امروز به توجه شما نیاز ندارد. v12 همچنان کار میکند، همچنان اصلاح میشود، و v14 همراه با راهنمای مهاجرتی میآید که هر API تغییرنامیافته یا حذفشده را پوشش میدهد.
### کل برنامه در یک زنجیره که کامپایلر آن را بررسی میکند
`iris.NewBuilder` در یک عبارت واحد، CORS، فشردهسازی، ثبت دسترسی، نقطه پایانی سلامت، نقشه خطاها، سرویسها و گروههای 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 را نگه میدارد. کلاینتها بار دادهای استاندارد و ماشینخوان دریافت میکنند. پیامهای داخلی داخلی میمانند. یک collector ثبت کنید تا هر شکست از یک نقطه واحد به لاگر یا پایگاهداده شما برسد. یک خطا بسته به آنچه کلاینت خواسته است میتواند بهصورت JSON یا بهصورت view نمایش داده شود.
### تزریق وابستگی همهجا، نه فقط در MVC
سازندهها اعلام میکنند به چه چیزی نیاز دارند و کانتینر آن را فراهم میکند: برای هندلرها، برای گروههای API، برای کنترلرها. سرویسی که `Init(ctx context.Context) error` را پیادهسازی کند یک بار درون `Build()` اجرا میشود. هر چیزی که قابل بستن باشد هنگام خاموشی بسته میشود. بسته `hero` حذف شده و جای آن را `dep` و `rest` گرفتهاند که با کد کمتر کار بیشتری انجام میدهند. کنترلرهای MVC روی جنریکها ساخته شدهاند.
### بستهها همانجایی هستند که انتظارش را دارید
`sessions`، `cache`، `websocket`، `i18n`، `view` و `versioning` به میانافزار تبدیل شدند. `mvc` به زیر `controller` منتقل شد، کنار کنترلرهای تازه `fileserver`، `sitemap` و `apigraph`. بسته `apigraph` درخت مسیرهای شما را بهصورت یک گراف تعاملی D3 ترسیم میکند.
سی میانافزار بهصورت آماده عرضه میشوند، از جمله موارد تازه: `httpcost` (زمان، حافظه و CPU بهازای هر درخواست، برای کار روی کارایی یا صورتحساب)، `bodylimit`، `compress`، `counter`، `referrer`، `geolocation`، `ipaccess` و `servertiming`. پیادهسازی موتورهای نمایش به [iris-contrib/views](https://github.com/iris-contrib/views) منتقل شد.
### پیکربندی یک مقدار جزئی است
`iris.Configuration` و پیکربندهای `With*` جای خود را به `iris.Options` دادهاند. فقط فیلدهایی را که برایتان مهم است بنویسید، بقیه از مقادیر پیشفرض میآیند. `Bind` ابتدا از متغیر محیطی `SERVER_CONFIG` و سپس از یک فایل، YAML را میخواند.
```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 با کتابی ۲۳ فصلی درون مخزن، آموزشی گامبهگام که یک REST API آزمونشده را در یک سند میسازد، راهنمای مهاجرت برای برنامههای v12، و یک ویکی هوش مصنوعی زنده که از روی کد تولید میشود و به پرسشهای شما درباره کد پاسخ میدهد عرضه میشود.
### این برای کد v12 شما چه معنایی دارد
مسیر ایمپورت به `github.com/kataras/iris/v14` تغییر میکند، بنابراین v12 و v14 میتوانند کنار هم بمانند و روز انتشار چیزی نمیشکند. هر وقت برایتان مناسب بود ارتقا دهید. راهنمای مهاجرت مسیر ایمپورت، جابهجایی بستهها، هر API حذفشده و جایگزینش، و تغییرات رفتاری را پوشش میدهد و برای بخشهای ماشینی، دستورهای آماده میدهد.
هنوز تاریخ انتشار عمومی اعلام نشده است. [releases](https://github.com/kataras/iris/releases) را دنبال کنید یا [@iris_framework](https://twitter.com/iris_framework) را دنبال کنید تا زودتر از همه باخبر شوید.
## 👑
حامیان
با کمک شما میتوانیم توسعه وب متنباز را برای همه بهتر کنیم!
## 📖 یادگیری آیریس
### نصب
تنها پیشنیاز، [زبان برنامهنویسی 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".
$ go run .
```

آیریس **[مستندات](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) یک دستیار برنامهنویسی مبتنی بر هوش مصنوعی و چندسکویی از Hellenic Development است و یک **مهارت (skill) اختصاصی برای آیریس** بههمراه دارد: راهنمای توسعه v14 که خودِ نویسنده چارچوب آن را نوشته است، با نوزده سند مرجع درباره مسیریابی و ماکروها، context API، کمککنندههای `rest`، مدیریت خطا، هر سی میانافزار، کنترلرهای داخلی، SDK احراز هویت، سختسازی امنیتی، ماندگاری داده، کش، i18n، مشاهدهپذیری، کارایی، آزمون، استقرار، و مهاجرت از v12 به v14.
شخصیت (persona) **Software Developer** را نصب کنید تا مهارت آیریس هم همراهش بیاید، کنار عاملهای مهندسیای که فعال میکند. آنگاه دستیار شما کد آیریس را همانطور که این چارچوب قرار است استفاده شود مینویسد، نه بر اساس حدس از آنچه در آموزش دیده است.
### دوست دارید هنگام سفر مطالعه کنید؟
[](https://twitter.com/intent/follow?screen_name=makismaropoulos)
[](https://twitter.com/intent/follow?screen_name=iris_framework)
[](https://www.facebook.com/iris.framework)
میتوانید همین امروز نسخه PDF و دسترسی آنلاین **کتاب الکترونیکی آیریس** (ویرایش جدید) را [درخواست کنید](https://www.iris-go.com/#ebookDonateForm) و در توسعه آیریس سهیم شوید.
## 🙌 مشارکت
از دیدن مشارکت شما در Iris Web Framework خوشحال میشویم! برای اطلاعات بیشتر درباره نحوه مشارکت در پروژه آیریس، فایل [CONTRIBUTING.md](CONTRIBUTING.md) را ببینید.
[فهرست همه مشارکتکنندگان](https://github.com/kataras/iris/graphs/contributors)
## 🛡 آسیبپذیریهای امنیتی
اگر آسیبپذیری امنیتی در آیریس پیدا کردید، لطفاً به [iris-go@outlook.com](mailto:iris-go@outlook.com) ایمیل بزنید. همه آسیبپذیریهای امنیتی بهسرعت رسیدگی میشوند.
## 📝 پروانه
این پروژه، مانند خود پروژه Go، تحت [پروانه BSD سهبندی](LICENSE) منتشر شده است.
نام «Iris» از اساطیر یونان الهام گرفته شده است.