أعزائي أعضاء مجتمع Iris، قد تكون قد لاحظتم مؤخرًا تراجعًا في مستوى النشاط على مستودع Iris، ولكن هذا الهدوء له غاية مقصودة. طوال هذه الفترة كنت أعمل على الإصدار الرئيسي الجديد، **Iris v14**، الذي يعتمد بشكل كامل على **الأنواع العامة (Generics)**، إلى جانب مجموعة من **الميزات الجديدة** و**التحسينات** والابتكارات. هذا التطوير يستند إلى خبرتي الممتدة على مدى سنوات في لغة Go، لضمان أن يستمر تطور Iris بما يتماشى مع احتياجاتكم المتنامية. مع أطيب التحيات،
Gerasimos (Makis) Maropoulos

الأخبار

> 🚀 **Iris v14 في الطريق.** الإصدار الرئيسي القادم هو الأكبر في تاريخ المشروع: إطار عمل أُعيد بناؤه على الأنواع العامة في Go، وباني تطبيقات يتحقق منه المُصرِّف، ودوال مساعدة للطلبات تتولى التحقق نيابةً عنك، وخريطة أخطاء مركزية واحدة، وثلاثون برمجية وسيطة مدمجة، وكتاب يُنشر داخل المستودع نفسه. اطّلع أدناه على [ما الذي يأتي في Iris v14](#-ما-الذي-يأتي-في-iris-v14). > > النسخة الموصوفة هنا، **v12**، ما زالت تعمل وما زالت تتلقى الإصلاحات. سيصدر v14 على مسار استيراد جديد، لذلك لن يتعطل شيء لديك يوم صدوره.

Iris Web Framework إطار العمل إريس English

[![build status](https://img.shields.io/github/actions/workflow/status/kataras/iris/ci.yml?branch=main&style=for-the-badge)](https://github.com/kataras/iris/actions/workflows/ci.yml) [![view examples](https://img.shields.io/badge/examples%20-285-a83adf.svg?style=for-the-badge&logo=go)](https://github.com/kataras/iris/tree/main/_examples) [![chat](https://img.shields.io/gitter/room/iris_go/community.svg?color=cc2b5e&logo=gitter&style=for-the-badge)](https://gitter.im/iris_go/community) [![donate](https://img.shields.io/badge/support-Iris-blue.svg?style=for-the-badge&logo=paypal)](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/static/images/reviews.gif)](https://iris-go.com/testimonials/) [![Benchmarks: Jul 18, 2020 at 10:46am (UTC)](https://iris-go.com/static/images/benchmarks.svg)](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 Versioning) * نموذج-عرض-تحكم (Model-View-Controller) * دعم كامل لبروتوكول WebSockets * دعم gRPC * دعم تلقائي لـ HTTPS * دعم مدمج لـ ngrok لعرض تطبيقك على الإنترنت بأسرع طريقة * موجّه (Router) فريد يدعم المسارات الديناميكية مع أنواع قياسية مثل ‎:uuid‎ و‎:string‎ و‎:int‎، وإمكانية إنشاء أنواعك الخاصة * ضغط البيانات * محركات العرض: HTML، Django، Handlebars، Pug/Jade وغيرها * إنشاء خادم ملفات خاص بك واستضافة خادم WebDAV * التخزين المؤقت * التوطين (i18n، sitemap) * الجلسات * استجابات غنية تشمل: HTML، نص، Markdown، XML، YAML، ثنائي، JSON، JSONP، Protocol Buffers، MessagePack، Content Negotiation، البث المتدفق، والأحداث المرسلة من الخادم والمزيد * ضغط الاستجابات (gzip، deflate، brotli، snappy، s2) * طلبات غنية تدعم: ربط استعلامات URL، الرؤوس، النماذج، النصوص، XML، YAML، ثنائي، JSON، التحقق، Protocol Buffers، MessagePack والمزيد * الحقن التلقائي للاعتماديات: لمعماريات MVC، المعالجات، وموجّهات واجهات برمجة التطبيقات * مجموعة اختبارات * والأهم... تحصل على إجابات سريعة ودعم، منذ اليوم الأول وحتى الآن ## 🚀 ما الذي يأتي في Iris v14 Iris v14 هو الإصدار الأكبر في تاريخ المشروع. يعيد بناء الإطار على الأنواع العامة في Go، ويغيّر طريقة تجميع التطبيق: توصيلات أقل داخل `main`، ومعالجات أقصر، ومكان واحد للقرارات التي كانت موزّعة سابقًا على كل مسار. لا شيء من هذا يتطلب انتباهك اليوم. v12 ما زال يعمل، وما زال يتلقى الإصلاحات، وسيأتي v14 مع دليل ترحيل يغطي كل واجهة برمجية جرى تغيير اسمها أو حذفها. ### التطبيق بأكمله في سلسلة واحدة يتحقق منها المُصرِّف يقوم `iris.NewBuilder` بربط CORS، والضغط، وسجل الوصول، ونقطة فحص السلامة، وخريطة الأخطاء، وخدماتك ومجموعات واجهاتك البرمجية في تعبير واحد. المُصرِّف هو من يفرض ترتيب الخطوات، لذا فإن التطبيق إما يُبنى بشكل صحيح أو لا يُبنى إطلاقًا.
```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` بقية الأشكال التي ترجعها واجهة برمجية. ### الأخطاء تُعلَن مرة واحدة تحتفظ الحزمة الجديدة `rest/errors` بالربط بين أخطاء مجالك واستجابات HTTP. يحصل العملاء على حمولات قياسية قابلة للقراءة آليًا. وتبقى الرسائل الداخلية داخلية. سجّل مُجمِّعًا (collector) وسيصل كل إخفاق إلى سجلّك أو قاعدة بياناتك من مكان واحد. ويمكن عرض الخطأ بصيغة JSON أو كواجهة عرض، حسب ما طلبه العميل. ### حقن الاعتماديات في كل مكان، لا في MVC فقط تعلن الدوال البانية عمّا تحتاجه ويوفّره الحاوي: للمعالجات، ولمجموعات واجهات برمجة التطبيقات، وللمتحكمات. والخدمة التي تنفّذ `Init(ctx context.Context) error` تعمل مرة واحدة داخل `Build()`. وكل ما يمكن إغلاقه يُغلق عند إيقاف التشغيل. أما الحزمة `hero` فقد اختفت، واستُبدلت بـ `dep` و`rest` اللتين تنجزان أكثر بأسطر أقل. ومتحكمات MVC مبنية على الأنواع العامة. ### الحزم في المكان الذي تتوقعه أصبحت `sessions` و`cache` و`websocket` و`i18n` و`view` و`versioning` برمجيات وسيطة. وانتقلت `mvc` إلى داخل `controller`، إلى جانب المتحكمات الجديدة `fileserver` و`sitemap` و`apigraph`. ويرسم `apigraph` شجرة مساراتك على هيئة رسم بياني تفاعلي بـ D3. وتأتي ثلاثون برمجية وسيطة جاهزة، من بينها الجديد: `httpcost` (الزمن والذاكرة والمعالج لكل طلب، لتحليل الأداء أو للفوترة)، و`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 مختبَرة في مستند واحد، ودليل ترحيل لتطبيقات v12، وويكي حيّ يعمل بالذكاء الاصطناعي مُولَّد من الشيفرة المصدرية يجيب عن أسئلتك حول قاعدة الشيفرة. ### ماذا يعني هذا لشيفرتك على v12 يصبح مسار الاستيراد `github.com/kataras/iris/v14`، لذا يمكن لـ v12 و v14 التعايش جنبًا إلى جنب دون أن يتعطل شيء يوم الإصدار. رقِّ متى ما ناسبك. ويغطي دليل الترحيل مسار الاستيراد، وانتقال الحزم، وكل واجهة برمجية محذوفة وبديلها، والتغيّرات في السلوك، مع أوامر جاهزة للأجزاء الميكانيكية. لا يوجد تاريخ إصدار معلن حتى الآن. تابع [الإصدارات](https://github.com/kataras/iris/releases) أو [@iris_framework](https://twitter.com/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](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/images/gifs/install-create-iris.gif)
يحتوي 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) مساعد برمجة يعمل بالذكاء الاصطناعي ومتعدد المنصّات من Hellenic Development، ويأتي مع **مهارة (skill) مخصصة لـ Iris**: دليل تطوير لـ v14 كتبه مؤلف الإطار نفسه، ويضم تسعة عشر مستند مرجع تغطي التوجيه والماكروات، وواجهة السياق (context API)، ودوال `rest` المساعدة، ومعالجة الأخطاء، والبرمجيات الوسيطة الثلاثين كلها، والمتحكمات المدمجة، وحزمة تطوير المصادقة، وتقوية الأمان، وتخزين البيانات، والتخزين المؤقت، والتوطين، وقابلية الملاحظة، والأداء، والاختبار، والنشر، والترحيل من v12 إلى v14. ثبّت شخصية **Software Developer** فتأتي معها مهارة Iris، إلى جانب وكلاء الهندسة الذين تفعّلهم. عندها يكتب مساعدك شيفرة Iris بالطريقة التي صُمم الإطار ليُستخدم بها، بدلًا من التخمين اعتمادًا على ما صادفه أثناء التدريب. ### هل تحب القراءة أثناء السفر؟
Book cover [![follow author on twitter](https://img.shields.io/twitter/follow/makismaropoulos?color=3D8AA3&logoColor=3D8AA3&style=for-the-badge&logo=twitter)](https://twitter.com/intent/follow?screen_name=makismaropoulos) [![follow Iris web framework on twitter](https://img.shields.io/twitter/follow/iris_framework?color=ee7506&logoColor=ee7506&style=for-the-badge&logo=twitter)](https://twitter.com/intent/follow?screen_name=iris_framework) [![follow Iris web framework on facebook](https://img.shields.io/badge/Follow%20%40Iris.framework-569-2D88FF.svg?style=for-the-badge&logo=facebook)](https://www.facebook.com/iris.framework)
يمكنك [طلب](https://www.iris-go.com/#ebookDonateForm) نسخة PDF والوصول عبر الإنترنت إلى **الكتاب الإلكتروني لـ 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 بثلاثة بنود](LICENSE)، تمامًا كحال مشروع Go نفسه. اسم المشروع "Iris" مستوحى من الأساطير اليونانية.