From 5082f0ac7f0253f6838325198ec59aec1ac00089 Mon Sep 17 00:00:00 2001 From: "Gerasimos (Makis) Maropoulos" Date: Mon, 27 Jul 2026 11:40:16 +0300 Subject: [PATCH] Hints of what v14 will bring. Introduce Plexon AI x Iris. Update deps. --- .github/workflows/ci.yml | 2 +- README.md | 111 ++- README_AR.md | 217 +++-- README_ES.md | 627 +++++++++++++- README_FA.md | 762 ++++++++++++++---- README_FR.md | 626 +++++++++++++- README_GR.md | 631 ++++++++++++++- README_JA.md | 732 ++++++++++++----- README_KO.md | 627 +++++++++++++- README_PT_BR.md | 725 ++++++++++++----- README_RU.md | 630 ++++++++++++++- README_VN.md | 724 ++++++++++++----- README_ZH.md | 14 +- README_ZH_HANS.md | 705 ++++++++++++---- README_ZH_HANT.md | 730 ++++++++++++----- _examples/auth/basicauth/database/go.mod | 2 +- _examples/auth/jwt/tutorial/go.mod | 2 +- _examples/bootstrapper/go.mod | 2 +- .../configuration/multi-environments/go.mod | 2 +- _examples/configuration/viper/go.mod | 2 +- _examples/database/mongodb/go.mod | 2 +- _examples/database/mysql/go.mod | 2 +- _examples/database/orm/reform/go.mod | 2 +- .../dependency-injection/jwt/contrib/go.mod | 2 +- _examples/desktop/webview/go.mod | 2 +- _examples/graphql/schema-first/go.mod | 2 +- _examples/http-server/h2c/go.mod | 2 +- _examples/http-server/http3-quic/go.mod | 2 +- _examples/kafka-api/go.mod | 2 +- .../request-logger/accesslog-slack/go.mod | 2 +- _examples/logging/rollbar/go.mod | 2 +- _examples/monitor/statsviz/go.mod | 2 +- .../go.mod | 2 +- _examples/mvc/overview/go.mod | 2 +- _examples/mvc/vuejs-todo-mvc/src/go.mod | 2 +- _examples/project/go.mod | 2 +- .../response-writer/json-third-party/go.mod | 2 +- _examples/response-writer/protobuf/go.mod | 2 +- _examples/routing/party-controller/go.mod | 2 +- .../redirect/multi-instances/go.mod | 2 +- _examples/sessions/database/redis/go.mod | 2 +- _examples/testing/ginkgotest/go.mod | 2 +- _examples/view/templ/go.mod | 2 +- _examples/websocket/basic/go.mod | 2 +- _examples/websocket/gorilla-filewatch/go.mod | 2 +- _examples/websocket/socketio/go.mod | 2 +- go.mod | 50 +- go.sum | 115 +-- 48 files changed, 6639 insertions(+), 1451 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 32cfde2d..b02b5d41 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,7 +17,7 @@ jobs: strategy: matrix: - go_version: [1.25.x] + go_version: [1.26.x] steps: - name: Check out code into the Go module directory diff --git a/README.md b/README.md index 4cff2f1d..56aa444d 100644 --- a/README.md +++ b/README.md @@ -1,18 +1,18 @@ - - -# Iris Web Framework +# Iris Web Framework العربية [![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 is a fast, simple yet fully featured and very efficient web framework for Go - the perfect gift for developers this holiday season! +⚡ Iris is a fast, simple yet fully featured and very efficient web framework for Go. -✨ It provides a beautifully expressive and easy to use foundation for your next website or API, wrapped with care and decorated with powerful features. +✨ It provides a beautifully expressive and easy to use foundation for your next website or API. -🌟 Learn what [others saying about Iris](https://www.iris-go.com/#review) and **[star](https://github.com/kataras/iris/stargazers)** this open-source project +🌟 Learn what [others say about Iris](https://www.iris-go.com/#review) and **[star](https://github.com/kataras/iris/stargazers)** this open-source project [![](https://iris-go.com/static/images/reviews.gif)](https://iris-go.com/testimonials/) @@ -28,7 +28,7 @@ func main() { app.Use(iris.Compression) app.Get("/", func(ctx iris.Context) { - ctx.HTML("Happy New Year %s! 🎅", "World") + ctx.HTML("Hello %s!", "World") }) app.Listen(":8080") @@ -201,7 +201,90 @@ Some of the features Iris offers: * Rich Requests (Bind URL Query, Headers, Form, Text, XML, YAML, Binary, JSON, Validation, Protocol Buffers, MessagePack and more) * Dependency Injection (MVC, Handlers, API Routers) * Testing Suite -* And the most important... you get fast answers and support from the 1st day until now - that's six full years! +* And the most important... you get fast answers and support, from the first day until now + +## 🚀 What is coming in Iris v14 + +Iris v14 is the largest release in the project's history. It rebuilds the framework on Go generics and changes how an application is put together: less wiring in `main`, shorter handlers, and one place for the decisions that used to be scattered across every route. + +None of it needs your attention today. v12 keeps working, keeps getting fixes, and v14 arrives with a migration guide that covers every renamed and removed API. + +### The whole application in one compile-checked chain + +`iris.NewBuilder` wires CORS, compression, access logging, the health endpoint, the error map, your services and your API groups in a single expression. The compiler enforces the step order, so an application either builds correctly or does not build at all. + +```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") +``` + +### Handlers stop repeating themselves + +Decoding, validation and error rendering move out of the handler body. `rest.ReadJSON[T]` decodes the request, runs the type's `Validate() error` when it has one, and writes the 400 itself. The response helpers write the success status, or whatever your central map says that error should return. + +```go +func (api *ProductsAPI) create(ctx iris.Context) { + input, ok := rest.ReadJSON[catalog.ProductInput](ctx) + if !ok { + return // 400 already written: malformed JSON or failed Validate. + } + + id, err := api.svc.Create(ctx, input) + rest.Created(ctx, id, err) // 201, or the centrally mapped error. +} +``` + +`rest.OK`, `rest.NoContent`, `rest.Count` and `rest.Paginated` cover the rest of the shapes an API returns. + +### Errors are declared once + +The new `rest/errors` package holds the mapping from your domain errors to HTTP responses. Clients get canonical, machine-readable payloads. Internal messages stay internal. Register a collector and every failure reaches your logger or your database from a single place. An error can render as JSON or as a view, depending on what the client asked for. + +### Dependency injection everywhere, not only in MVC + +Constructors declare what they need and the container provides it: for handlers, for API groups, for controllers. A service that implements `Init(ctx context.Context) error` runs once inside `Build()`. Anything closeable is closed at shutdown. The `hero` package is gone, replaced by `dep` and `rest`, which do more in fewer lines. MVC controllers are built on generics. + +### The packages are where you would expect them + +`sessions`, `cache`, `websocket`, `i18n`, `view` and `versioning` became middleware. `mvc` moved under `controller`, next to the new `fileserver`, `sitemap` and `apigraph` controllers. `apigraph` renders your route tree as an interactive D3 graph. + +Thirty middleware ship in the box, including new ones: `httpcost` (time, memory and CPU per request, for performance work or billing), `bodylimit`, `compress`, `counter`, `referrer`, `geolocation`, `ipaccess` and `servertiming`. View engine implementations moved to [iris-contrib/views](https://github.com/iris-contrib/views). + +### Configuration is a partial literal + +`iris.Configuration` and the `With*` configurators are replaced by `iris.Options`. Set the fields you care about and the rest come from the defaults. `Bind` loads YAML from the `SERVER_CONFIG` environment variable, then from a file. + +```go +app := iris.New(iris.Options{Name: "myapp", LogLevel: "debug"}) +``` + +### Names that say what they do + +Reading a request header and setting a response header no longer share a prefix that quietly flips meaning: `ctx.Header` reads the request, `ctx.SetHeader` and `ctx.ResponseHeader` work on the response. `Party` is now `Router`. `ctx.URLParam` is now `ctx.Query().Get`. Every rename is listed in the migration guide with its replacement, and most are one search and replace. + +### Secure by default + +Session cookies ship with `Secure` and `SameSite=Lax`. The request body limit is enforced on every read path. Long-standing bugs went down with the rebuild, among them a rate limiter that recorded limits without ever enforcing them and a `Logout` call that could take the process with it. + +### Documentation you can read start to finish + +v14 comes with a book of 23 chapters inside the repository, a getting started tutorial that builds a tested REST API in one document, a migration guide for v12 applications, and a live AI wiki generated from the source that answers questions about the codebase. + +### What it means for your v12 code + +The import path becomes `github.com/kataras/iris/v14`, so v12 and v14 can sit side by side and nothing breaks on release day. Upgrade when it suits you. The migration guide covers the import path, the package moves, every removed API and its replacement, and the behavior changes, with ready commands for the mechanical parts. + +There is no public release date yet. Watch [releases](https://github.com/kataras/iris/releases) or follow [@iris_framework](https://twitter.com/iris_framework) to hear about it first. ## 👑 Supporters @@ -655,6 +738,12 @@ Iris contains extensive and thorough **[documentation](https://www.iris-go.com/d For a more detailed technical documentation you can head over to our [godocs](https://pkg.go.dev/github.com/kataras/iris/v12@v12.2.11). And for executable code you can always visit the [./_examples](_examples) repository's subdirectory. +### Develop with Plexon AI + +[Plexon AI](https://plexon.ai) is a cross-platform AI coding assistant from Hellenic Development, and it ships with a dedicated **Iris skill**: a v14 development guide written by the framework's author, with nineteen reference documents covering routing and macros, the context API, the `rest` helpers, error handling, all thirty middleware, the built-in controllers, the authentication SDK, security hardening, persistence, caching, i18n, observability, performance, testing, deployment, and the v12 to v14 migration. + +Install the **Software Developer** persona and the Iris skill comes with it, alongside the engineering agents it activates. Your assistant then writes Iris code the way the framework is meant to be used, instead of guessing from whatever it picked up in training. + ### Do you like to read while traveling? Book cover @@ -665,7 +754,7 @@ For a more detailed technical documentation you can head over to our [godocs](ht [![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) -You can [request](https://www.iris-go.com/#ebookDonateForm) a PDF and online access of the **Iris E-Book** (New Edition, **future v12.2.0+**) today and be participated in the development of Iris. +You can [request](https://www.iris-go.com/#ebookDonateForm) a PDF and online access of the **Iris E-Book** (New Edition) today and take part in the development of Iris. ## 🙌 Contributing diff --git a/README_AR.md b/README_AR.md index e8ed4a24..3151e86f 100644 --- a/README_AR.md +++ b/README_AR.md @@ -1,22 +1,31 @@ -أعزائي أعضاء مجتمع Iris, +
-قد تكون قد لاحظت تراجعًا مؤخرًا في مستوى النشاط على مستودع Iris، ولكن هذا الهدوء له غاية مقصودة. خلال **الأشهر الثمانية إلى التسعة الماضية،** كنت أعمل بجد على الإعداد للإصدار الرئيسي الجديد من Iris، والذي يعتمد بشكل كامل على **الأنواع العامة (Generics)**، إلى جانب تقديم مجموعة من **الميزات الجديدة،** و **التحسينات**، والابتكارات. هذا التطوير يستند إلى خبرتي الممتدة على مدى **ثماني سنوات** في لغة Go، لضمان أن يستمر تطور Iris بما يتماشى مع احتياجاتكم المتنامية. +أعزائي أعضاء مجتمع Iris، -مع أطيب التحيات,
+قد تكون قد لاحظتم مؤخرًا تراجعًا في مستوى النشاط على مستودع Iris، ولكن هذا الهدوء له غاية مقصودة. طوال هذه الفترة كنت أعمل على الإصدار الرئيسي الجديد، **Iris v14**، الذي يعتمد بشكل كامل على **الأنواع العامة (Generics)**، إلى جانب مجموعة من **الميزات الجديدة** و**التحسينات** والابتكارات. هذا التطوير يستند إلى خبرتي الممتدة على مدى سنوات في لغة Go، لضمان أن يستمر تطور Iris بما يتماشى مع احتياجاتكم المتنامية. + +مع أطيب التحيات،
Gerasimos (Makis) Maropoulos -
-

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

+

الأخبار

+ +> 🚀 **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. +[![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) -يوفّر أساسًا مرنًا، سهل الاستخدام، وذا تعبيرية رائعة لبناء موقعك الإلكتروني أو واجهة برمجة التطبيقات (API) القادمة. +
-**تعرف** على [آراء اللآخرين حول Iris](https://www.iris-go.com/#review) و **[امنح المشروع نجمة](https://github.com/kataras/iris/stargazers)** لدعم إمكاناته كمشروع مفتوح المصدر. +⚡ Iris هو إطار عمل ويب سريع، بسيط، ومع ذلك غني بالميزات وفعّال للغاية بلغة Go. + +✨ يوفّر أساسًا مرنًا، سهل الاستخدام، وذا تعبيرية رائعة لبناء موقعك الإلكتروني أو واجهة برمجة التطبيقات (API) القادمة. + +🌟 تعرّف على [آراء الآخرين حول Iris](https://www.iris-go.com/#review) و**[امنح المشروع نجمة](https://github.com/kataras/iris/stargazers)** لدعم هذا المشروع مفتوح المصدر.
@@ -41,36 +50,135 @@ func main() { } ``` +
+ كما قال أحد [مطوري 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)

-*

طلبات غنية (Rich Requests) تدعم: ربط استعلامات URL، الرؤوس، النماذج، النصوص، XML، YAML، ثنائي، JSON، التحقق، Protocol Buffers، MessagePack والمزيد

-*

الحقن التلقائي: لمعماريات MVC، المعالجات، وواجهات برمجة التطبيقات

-*

مجموعة اختبارات

-*

والأهم... تحصل على دعم سريع وإجابات فورية منذ اليوم الأول وحتى الآن، على مدار ست سنوات متواصلة!

+* دعم كامل لبروتوكول 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 @@ -478,32 +586,34 @@ func main() { yangxianglong

-##

تعلّم Iris

+
-###

التثبيت

+## 📖 تعلّم Iris + +### التثبيت المتطلب الوحيد هو [لغة البرمجة Go](https://go.dev/dl/). -####

إنشاء مشروع جديد

+#### إنشاء مشروع جديد + +
```sh $ mkdir myapp $ cd myapp $ go mod init myapp -$ go get github.com/kataras/iris/v12@latest # or @v12.2.11 +$ 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" for windows. +$ go mod tidy -compat=1.23 # -compat="1.23" على ويندوز. $ go run . ``` @@ -511,11 +621,21 @@ $ 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). +للاطلاع على توثيق تقني أكثر تفصيلًا، يمكنك زيارة [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 @@ -525,21 +645,24 @@ $ go run . [![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 (الإصدار الجديد **v12.2.0+**) اليوم والمساهمة في تطوير الإطار. +يمكنك [طلب](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 نفسه. +هذا المشروع مرخّص بموجب رخصة [BSD بثلاثة بنود](LICENSE)، تمامًا كحال مشروع Go نفسه. اسم المشروع "Iris" مستوحى من الأساطير اليونانية. + +
diff --git a/README_ES.md b/README_ES.md index bbf64800..681552f1 100644 --- a/README_ES.md +++ b/README_ES.md @@ -1,24 +1,22 @@ -# Iris Web Framework +

Novedades

-[![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) [![FOSSA Status](https://img.shields.io/badge/LICENSE%20SCAN-PASSING❤️-CD2956?style=for-the-badge&logo=fossa)](https://app.fossa.io/projects/git%2Bgithub.com%2Fkataras%2Firis?ref=badge_shield) [![view examples](https://img.shields.io/badge/learn%20by-examples-0C8EC5.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=7E18DD&logo=gitter&style=for-the-badge)](https://gitter.im/iris_go/community) +> 🚀 **Iris v14 está en camino.** La próxima versión mayor es la más grande en la historia del proyecto: el framework reconstruido sobre los genéricos de Go, un constructor de aplicaciones que verifica el compilador, ayudantes de petición que validan por usted, un mapa central de errores, treinta middleware incluidos y un libro dentro del propio repositorio. Vea [qué viene en Iris v14](#-qué-viene-en-iris-v14) más abajo. +> +> La versión que se describe aquí, **v12**, sigue funcionando y sigue recibiendo correcciones. v14 llega en una nueva ruta de importación, así que nada suyo se rompe el día en que salga. -Iris es un framework web rápido, simple pero con muchas funcionalidades y muy eficiente para Go. Proporciona una base bellamente expresiva y fácil de usar para su próximo sitio web o API. +# Iris Web Framework English العربية -Descubra lo que [otros dicen sobre Iris](https://iris-go.com/testimonials/) y **siga** :star: este repositorio github. +[![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) -[![](https://media.giphy.com/media/j5WLmtvwn98VPrm7li/giphy.gif)](https://iris-go.com/testimonials/) +⚡ Iris es un framework web rápido, simple pero con todas las funcionalidades y muy eficiente para Go. -[![Benchmarks: Apr 2, 2020 at 12:13pm (UTC)](https://iris-go.com/static/images/benchmarks.svg)](https://github.com/kataras/server-benchmarks) +✨ Proporciona una base bellamente expresiva y fácil de usar para su próximo sitio web o API. -## Aprende Iris +🌟 Descubra lo que [otros dicen sobre Iris](https://www.iris-go.com/#review) y dele una **[estrella](https://github.com/kataras/iris/stargazers)** a este proyecto de código abierto -
-Inicio rapido +[![](https://iris-go.com/static/images/reviews.gif)](https://iris-go.com/testimonials/) -```sh -# agrega el siguiente código en el archivo ejemplo.go -$ cat ejemplo.go -``` +[![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 @@ -26,51 +24,604 @@ package main import "github.com/kataras/iris/v12" func main() { - app := iris.Default() - app.Get("/ping", func(ctx iris.Context) { - ctx.JSON(iris.Map{ - "message": "pong", - }) - }) + app := iris.New() + app.Use(iris.Compression) - app.Listen(":8080") + app.Get("/", func(ctx iris.Context) { + ctx.HTML("Hello %s!", "World") + }) + + app.Listen(":8080") } ``` -```sh -# ejecuta ejemplo.go y -# visita http://localhost:8080/ping en el navegador -$ go run ejemplo.go +Como dijo una vez un [desarrollador de Go](https://twitter.com/dkuye/status/1532087942696554497), **Iris te cubre por todos lados y sigue firme con los años** ⭐ + +Algunas de las funcionalidades que ofrece Iris: + +* HTTP/2 (Push, incluso datos embebidos) +* Middleware (Accesslog, Basicauth, CORS, gRPC, Anti-Bot hCaptcha, JWT, MethodOverride, ModRevision, Monitor, PPROF, Ratelimit, Anti-Bot reCaptcha, Recovery, RequestID, Rewrite) +* Versionado de API +* Model-View-Controller +* Websockets +* gRPC +* Auto-HTTPS +* Soporte integrado para ngrok, la forma más rápida de poner su aplicación en internet +* Router único con rutas dinámicas como parámetros, con tipos estándar como :uuid, :string, :int... y la posibilidad de crear los suyos +* Compresión +* Motores de vistas (HTML, Django, Handlebars, Pug/Jade y más) +* Cree su propio servidor de archivos y aloje su propio servidor WebDAV +* Caché +* Localización (i18n, sitemap) +* Sesiones +* Respuestas ricas (HTML, Text, Markdown, XML, YAML, Binary, JSON, JSONP, Protocol Buffers, MessagePack, Content Negotiation, Streaming, Server-Sent Events y más) +* Compresión de respuestas (gzip, deflate, brotli, snappy, s2) +* Peticiones ricas (Bind URL Query, Headers, Form, Text, XML, YAML, Binary, JSON, Validation, Protocol Buffers, MessagePack y más) +* Inyección de dependencias (MVC, Handlers, API Routers) +* Suite de pruebas +* Y lo más importante... obtiene respuestas rápidas y soporte, desde el primer día hasta hoy + +## 🚀 Qué viene en Iris v14 + +Iris v14 es la versión más grande en la historia del proyecto. Reconstruye el framework sobre los genéricos de Go y cambia cómo se arma una aplicación: menos cableado en `main`, handlers más cortos y un único lugar para las decisiones que antes estaban repartidas por cada ruta. + +Nada de esto necesita su atención hoy. v12 sigue funcionando, sigue recibiendo correcciones, y v14 llega con una guía de migración que cubre cada API renombrada o eliminada. + +### Toda la aplicación en una cadena que verifica el compilador + +`iris.NewBuilder` conecta CORS, compresión, registro de accesos, el endpoint de salud, el mapa de errores, sus servicios y sus grupos de API en una sola expresión. El compilador impone el orden de los pasos, así que una aplicación se construye correctamente o no se construye en absoluto. + +```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") ``` -> El enrutamiento es impulsado por [muxie](https://github.com/kataras/muxie), el software basado en trie más potente y rápido escrito en Go. +### Los handlers dejan de repetirse + +La decodificación, la validación y el renderizado de errores salen del cuerpo del handler. `rest.ReadJSON[T]` decodifica la petición, ejecuta el método `Validate() error` de su tipo cuando existe, y escribe el 400 por sí mismo. Los ayudantes de respuesta escriben el estado de éxito, o lo que su mapa central diga que debe devolver ese error. + +```go +func (api *ProductsAPI) create(ctx iris.Context) { + input, ok := rest.ReadJSON[catalog.ProductInput](ctx) + if !ok { + return // 400 ya escrito: JSON mal formado o Validate fallido. + } + + id, err := api.svc.Create(ctx, input) + rest.Created(ctx, id, err) // 201, o el error mapeado centralmente. +} +``` + +`rest.OK`, `rest.NoContent`, `rest.Count` y `rest.Paginated` cubren el resto de formas que devuelve una API. + +### Los errores se declaran una sola vez + +El nuevo paquete `rest/errors` guarda la correspondencia entre los errores de su dominio y las respuestas HTTP. Los clientes reciben cargas canónicas y legibles por máquina. Los mensajes internos se quedan dentro. Registre un colector y cada fallo llega a su logger o a su base de datos desde un único lugar. Un error puede renderizarse como JSON o como vista, según lo que haya pedido el cliente. + +### Inyección de dependencias en todas partes, no solo en MVC + +Los constructores declaran lo que necesitan y el contenedor se lo proporciona: para handlers, para grupos de API, para controladores. Un servicio que implementa `Init(ctx context.Context) error` se ejecuta una vez dentro de `Build()`. Todo lo que se pueda cerrar se cierra al apagar. El paquete `hero` desaparece, reemplazado por `dep` y `rest`, que hacen más en menos líneas. Los controladores MVC están construidos sobre genéricos. + +### Los paquetes están donde uno espera + +`sessions`, `cache`, `websocket`, `i18n`, `view` y `versioning` pasaron a ser middleware. `mvc` se movió bajo `controller`, junto a los nuevos controladores `fileserver`, `sitemap` y `apigraph`. `apigraph` dibuja su árbol de rutas como un grafo D3 interactivo. + +Vienen treinta middleware incluidos, entre ellos varios nuevos: `httpcost` (tiempo, memoria y CPU por petición, para trabajo de rendimiento o facturación), `bodylimit`, `compress`, `counter`, `referrer`, `geolocation`, `ipaccess` y `servertiming`. Las implementaciones de motores de vistas se movieron a [iris-contrib/views](https://github.com/iris-contrib/views). + +### La configuración es un literal parcial + +`iris.Configuration` y los configuradores `With*` se reemplazan por `iris.Options`. Establezca los campos que le importan y el resto viene de los valores por defecto. `Bind` carga YAML desde la variable de entorno `SERVER_CONFIG` y luego desde un archivo. + +```go +app := iris.New(iris.Options{Name: "myapp", LogLevel: "debug"}) +``` + +### Nombres que dicen lo que hacen + +Leer una cabecera de petición y establecer una de respuesta ya no comparten un prefijo que cambia de sentido en silencio: `ctx.Header` lee la petición, mientras que `ctx.SetHeader` y `ctx.ResponseHeader` trabajan sobre la respuesta. `Party` ahora es `Router`. `ctx.URLParam` ahora es `ctx.Query().Get`. Cada renombrado está listado en la guía de migración junto a su reemplazo, y la mayoría son una búsqueda y sustitución. + +### Seguro por defecto + +Las cookies de sesión vienen con `Secure` y `SameSite=Lax`. El límite del cuerpo de la petición se aplica en todos los caminos de lectura. Con la reconstrucción cayeron errores de años, entre ellos un limitador de tasa que registraba los límites sin aplicarlos nunca y una llamada a `Logout` que podía llevarse el proceso por delante. + +### Documentación que se lee de principio a fin + +v14 viene con un libro de 23 capítulos dentro del repositorio, un tutorial de primeros pasos que construye una API REST con pruebas en un solo documento, una guía de migración para aplicaciones v12, y un wiki de IA en vivo generado desde el código fuente que responde preguntas sobre la base de código. + +### Qué significa para su código v12 + +La ruta de importación pasa a ser `github.com/kataras/iris/v14`, así que v12 y v14 pueden convivir y nada se rompe el día del lanzamiento. Actualice cuando le venga bien. La guía de migración cubre la ruta de importación, los movimientos de paquetes, cada API eliminada y su reemplazo, y los cambios de comportamiento, con comandos listos para las partes mecánicas. + +Todavía no hay fecha pública de lanzamiento. Siga los [releases](https://github.com/kataras/iris/releases) o a [@iris_framework](https://twitter.com/iris_framework) para enterarse antes que nadie. + +## 👑 Patrocinadores + +¡Con su ayuda podemos mejorar el desarrollo web de código abierto para todos! + +

+ 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 +

+ +## 📖 Aprendiendo Iris + +### Instalación + +El único requisito es el [lenguaje de programación Go](https://go.dev/dl/). + +#### Crear un proyecto nuevo + +```sh +$ mkdir myapp +$ cd myapp +$ go mod init myapp +$ go get github.com/kataras/iris/v12@latest # o @v12.2.11 +``` + +
Instalar en un proyecto existente + +```sh +$ cd myapp +$ go get github.com/kataras/iris/v12@latest +``` + +**Ejecutar** + +```sh +$ go mod tidy -compat=1.23 # -compat="1.23" en windows. +$ go run . +```
-Iris contiene un extenso y completo **[wiki](https://www.iris-go.com/#ebookDonateForm)** que facilita comenzar con el framework. +![](https://www.iris-go.com/images/gifs/install-create-iris.gif) -Para obtener una documentación técnica más detallada, puede dirigirse a nuestros [godocs](https://pkg.go.dev/github.com/kataras/iris/v12@v12.2.11). Y para código ejecutable siempre puede visitar el subdirectorio del repositorio [\_examples](_examples/). +Iris cuenta con una **[documentación](https://www.iris-go.com/docs)** amplia y detallada que facilita empezar con el framework. -### ¿Te gusta leer mientras viajas? +Para documentación técnica más detallada puede dirigirse a nuestros [godocs](https://pkg.go.dev/github.com/kataras/iris/v12@v12.2.11). Y para código ejecutable siempre puede visitar el subdirectorio [./_examples](_examples) del repositorio. - Book cover +### Desarrolle con Plexon AI -[![follow author](https://img.shields.io/twitter/follow/makismaropoulos.svg?style=for-the-badge)](https://twitter.com/intent/follow?screen_name=makismaropoulos) +[Plexon AI](https://plexon.ai) es un asistente de programación con IA multiplataforma de Hellenic Development, y viene con una **skill dedicada a Iris**: una guía de desarrollo para v14 escrita por el propio autor del framework, con diecinueve documentos de referencia que cubren enrutamiento y macros, la API de contexto, los ayudantes `rest`, el manejo de errores, los treinta middleware, los controladores integrados, el SDK de autenticación, el endurecimiento de la seguridad, la persistencia, la caché, i18n, observabilidad, rendimiento, pruebas, despliegue y la migración de v12 a v14. -Puedes [solicitar](https://www.iris-go.com/#ebookDonateForm) una versión en PDF y acceso en línea del **E-Book** hoy y participar en el desarrollo de Iris. +Instale la persona **Software Developer** y la skill de Iris viene con ella, junto a los agentes de ingeniería que activa. Su asistente escribe entonces código Iris como el framework está pensado para usarse, en lugar de adivinar a partir de lo que vio durante su entrenamiento. -## Contribuir +### ¿Le gusta leer mientras viaja? -¡Nos encantaría ver su contribución al Framework Web Iris! Para obtener más información sobre cómo contribuir al proyecto Iris, consulte el archivo [CONTRIBUTING.md](CONTRIBUTING). + Portada del libro + +[![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) + +Puede [solicitar](https://www.iris-go.com/#ebookDonateForm) hoy mismo el PDF y el acceso en línea al **E-Book de Iris** (Nueva Edición) y participar en el desarrollo de Iris. + +## 🙌 Contribuir + +¡Nos encantaría ver su contribución al Iris Web Framework! Para más información sobre cómo contribuir al proyecto Iris consulte el archivo [CONTRIBUTING.md](CONTRIBUTING.md). [Lista de todos los contribuyentes](https://github.com/kataras/iris/graphs/contributors) -## Vulnerabilidades de seguridad +## 🛡 Vulnerabilidades de seguridad -Si descubres una vulnerabilidad de seguridad dentro de Iris, envíe un correo electrónico a [iris-go@outlook.com](mailto:iris-go@outlook.com). Todas las vulnerabilidades de seguridad serán tratadas de inmediato. +Si descubre una vulnerabilidad de seguridad en Iris, envíe un correo a [iris-go@outlook.com](mailto:iris-go@outlook.com). Todas las vulnerabilidades de seguridad se atenderán con prontitud. -## Licencia +## 📝 Licencia + +Este proyecto está bajo la [licencia BSD de 3 cláusulas](LICENSE), igual que el propio proyecto Go. El nombre del proyecto "Iris" se inspiró en la mitología griega. - -El Web Framework Iris es un software gratuito y de código abierto con licencia bajo la [Licencia BSD 3 cláusulas](LICENSE). diff --git a/README_FA.md b/README_FA.md index 7042dfa8..a78e3905 100644 --- a/README_FA.md +++ b/README_FA.md @@ -1,203 +1,661 @@
-## خبرها - -> این شاخه تحت توسعه است. برای رفتن به شاخه نسخه بعدی [v12.2.0](HISTORY.md#Next) یا اگر به دنبال یک انتشار پایدار هستید, به جای آن به شاخه [v12.1.8 branch](https://github.com/kataras/iris/tree/v12.1.8) مراجعه کنید. - -> ![](https://iris-go.com/static/images/cli.png) همین امروز برنامه رسمی [Iris Command Line Interface](https://github.com/kataras/iris-cli) را امتحان کنید. +

خبرها

-> با توجه به بالا بودن حجم کار، ممکن است در پاسخ به [سوالات](https://github.com/kataras/iris/issues) شما تاخیری وجود داشته باشد. +> 🚀 **آیریس v14 در راه است.** نسخه اصلی بعدی بزرگ‌ترین انتشار تاریخ این پروژه است: چارچوبی که بر پایه جنریک‌های Go بازسازی شده، سازنده‌ای برای برنامه که کامپایلر آن را بررسی می‌کند، کمک‌کننده‌های درخواست که اعتبارسنجی را برایتان انجام می‌دهند، یک نقشه مرکزی خطاها، سی میان‌افزار داخلی و کتابی که همراه خود مخزن منتشر می‌شود. در ادامه [آنچه در Iris v14 خواهد آمد](#-آنچه-در-iris-v14-خواهد-آمد) را ببینید. +> +> نسخه‌ای که اینجا توضیح داده می‌شود، یعنی **v12**، همچنان کار می‌کند و همچنان اصلاحات دریافت می‌کند. v14 روی مسیر ایمپورت تازه‌ای می‌آید، بنابراین روزی که منتشر شود چیزی در سمت شما نمی‌شکند. -# Iris Web Framework - -[![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) [![FOSSA Status](https://img.shields.io/badge/LICENSE%20SCAN-PASSING❤️-CD2956?style=for-the-badge&logo=fossa)](https://app.fossa.io/projects/git%2Bgithub.com%2Fkataras%2Firis?ref=badge_shield) [![view examples](https://img.shields.io/badge/learn%20by-examples-0C8EC5.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=7E18DD&logo=gitter&style=for-the-badge)](https://gitter.im/iris_go/community) - -آیریس یک چارچوب وب پر سرعت ، ساده و در عین حال کاملاً برجسته و بسیار کارآمد برای Go است.
-
Simple Handler +# 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) + +
+ +⚡ آیریس یک چارچوب وب پرسرعت، ساده و در عین حال کاملاً برجسته و بسیار کارآمد برای Go است. + +✨ آیریس پایه‌ای زیبا، رسا و آسان برای وب‌سایت یا API بعدی شما فراهم می‌کند. + +🌟 ببینید [دیگران درباره آیریس چه می‌گویند](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" -type ( - request struct { - Firstname string `json:"firstname"` - Lastname string `json:"lastname"` - } - - response struct { - ID uint64 `json:"id"` - Message string `json:"message"` - } -) - func main() { app := iris.New() - app.Handle("PUT", "/users/{id:uint64}", updateUser) + app.Use(iris.Compression) + + app.Get("/", func(ctx iris.Context) { + ctx.HTML("Hello %s!", "World") + }) + app.Listen(":8080") } - -func updateUser(ctx iris.Context) { - id, _ := ctx.Params().GetUint64("id") - - var req request - if err := ctx.ReadJSON(&req); err != nil { - ctx.StopWithError(iris.StatusBadRequest, err) - return - } - - resp := response{ - ID: id, - Message: req.Firstname + " updated successfully", - } - ctx.JSON(resp) -} ``` -> !برای اطلاعات بیشتر ، [مثال های مسیریابی](https://github.com/kataras/iris/blob/main/_examples/routing) را بخوانید -
- -
Handler with custom input and output arguments - -[![https://github.com/kataras/iris/blob/main/_examples/dependency-injection/basic/main.go](https://user-images.githubusercontent.com/22900943/105253731-b8db6d00-5b88-11eb-90c1-0c92a5581c86.png)](https://twitter.com/iris_framework/status/1234783655408668672) - -> اگر برایتان جالب بود [مثال های دیگری](https://github.com/kataras/iris/blob/main/_examples/dependency-injection) را مطالعه کنید - -
- -
MVC - -```go -package main - -import ( - "github.com/kataras/iris/v12" - "github.com/kataras/iris/v12/mvc" -) - -type ( - request struct { - Firstname string `json:"firstname"` - Lastname string `json:"lastname"` - } - - response struct { - ID uint64 `json:"id"` - Message string `json:"message"` - } -) - -func main() { - app := iris.New() - mvc.Configure(app.Party("/users"), configureMVC) - app.Listen(":8080") -} - -func configureMVC(app *mvc.Application) { - app.Handle(new(userController)) -} - -type userController struct { - // [...dependencies] -} - -func (c *userController) PutBy(id uint64, req request) response { - return response{ - ID: id, - Message: req.Firstname + " updated successfully", - } -} -``` -اگر به دنبال مثال‌های بیشتری هستید می‌توانید در [اینجا](_examples/mvc) مطالعه کنید -
- -> دیگران درباره آیریس چه می گویند و برای پشتیبانی از پتانسیل‌های این پروژه متن باز می‌توانید از آن حمایت کنید -[![](https://iris-go.com/static/images/reviews.gif)](https://iris-go.com/testimonials/) +همان‌طور که یک [توسعه‌دهنده Go](https://twitter.com/dkuye/status/1532087942696554497) زمانی گفت، **آیریس از هر جهت هوای شما را دارد و در گذر سال‌ها استوار ایستاده است** ⭐ -[![Benchmarks: Jul 18, 2020 at 10:46am (UTC)](https://iris-go.com/static/images/benchmarks.svg)](https://github.com/kataras/server-benchmarks) +بخشی از امکاناتی که آیریس ارائه می‌دهد: -## 👑 حامیان - -با کمک شما, ما می‌توانیم توسعه وب متن باز را برای همه بهبود ببخشیم ! +* 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) را دنبال کنید تا زودتر از همه باخبر شوید. + +## 👑 حامیان + +با کمک شما می‌توانیم توسعه وب متن‌باز را برای همه بهتر کنیم! + +
+ +

+ 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 +

+ +
+ +## 📖 یادگیری آیریس + +### نصب + +تنها پیش‌نیاز، [زبان برنامه‌نویسی Go](https://go.dev/dl/) است. + +#### ساخت پروژه جدید + +
+ ```sh $ mkdir myapp $ cd myapp $ go mod init myapp -$ go get github.com/kataras/iris/v12@latest # or @v12.2.11 +$ go get github.com/kataras/iris/v12@latest # یا @v12.2.11 ``` -
-نصب بر روی پروژه موجود -
+
نصب روی پروژه موجود ```sh $ cd myapp $ go get github.com/kataras/iris/v12@latest ``` -
-نصب با پرونده go.mod -
- -```txt -module myapp - -go 1.20 - -require github.com/kataras/iris/v12 v12.2.0-beta4.0.20220920072528-ff81f370625a +```sh +$ go mod tidy -compat=1.23 # در ویندوز -compat="1.23". +$ go run . ``` + +
+ ![](https://www.iris-go.com/images/gifs/install-create-iris.gif)
-آیریس شامل مستندات گسترده و کاملی است که کار با چارچوب را آسان می کند. -> [مستندات](https://www.iris-go.com/docs) - -برای اطلاعات بیشتر در مورد اسناد فنی می توانید به مستندات اصلی ما مراجعه کنید. +آیریس **[مستندات](https://www.iris-go.com/docs)** گسترده و دقیقی دارد که شروع کار با این چارچوب را آسان می‌کند. -> [مستندات اصلی](https://pkg.go.dev/github.com/kataras/iris/v12@main) - -## دوست دارید در حین مسافرت کتاب بخوانید ? - - Book cover +برای مستندات فنی دقیق‌تر می‌توانید به [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** را نصب کنید تا مهارت آیریس هم همراهش بیاید، کنار عامل‌های مهندسی‌ای که فعال می‌کند. آن‌گاه دستیار شما کد آیریس را همان‌طور که این چارچوب قرار است استفاده شود می‌نویسد، نه بر اساس حدس از آنچه در آموزش دیده است. + +### دوست دارید هنگام سفر مطالعه کنید؟ + +
+ + 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-522-2D88FF.svg?style=for-the-badge&logo=facebook)](https://www.facebook.com/iris.framework) - - امروز می توانید از طریق کتاب الکترونیکی آیریس (نسخه جدید ، آینده v12.2.0 +) دسترسی PDF و دسترسی آنلاین داشته باشید و در توسعه آیریس شرکت کنید. - - ## 🙌 مشارکت - - ما خیلی دوست داریم شما سهمی در توسعه چارچوب آیریس داشته باشید! برای دریافت اطلاعات بیشتر در مورد مشارکت در پروژه آیریس لطفاً پرونده [CONTRIBUTING.md](CONTRIBUTING.md) را مطالعه کنید. - -[لیست همه شرکت کنندگان](https://github.com/kataras/iris/graphs/contributors) - +[![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) + +
+ +می‌توانید همین امروز نسخه 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) بفرستید. کلیه ضعف‌های امنیتی بلافاصله مورد توجه قرار خواهند گرفت. - -## 📝 مجوز - -این پروژه تحت پروانه [BSD 3-clause license](LICENSE) مجوز دارد ، دقیقاً مانند پروژه Go. - -نام پروژه "آیریس" از اساطیر یونانی الهام‌گرفته شده است. + +اگر آسیب‌پذیری امنیتی در آیریس پیدا کردید، لطفاً به [iris-go@outlook.com](mailto:iris-go@outlook.com) ایمیل بزنید. همه آسیب‌پذیری‌های امنیتی به‌سرعت رسیدگی می‌شوند. + +## 📝 پروانه + +این پروژه، مانند خود پروژه Go، تحت [پروانه BSD سه‌بندی](LICENSE) منتشر شده است. + +نام «Iris» از اساطیر یونان الهام گرفته شده است.
- diff --git a/README_FR.md b/README_FR.md index 7ef7aacc..ff00aa0e 100644 --- a/README_FR.md +++ b/README_FR.md @@ -1,30 +1,22 @@ -# Iris Web Framework +

Actualités

-[![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) [![FOSSA Status](https://img.shields.io/badge/LICENSE%20SCAN-PASSING❤️-CD2956?style=for-the-badge&logo=fossa)](https://app.fossa.io/projects/git%2Bgithub.com%2Fkataras%2Firis?ref=badge_shield) [![view examples](https://img.shields.io/badge/learn%20by-examples-0C8EC5.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=7E18DD&logo=gitter&style=for-the-badge)](https://gitter.im/iris_go/community) +> 🚀 **Iris v14 arrive.** La prochaine version majeure est la plus importante de l'histoire du projet : le framework reconstruit sur les génériques de Go, un constructeur d'application vérifié par le compilateur, des aides de requête qui valident à votre place, une table d'erreurs centrale, trente middlewares intégrés et un livre livré dans le dépôt lui-même. Voir [ce qui arrive dans Iris v14](#-ce-qui-arrive-dans-iris-v14) plus bas. +> +> La version décrite ici, **v12**, continue de fonctionner et de recevoir des correctifs. v14 arrive sur un nouveau chemin d'import, donc rien ne casse chez vous le jour de sa sortie. - +# Iris Web Framework English العربية -Iris est un framework open-source pour Go à la fois simple, rapide et pourvu de nombreuses fonctionnalités. +[![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) -Il fournit des moyens simples et élégants de construire les bases et fonctionnalités de votre site, application backend ou API Rest. +⚡ Iris est un framework web pour Go à la fois rapide, simple, très complet et très efficace. -Lisez [ce que les développeurs pensent d'Iris](https://iris-go.com/testimonials/) et si l'envie vous prend **[étoilez](https://github.com/kataras/iris/stargazers)** le projet pour faire monter son potentiel. +✨ Il fournit des moyens simples et élégants de construire les bases de votre prochain site web ou API. -[![](https://media.giphy.com/media/j5WLmtvwn98VPrm7li/giphy.gif)](https://iris-go.com/testimonials/) +🌟 Lisez [ce que les développeurs pensent d'Iris](https://www.iris-go.com/#review) et **[étoilez](https://github.com/kataras/iris/stargazers)** ce projet open source -[![Benchmarks: Apr 2, 2020 at 12:13pm (UTC)](https://iris-go.com/static/images/benchmarks.svg)](https://github.com/kataras/server-benchmarks) +[![](https://iris-go.com/static/images/reviews.gif)](https://iris-go.com/testimonials/) -## 📖 Démarrer avec Iris - -
-Un simple Hello World - -```sh -# https://www.iris-go.com/#ebookDonateForm -$ go get github.com/kataras/iris/v12@latest -# assume the following code in example.go file -$ cat example.go -``` +[![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 @@ -32,40 +24,591 @@ package main import "github.com/kataras/iris/v12" func main() { - app := iris.New() - app.Get("/ping", func(ctx iris.Context) { - ctx.JSON(iris.Map{ - "message": "pong", - }) - }) + app := iris.New() + app.Use(iris.Compression) - app.Listen(":8080") // port d'écoute + app.Get("/", func(ctx iris.Context) { + ctx.HTML("Hello %s!", "World") + }) + + app.Listen(":8080") } ``` -```sh -# compile et execute example.go -$ go run example.go -# maintenant visitez http://localhost:8080/ping +Comme l'a dit un jour un [développeur Go](https://twitter.com/dkuye/status/1532087942696554497), **Iris vous couvre sur tous les fronts et tient bon au fil des années** ⭐ + +Quelques-unes des fonctionnalités qu'offre Iris : + +* HTTP/2 (Push, y compris les données embarquées) +* Middlewares (Accesslog, Basicauth, CORS, gRPC, Anti-Bot hCaptcha, JWT, MethodOverride, ModRevision, Monitor, PPROF, Ratelimit, Anti-Bot reCaptcha, Recovery, RequestID, Rewrite) +* Versionnage d'API +* Model-View-Controller +* Websockets +* gRPC +* Auto-HTTPS +* Prise en charge intégrée de ngrok, le moyen le plus rapide de publier votre application sur internet +* Un routeur unique avec des chemins dynamiques en paramètre, des types standards comme :uuid, :string, :int... et la possibilité de créer les vôtres +* Compression +* Moteurs de vues (HTML, Django, Handlebars, Pug/Jade et plus) +* Créez votre propre serveur de fichiers et hébergez votre propre serveur WebDAV +* Cache +* Localisation (i18n, sitemap) +* Sessions +* Réponses riches (HTML, Text, Markdown, XML, YAML, Binary, JSON, JSONP, Protocol Buffers, MessagePack, Content Negotiation, Streaming, Server-Sent Events et plus) +* Compression des réponses (gzip, deflate, brotli, snappy, s2) +* Requêtes riches (Bind URL Query, Headers, Form, Text, XML, YAML, Binary, JSON, Validation, Protocol Buffers, MessagePack et plus) +* Injection de dépendances (MVC, Handlers, API Routers) +* Suite de tests +* Et le plus important... vous obtenez des réponses rapides et du support, depuis le premier jour jusqu'à aujourd'hui + +## 🚀 Ce qui arrive dans Iris v14 + +Iris v14 est la plus grande version de l'histoire du projet. Elle reconstruit le framework sur les génériques de Go et change la façon dont une application est assemblée : moins de câblage dans `main`, des handlers plus courts, et un seul endroit pour les décisions qui étaient auparavant éparpillées sur chaque route. + +Rien de tout cela ne demande votre attention aujourd'hui. v12 continue de fonctionner, continue de recevoir des correctifs, et v14 arrive avec un guide de migration qui couvre chaque API renommée ou supprimée. + +### Toute l'application dans une chaîne vérifiée par le compilateur + +`iris.NewBuilder` câble CORS, compression, journalisation des accès, l'endpoint de santé, la table d'erreurs, vos services et vos groupes d'API en une seule expression. Le compilateur impose l'ordre des étapes : une application se construit correctement, ou ne se construit pas du tout. + +```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") ``` -> Le routing est géré par [muxie](https://github.com/kataras/muxie), la librairie Go la plus rapide et complète. +### Les handlers cessent de se répéter + +Le décodage, la validation et le rendu des erreurs sortent du corps du handler. `rest.ReadJSON[T]` décode la requête, exécute la méthode `Validate() error` de votre type lorsqu'elle existe, et écrit lui-même le 400. Les aides de réponse écrivent le statut de succès, ou ce que votre table centrale dit que cette erreur doit renvoyer. + +```go +func (api *ProductsAPI) create(ctx iris.Context) { + input, ok := rest.ReadJSON[catalog.ProductInput](ctx) + if !ok { + return // 400 déjà écrit : JSON malformé ou Validate en échec. + } + + id, err := api.svc.Create(ctx, input) + rest.Created(ctx, id, err) // 201, ou l'erreur mappée centralement. +} +``` + +`rest.OK`, `rest.NoContent`, `rest.Count` et `rest.Paginated` couvrent les autres formes de réponse d'une API. + +### Les erreurs sont déclarées une seule fois + +Le nouveau paquet `rest/errors` contient la correspondance entre les erreurs de votre domaine et les réponses HTTP. Les clients reçoivent des charges utiles canoniques et lisibles par une machine. Les messages internes restent internes. Enregistrez un collecteur et chaque échec atteint votre logger ou votre base de données depuis un seul endroit. Une erreur peut être rendue en JSON ou en vue, selon ce que le client a demandé. + +### L'injection de dépendances partout, pas seulement en MVC + +Les constructeurs déclarent ce dont ils ont besoin et le conteneur le fournit : pour les handlers, pour les groupes d'API, pour les contrôleurs. Un service qui implémente `Init(ctx context.Context) error` s'exécute une fois dans `Build()`. Tout ce qui peut être fermé est fermé à l'arrêt. Le paquet `hero` disparaît, remplacé par `dep` et `rest`, qui en font plus en moins de lignes. Les contrôleurs MVC sont construits sur les génériques. + +### Les paquets sont là où on les attend + +`sessions`, `cache`, `websocket`, `i18n`, `view` et `versioning` sont devenus des middlewares. `mvc` a été déplacé sous `controller`, aux côtés des nouveaux contrôleurs `fileserver`, `sitemap` et `apigraph`. `apigraph` dessine votre arbre de routes sous forme de graphe D3 interactif. + +Trente middlewares sont fournis d'origine, dont de nouveaux : `httpcost` (temps, mémoire et CPU par requête, pour l'analyse de performance ou la facturation), `bodylimit`, `compress`, `counter`, `referrer`, `geolocation`, `ipaccess` et `servertiming`. Les implémentations de moteurs de vues ont été déplacées vers [iris-contrib/views](https://github.com/iris-contrib/views). + +### La configuration est un littéral partiel + +`iris.Configuration` et les configurateurs `With*` sont remplacés par `iris.Options`. Renseignez les champs qui vous intéressent, le reste vient des valeurs par défaut. `Bind` charge du YAML depuis la variable d'environnement `SERVER_CONFIG`, puis depuis un fichier. + +```go +app := iris.New(iris.Options{Name: "myapp", LogLevel: "debug"}) +``` + +### Des noms qui disent ce qu'ils font + +Lire un en-tête de requête et définir un en-tête de réponse ne partagent plus un préfixe qui change discrètement de sens : `ctx.Header` lit la requête, tandis que `ctx.SetHeader` et `ctx.ResponseHeader` travaillent sur la réponse. `Party` devient `Router`. `ctx.URLParam` devient `ctx.Query().Get`. Chaque renommage figure dans le guide de migration avec son remplacement, et la plupart tiennent en un rechercher-remplacer. + +### Sécurisé par défaut + +Les cookies de session sont livrés avec `Secure` et `SameSite=Lax`. La limite de taille du corps de requête est appliquée sur tous les chemins de lecture. La reconstruction a emporté des bugs de longue date, parmi lesquels un limiteur de débit qui enregistrait les limites sans jamais les appliquer et un appel à `Logout` capable d'emporter le processus avec lui. + +### Une documentation qui se lit du début à la fin + +v14 est livré avec un livre de 23 chapitres dans le dépôt, un tutoriel de démarrage qui construit une API REST testée en un seul document, un guide de migration pour les applications v12, et un wiki IA en direct généré depuis les sources qui répond aux questions sur le code. + +### Ce que cela signifie pour votre code v12 + +Le chemin d'import devient `github.com/kataras/iris/v14`, donc v12 et v14 peuvent cohabiter et rien ne casse le jour de la sortie. Mettez à jour quand cela vous arrange. Le guide de migration couvre le chemin d'import, les déplacements de paquets, chaque API supprimée et son remplacement, ainsi que les changements de comportement, avec des commandes prêtes pour les parties mécaniques. + +Il n'y a pas encore de date de sortie publique. Surveillez les [releases](https://github.com/kataras/iris/releases) ou suivez [@iris_framework](https://twitter.com/iris_framework) pour l'apprendre en premier. + +## 👑 Soutiens + +Avec votre aide, nous pouvons améliorer le développement web open source pour tout le monde ! + +

+ 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 +

+ +## 📖 Démarrer avec Iris + +### Installation + +Le seul prérequis est le [langage de programmation Go](https://go.dev/dl/). + +#### Créer un nouveau projet + +```sh +$ mkdir myapp +$ cd myapp +$ go mod init myapp +$ go get github.com/kataras/iris/v12@latest # ou @v12.2.11 +``` + +
Installer dans un projet existant + +```sh +$ cd myapp +$ go get github.com/kataras/iris/v12@latest +``` + +**Exécuter** + +```sh +$ go mod tidy -compat=1.23 # -compat="1.23" sous windows. +$ go run . +```
-Iris possède un **[wiki](https://www.iris-go.com/#ebookDonateForm)** complet et précis qui vous permettra d'implémenter ses fonctionnalités rapidement et facilement. +![](https://www.iris-go.com/images/gifs/install-create-iris.gif) - +Iris possède une **[documentation](https://www.iris-go.com/docs)** complète et précise qui facilite la prise en main du framework. -Pour une documentation encore plus complète vous pouvez visiter notre [godocs](https://pkg.go.dev/github.com/kataras/iris/v12@v12.2.11) (en Anglais). Et vous trouverez du code executable dans le dossier [\_examples](_examples/). +Pour une documentation technique plus détaillée vous pouvez consulter nos [godocs](https://pkg.go.dev/github.com/kataras/iris/v12@v12.2.11). Et pour du code exécutable vous trouverez toujours le sous-dossier [./_examples](_examples) du dépôt. -### Vous préférez une version PDF? +### Développer avec Plexon AI - Book cover +[Plexon AI](https://plexon.ai) est un assistant de programmation IA multiplateforme signé Hellenic Development, et il est livré avec une **skill dédiée à Iris** : un guide de développement v14 écrit par l'auteur du framework, avec dix-neuf documents de référence couvrant le routage et les macros, l'API de contexte, les aides `rest`, la gestion des erreurs, les trente middlewares, les contrôleurs intégrés, le SDK d'authentification, le durcissement de la sécurité, la persistance, le cache, l'i18n, l'observabilité, les performances, les tests, le déploiement et la migration de v12 vers v14. -[![follow author](https://img.shields.io/twitter/follow/makismaropoulos.svg?style=for-the-badge)](https://twitter.com/intent/follow?screen_name=makismaropoulos) +Installez la persona **Software Developer** et la skill Iris arrive avec elle, aux côtés des agents d'ingénierie qu'elle active. Votre assistant écrit alors du code Iris tel que le framework est censé être utilisé, au lieu de deviner à partir de ce qu'il a croisé pendant son entraînement. -Vous pouvez [demander](https://www.iris-go.com/#ebookDonateForm) une version **E-Book** (en Anglais) de la documentation et contribuer au développement d'Iris. +### Vous aimez lire en voyageant ? + + Couverture du livre + +[![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) + +Vous pouvez [demander](https://www.iris-go.com/#ebookDonateForm) dès aujourd'hui le PDF et l'accès en ligne à l'**E-Book Iris** (nouvelle édition) et participer au développement d'Iris. ## 🙌 Contribuer @@ -79,9 +622,6 @@ Si vous trouvez une vulnérabilité dans Iris, envoyez un e-mail à [iris-go@out ## 📝 Licence -Le projet est sous licence [licence BSD 3](LICENSE), tout comme le langage Go lui même. +Le projet est sous [licence BSD 3 clauses](LICENSE), tout comme le langage Go lui-même. -Le nom "Iris" est inspiré de la mythologie Grecque. - +Le nom "Iris" est inspiré de la mythologie grecque. diff --git a/README_GR.md b/README_GR.md index d443d0f8..f7ed767a 100644 --- a/README_GR.md +++ b/README_GR.md @@ -1,26 +1,22 @@ -# Iris Web Framework +

Νέα

-[![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) [![FOSSA Status](https://img.shields.io/badge/LICENSE%20SCAN-PASSING❤️-CD2956?style=for-the-badge&logo=fossa)](https://app.fossa.io/projects/git%2Bgithub.com%2Fkataras%2Firis?ref=badge_shield) [![view examples](https://img.shields.io/badge/learn%20by-examples-0C8EC5.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=7E18DD&logo=gitter&style=for-the-badge)](https://gitter.im/iris_go/community) +> 🚀 **Το Iris v14 έρχεται.** Η επόμενη κύρια έκδοση είναι η μεγαλύτερη στην ιστορία του project: το framework ξαναχτισμένο πάνω στα Go generics, ένας builder εφαρμογής που ελέγχεται από τον compiler, βοηθοί αιτημάτων που κάνουν validation για εσάς, ένας κεντρικός χάρτης σφαλμάτων, τριάντα ενσωματωμένα middleware και ένα βιβλίο μέσα στο ίδιο το repository. Δείτε [τι έρχεται στο Iris v14](#-τι-έρχεται-στο-iris-v14) παρακάτω. +> +> Η έκδοση που περιγράφεται εδώ, η **v12**, συνεχίζει να δουλεύει και να δέχεται διορθώσεις. Το v14 έρχεται σε νέο import path, οπότε τίποτα δικό σας δεν σπάει την ημέρα που θα βγει. -Το Iris είναι ένα γρήγορο, απλό αλλά και πλήρως λειτουργικό και πολύ αποδοτικό web framework για τη Go γλώσσα προγραμματισμού. Παρέχει ένα εκφραστικό και εύχρηστο υπόβαθρο για την επόμενη ιστοσελίδα σας. +# Iris Web Framework English العربية -Μάθετε τι [λένε οι άλλοι για το Iris](https://iris-go.com/testimonials/) και δώστε ένα **αστεράκι** στο GitHub. +[![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) -[![](https://media.giphy.com/media/j5WLmtvwn98VPrm7li/giphy.gif)](https://iris-go.com/testimonials/) +⚡ Το Iris είναι ένα γρήγορο, απλό αλλά και πλήρως λειτουργικό και πολύ αποδοτικό web framework για τη Go. -[![Benchmarks: Apr 2, 2020 at 12:13pm (UTC)](https://iris-go.com/static/images/benchmarks.svg)](https://github.com/kataras/server-benchmarks) +✨ Παρέχει ένα εκφραστικό και εύχρηστο υπόβαθρο για την επόμενη ιστοσελίδα ή το επόμενο API σας. -## Μαθαίνοντας το Iris +🌟 Μάθετε τι [λένε οι άλλοι για το 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/) -```sh -# υποθέτοντας ότι ο παρακάτω κώδικας -# βρίσκεται στο example.go αρχείο -# -$ cat example.go -``` +[![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 @@ -28,53 +24,604 @@ package main import "github.com/kataras/iris/v12" func main() { - app := iris.Default() - app.Get("/ping", func(ctx iris.Context) { - ctx.JSON(iris.Map{ - "message": "pong", - }) - }) + app := iris.New() + app.Use(iris.Compression) - app.Listen(":8080") + app.Get("/", func(ctx iris.Context) { + ctx.HTML("Hello %s!", "World") + }) + + app.Listen(":8080") } ``` -```sh -# τρέξτε το example.go και -# επισκεφτείτε την σελίδα http://localhost:8080/ping -# στο πρόγραμμα περιήγησης σας -# -$ go run example.go +Όπως είπε κάποτε ένας [προγραμματιστής της Go](https://twitter.com/dkuye/status/1532087942696554497), **το Iris σε καλύπτει σε όλα και στέκεται δυνατό όλα αυτά τα χρόνια** ⭐ + +Μερικά από όσα προσφέρει το Iris: + +* HTTP/2 (Push, ακόμα και Embedded data) +* Middleware (Accesslog, Basicauth, CORS, gRPC, Anti-Bot hCaptcha, JWT, MethodOverride, ModRevision, Monitor, PPROF, Ratelimit, Anti-Bot reCaptcha, Recovery, RequestID, Rewrite) +* Εκδόσεις API (API Versioning) +* Model-View-Controller +* Websockets +* gRPC +* Auto-HTTPS +* Ενσωματωμένη υποστήριξη ngrok, ο γρηγορότερος τρόπος να βγει η εφαρμογή σας στο διαδίκτυο +* Μοναδικός Router με δυναμικές διαδρομές ως παραμέτρους, με τυποποιημένους τύπους όπως :uuid, :string, :int... και τη δυνατότητα να φτιάξετε δικούς σας +* Συμπίεση +* View Engines (HTML, Django, Handlebars, Pug/Jade και άλλα) +* Φτιάξτε τον δικό σας File Server και φιλοξενήστε τον δικό σας WebDAV server +* Cache +* Τοπικοποίηση (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) +* Πλούσια αιτήματα (Bind URL Query, Headers, Form, Text, XML, YAML, Binary, JSON, Validation, Protocol Buffers, MessagePack και άλλα) +* Dependency Injection (MVC, Handlers, API Routers) +* Testing Suite +* Και το πιο σημαντικό... παίρνετε γρήγορες απαντήσεις και υποστήριξη, από την πρώτη μέρα μέχρι σήμερα + +## 🚀 Τι έρχεται στο Iris v14 + +Το Iris v14 είναι η μεγαλύτερη έκδοση στην ιστορία του έργου. Ξαναχτίζει το framework πάνω στα Go generics και αλλάζει τον τρόπο που συναρμολογείται μια εφαρμογή: λιγότερο στήσιμο μέσα στη `main`, πιο σύντομοι handlers, και ένα μόνο σημείο για τις αποφάσεις που παλιά ήταν σκορπισμένες σε κάθε route. + +Τίποτα από αυτά δεν χρειάζεται την προσοχή σας σήμερα. Η v12 συνεχίζει να δουλεύει, συνεχίζει να δέχεται διορθώσεις, και το v14 έρχεται με έναν οδηγό μετάβασης που καλύπτει κάθε API που μετονομάστηκε ή αφαιρέθηκε. + +### Ολόκληρη η εφαρμογή σε μία αλυσίδα που ελέγχει ο compiler + +Το `iris.NewBuilder` συνδέει CORS, συμπίεση, access logging, το health endpoint, τον χάρτη σφαλμάτων, τα services σας και τα API groups σας σε μία έκφραση. Ο compiler επιβάλλει τη σειρά των βημάτων, οπότε μια εφαρμογή είτε χτίζεται σωστά είτε δεν χτίζεται καθόλου. + +```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") ``` -> Η δρομολόγηση τροφοδοτείται από το [muxie](https://github.com/kataras/muxie), το πιο ισχυρό και ταχύτερο λογισμικό βασισμένο σε trie αλγόριθμο που γράφτηκε σε Go. +### Οι handlers σταματούν να επαναλαμβάνονται + +Το decoding, το validation και η απόδοση των σφαλμάτων φεύγουν από το σώμα του handler. Το `rest.ReadJSON[T]` αποκωδικοποιεί το αίτημα, τρέχει τη μέθοδο `Validate() error` του τύπου σας όταν υπάρχει, και γράφει το ίδιο το 400. Οι βοηθοί απόκρισης γράφουν το status της επιτυχίας, ή ό,τι λέει ο κεντρικός σας χάρτης ότι πρέπει να επιστρέψει αυτό το σφάλμα. + +```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 αποκρίσεις. Οι clients παίρνουν τυποποιημένα, μηχανικά αναγνώσιμα payloads. Τα εσωτερικά μηνύματα μένουν εσωτερικά. Δηλώστε έναν collector και κάθε αποτυχία φτάνει στον logger ή στη βάση δεδομένων σας από ένα μόνο σημείο. Ένα σφάλμα μπορεί να αποδοθεί ως JSON ή ως view, ανάλογα με το τι ζήτησε ο client. + +### Dependency injection παντού, όχι μόνο στο MVC + +Οι constructors δηλώνουν τι χρειάζονται και το container τους το δίνει: για handlers, για API groups, για controllers. Ένα service που υλοποιεί `Init(ctx context.Context) error` τρέχει μία φορά μέσα στο `Build()`. Ό,τι κλείνει, κλείνει στο shutdown. Το πακέτο `hero` έφυγε, αντικαταστάθηκε από τα `dep` και `rest`, που κάνουν περισσότερα με λιγότερες γραμμές. Οι MVC controllers είναι χτισμένοι πάνω στα generics. + +### Τα πακέτα βρίσκονται εκεί που θα τα περιμένατε + +Τα `sessions`, `cache`, `websocket`, `i18n`, `view` και `versioning` έγιναν middleware. Το `mvc` μετακόμισε κάτω από το `controller`, δίπλα στους νέους controllers `fileserver`, `sitemap` και `apigraph`. Το `apigraph` αποδίδει το δέντρο των routes σας ως διαδραστικό γράφημα D3. + +Τριάντα middleware έρχονται ενσωματωμένα, ανάμεσά τους και νέα: `httpcost` (χρόνος, μνήμη και CPU ανά αίτημα, για μελέτη επιδόσεων ή για χρέωση), `bodylimit`, `compress`, `counter`, `referrer`, `geolocation`, `ipaccess` και `servertiming`. Οι υλοποιήσεις των view engines μετακόμισαν στο [iris-contrib/views](https://github.com/iris-contrib/views). + +### Οι ρυθμίσεις είναι ένα μερικό literal + +Το `iris.Configuration` και οι `With*` configurators αντικαθίστανται από το `iris.Options`. Ορίζετε μόνο τα πεδία που σας ενδιαφέρουν και τα υπόλοιπα έρχονται από τις προεπιλογές. Το `Bind` φορτώνει YAML από τη μεταβλητή περιβάλλοντος `SERVER_CONFIG` και μετά από αρχείο. + +```go +app := iris.New(iris.Options{Name: "myapp", LogLevel: "debug"}) +``` + +### Ονόματα που λένε τι κάνουν + +Η ανάγνωση ενός request header και ο ορισμός ενός response header δεν μοιράζονται πια ένα πρόθεμα που αλλάζει σιωπηλά νόημα: το `ctx.Header` διαβάζει το αίτημα, ενώ τα `ctx.SetHeader` και `ctx.ResponseHeader` δουλεύουν στην απόκριση. Το `Party` έγινε `Router`. Το `ctx.URLParam` έγινε `ctx.Query().Get`. Κάθε μετονομασία είναι καταγραμμένη στον οδηγό μετάβασης μαζί με την αντικατάστασή της, και οι περισσότερες είναι μία αναζήτηση και αντικατάσταση. + +### Ασφαλές εξ ορισμού + +Τα cookies των sessions έρχονται με `Secure` και `SameSite=Lax`. Το όριο μεγέθους του request body επιβάλλεται σε κάθε διαδρομή ανάγνωσης. Μαζί με το ξαναχτίσιμο έπεσαν και χρόνια bugs, ανάμεσά τους ένας rate limiter που κατέγραφε τα όρια χωρίς ποτέ να τα επιβάλλει και μια κλήση `Logout` που μπορούσε να πάρει μαζί της όλη τη διεργασία. + +### Τεκμηρίωση που διαβάζεται από την αρχή ως το τέλος + +Το v14 έρχεται με ένα βιβλίο 23 κεφαλαίων μέσα στο repository, έναν οδηγό πρώτων βημάτων που χτίζει ένα δοκιμασμένο REST API μέσα σε ένα κείμενο, έναν οδηγό μετάβασης για εφαρμογές v12, και ένα ζωντανό AI wiki παραγόμενο από τον πηγαίο κώδικα που απαντά σε ερωτήσεις για τη βάση κώδικα. + +### Τι σημαίνει για τον v12 κώδικά σας + +Το import path γίνεται `github.com/kataras/iris/v14`, οπότε v12 και v14 μπορούν να συνυπάρχουν και τίποτα δεν σπάει την ημέρα της κυκλοφορίας. Αναβαθμίζετε όποτε σας βολεύει. Ο οδηγός μετάβασης καλύπτει το import path, τις μετακινήσεις πακέτων, κάθε API που αφαιρέθηκε και την αντικατάστασή του, καθώς και τις αλλαγές συμπεριφοράς, με έτοιμες εντολές για τα μηχανικά κομμάτια. + +Δεν υπάρχει ακόμα δημόσια ημερομηνία κυκλοφορίας. Παρακολουθήστε τα [releases](https://github.com/kataras/iris/releases) ή ακολουθήστε το [@iris_framework](https://twitter.com/iris_framework) για να το μάθετε πρώτοι. + +## 👑 Υποστηρικτές + +Με τη βοήθειά σας, μπορούμε να κάνουμε την ανάπτυξη web ανοιχτού κώδικα καλύτερη για όλους! + +

+ 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/). + +#### Δημιουργία νέου project + +```sh +$ mkdir myapp +$ cd myapp +$ go mod init myapp +$ go get github.com/kataras/iris/v12@latest # ή @v12.2.11 +``` + +
Εγκατάσταση σε υπάρχον project + +```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 περιέχει εκτενείς και λεπτομερείς **[book](https://www.iris-go.com/#ebookDonateForm)** καθιστώντας το εύκολο στην εκμάθηση. +![](https://www.iris-go.com/images/gifs/install-create-iris.gif) -Για λεπτομερέστερη τεχνική τεκμηρίωση μπορείτε να κατευθυνθείτε προς τα [godocs](https://pkg.go.dev/github.com/kataras/iris/v12@v12.2.11) μας. Και για εκτελέσιμο κώδικα μπορείτε πάντα να επισκέπτεστε τα [παραδείγματα](_examples/). +Το Iris διαθέτει εκτενή και λεπτομερή **[τεκμηρίωση](https://www.iris-go.com/docs)** που κάνει εύκολο το ξεκίνημα με το framework. + +Για πιο λεπτομερή τεχνική τεκμηρίωση μπορείτε να κατευθυνθείτε στα [godocs](https://pkg.go.dev/github.com/kataras/iris/v12@v12.2.11) μας. Και για εκτελέσιμο κώδικα μπορείτε πάντα να επισκεφθείτε τον υποκατάλογο [./_examples](_examples) του repository. + +### Αναπτύξτε με το Plexon AI + +Το [Plexon AI](https://plexon.ai) είναι ένας cross-platform βοηθός προγραμματισμού με τεχνητή νοημοσύνη από τη Hellenic Development, και έρχεται με ένα ειδικό **skill για το Iris**: έναν οδηγό ανάπτυξης για την v14 γραμμένο από τον ίδιο τον δημιουργό του framework, με δεκαεννέα κείμενα αναφοράς που καλύπτουν routing και macros, το context API, τους βοηθούς `rest`, τη διαχείριση σφαλμάτων, και τα τριάντα middleware, τους ενσωματωμένους controllers, το SDK αυθεντικοποίησης, τη θωράκιση ασφάλειας, την αποθήκευση δεδομένων, το caching, το i18n, την παρατηρησιμότητα, τις επιδόσεις, τα tests, την ανάπτυξη σε παραγωγή και τη μετάβαση από την v12 στην v14. + +Εγκαταστήστε την persona **Software Developer** και το skill του Iris έρχεται μαζί της, δίπλα στους agents μηχανικής που ενεργοποιεί. Ο βοηθός σας τότε γράφει κώδικα Iris όπως προορίζεται να χρησιμοποιείται το framework, αντί να μαντεύει από ό,τι έτυχε να δει στην εκπαίδευσή του. ### Σας αρέσει να διαβάζετε ενώ ταξιδεύετε; -Μπορείτε να [ζητήσετε](https://www.iris-go.com/#ebookDonateForm) σήμερα την PDF έκδοση και την online πρόσβαση στο Ηλεκτρονικό μας **Βιβλίο(E-Book)** και να συμμετάσχετε στην ανάπτυξη του Iris. + Εξώφυλλο βιβλίου -[![https://iris-go.com/static/images/iris-book-cover-sm.jpg](https://iris-go.com/static/images/iris-book-cover-sm.jpg)](https://www.iris-go.com/#ebookDonateForm) +[![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 author](https://img.shields.io/twitter/follow/makismaropoulos.svg?style=for-the-badge)](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) -Θα θέλαμε να δούμε τη συμβολή σας στο Iris Web Framework! Για περισσότερες πληροφορίες σχετικά με το πως μπορείτε να συμβάλετε, δείτε το [CONTRIBUTING.md](CONTRIBUTING.md) αρχείο. +Μπορείτε να [ζητήσετε](https://www.iris-go.com/#ebookDonateForm) σήμερα την PDF έκδοση και την online πρόσβαση στο **Ηλεκτρονικό Βιβλίο του Iris** (Νέα Έκδοση) και να συμμετάσχετε στην ανάπτυξη του Iris. -[Κατάλογος όλων των συνεισφορών](https://github.com/kataras/iris/graphs/contributors). +## 🙌 Συνεισφορά -## Αδυναμίες Ασφάλειας +Θα θέλαμε να δούμε τη συνεισφορά σας στο Iris Web Framework! Για περισσότερες πληροφορίες σχετικά με το πώς μπορείτε να συνεισφέρετε, δείτε το αρχείο [CONTRIBUTING.md](CONTRIBUTING.md). -Εάν εντοπίσετε κάποια αδυναμία ασφαλείας του Iris, στείλτε ένα μήνυμα ηλεκτρονικού ταχυδρομείου στο [iris-go@outlook.com](mailto:iris-go@outlook.com). Όλες οι τυχών αδυναμίες ασφαλείας θα αντιμετωπιστούν άμεσα. +[Κατάλογος όλων των συνεισφερόντων](https://github.com/kataras/iris/graphs/contributors) -## Άδεια Χρήσης +## 🛡 Αδυναμίες Ασφαλείας -Το όνομα "Iris" εμπνεύστηκε από την ελληνική μυθολογία, συγκεκριμένα από την θεά Ίριδα. +Εάν εντοπίσετε κάποια αδυναμία ασφαλείας στο Iris, στείλτε ένα μήνυμα ηλεκτρονικού ταχυδρομείου στο [iris-go@outlook.com](mailto:iris-go@outlook.com). Όλες οι αδυναμίες ασφαλείας θα αντιμετωπιστούν άμεσα. -Το Iris Web Framework είναι δωρεάν λογισμικό ανοιχτού λογισμικού με άδεια χρήσης [3-Clause BSD](LICENSE). +## 📝 Άδεια Χρήσης + +Αυτό το έργο διατίθεται υπό την [άδεια BSD 3-clause](LICENSE), όπως και η ίδια η γλώσσα Go. + +Το όνομα "Iris" εμπνεύστηκε από την ελληνική μυθολογία. diff --git a/README_JA.md b/README_JA.md index 0cb5e6c0..dc0e5949 100644 --- a/README_JA.md +++ b/README_JA.md @@ -1,18 +1,18 @@ - +# Iris Web Framework English العربية -# Iris Web Framework +[![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) -[![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 用 Web フレームワークです。 -Irisは、高速でシンプルでありながら、十分な機能を備えた、非常に効率的なGo用Webフレームワークです。 +✨ あなたの次のウェブサイトや API のために、美しく表現力豊かで使いやすい基盤を提供します。 -あなたの次のウェブサイトやAPIのために、美しく表現力豊かで使いやすい基盤を提供します。 - -[Irisについての他の人々の意見](https://www.iris-go.com/#review)を学び、このオープンソースプロジェクトに **[スターをつけて](https://github.com/kataras/iris/stargazers)** 、その可能性を応援しましょう。 +🌟 [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/) @@ -35,194 +35,542 @@ func main() { } ``` - - -ある[Go開発者](https://twitter.com/dkuye/status/1532087942696554497)が言ったように、 **Irisはあなたをあらゆる面でサポートし、長年にわたって力強さを保ち続けています** 。 - -Irisが提供する機能の一部: - -* HTTP/2 (Push, Embedded data) -* Middleware (Accesslog, Basicauth, CORS, gRPC, Anti-Bot hCaptcha, JWT, MethodOverride, ModRevision, Monitor, PPROF, Ratelimit, Anti-Bot reCaptcha, Recovery, RequestID, Rewrite) +* HTTP/2(Push、埋め込みデータにも対応) +* ミドルウェア(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 のような標準的な型を持つダイナミック・パスをパラメータとするユニークなルーター -* Compression -* View Engines (HTML, Django, Handlebars, Pug/Jade and more) -* 独自のファイルサーバーを作成し、WebDAVサーバーをホストする -* Cache -* Localization (i18n, sitemap) -* Sessions -* 豊富な Response (HTML, Text, Markdown, XML, YAML, Binary, JSON, JSONP, Protocol Buffers, MessagePack, Content Negotiation, Streaming, Server-Sent Events など) -* Response Compression (gzip, deflate, brotli, snappy, s2) -* 豊富な Requests (Bind URL Query, Headers, Form, Text, XML, YAML, Binary, JSON, Validation, Protocol Buffers, MessagePack など) -* Dependency Injection (MVC, Handlers, API Routers) -* Testing Suite -* そして最も重要なのは、初日から現在に至るまで、つまり丸6年間、迅速な回答とサポートを受けられることです! +* ngrok の組み込みサポート。アプリをインターネットに公開するもっとも速い方法です +* :uuid、:string、:int などの標準型で動的パスをパラメータとして扱える独自ルーター。独自の型も作れます +* 圧縮 +* ビューエンジン(HTML、Django、Handlebars、Pug/Jade など) +* 独自のファイルサーバーを構築し、自前の WebDAV サーバーをホスト +* キャッシュ +* ローカライズ(i18n、sitemap) +* セッション +* 豊富なレスポンス(HTML、Text、Markdown、XML、YAML、Binary、JSON、JSONP、Protocol Buffers、MessagePack、コンテントネゴシエーション、ストリーミング、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 で何が来るのか + +Iris v14 はこのプロジェクト史上もっとも大きなリリースです。フレームワークを Go のジェネリクスの上に作り直し、アプリケーションの組み立て方そのものを変えます。`main` での配線は減り、ハンドラは短くなり、これまで各ルートに散らばっていた判断がひとつの場所に集まります。 + +今日のあなたが何かする必要はありません。v12 はこれまでどおり動き、修正も入り続けます。v14 は、名前が変わった API と削除された API のすべてを網羅した移行ガイドとともに届きます。 + +### アプリケーション全体を、コンパイラが検査する 1 本のチェーンで + +`iris.NewBuilder` は CORS、圧縮、アクセスログ、ヘルスエンドポイント、エラーマップ、あなたのサービスと API グループを 1 つの式で結線します。ステップの順序はコンパイラが強制するので、アプリケーションは正しくビルドされるか、まったくビルドされないかのどちらかです。 + +```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` はミドルウェアになりました。`mvc` は `controller` の下に移り、新しい `fileserver`、`sitemap`、`apigraph` コントローラと並びます。`apigraph` はあなたのルートツリーをインタラクティブな D3 グラフとして描きます。 + +30 個のミドルウェアが同梱され、その中には新しいものもあります: `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` になりました。改名はすべて置き換え先とともに移行ガイドに載っており、その大半は検索と置換 1 回で済みます。 + +### 既定で安全 + +セッション Cookie は `Secure` と `SameSite=Lax` 付きで発行されます。リクエストボディの上限はすべての読み取り経路で適用されます。作り直しの過程で長年のバグも片づきました。制限を記録するだけで一度も適用していなかったレートリミッタや、プロセスごと巻き込みかねなかった `Logout` の呼び出しなどです。 + +### 最初から最後まで読めるドキュメント + +v14 にはリポジトリ内に収録された 23 章の本、テスト付きの REST API を 1 つの文書で組み立てる入門チュートリアル、v12 アプリケーション向けの移行ガイド、そしてソースから生成されコードベースへの質問に答えるライブ AI wiki が付いてきます。 + +### あなたの v12 コードにとっての意味 + +import パスは `github.com/kataras/iris/v14` になります。v12 と v14 は並んで存在でき、リリース当日に壊れるものはありません。都合のよいときにアップグレードしてください。移行ガイドは import パス、パッケージの移動、削除された API とその置き換え、挙動の変更を扱い、機械的な部分にはそのまま使えるコマンドが付いています。 + +公開されたリリース日はまだありません。[リリース](https://github.com/kataras/iris/releases)を見守るか、[@iris_framework](https://twitter.com/iris_framework) をフォローすれば、いちばん早く知ることができます。 ## 👑 サポーター -皆様のご協力により、オープンソース・ウェブ開発をより良いものにすることができます! +みなさんの力があれば、オープンソースの Web 開発をすべての人にとってより良いものにできます! -## 📖 Irisを学ぶ +

+ 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/) だけです。 +必要なのは [Go プログラミング言語](https://go.dev/dl/)だけです。 -#### 新規プロジェクトの作成 +#### 新しいプロジェクトを作る ```sh $ mkdir myapp $ cd myapp $ go mod init myapp -$ go get github.com/kataras/iris/v12@latest # or @v12.2.11 +$ go get github.com/kataras/iris/v12@latest # または @v12.2.11 ``` -
既存のプロジェクトにインストールする場合 +
既存のプロジェクトにインストールする ```sh $ cd myapp @@ -232,7 +580,7 @@ $ go get github.com/kataras/iris/v12@latest **実行** ```sh -$ go mod tidy -compat=1.20 # -compat="1.20" for windows. +$ go mod tidy -compat=1.23 # windows では -compat="1.23"。 $ go run . ``` @@ -240,15 +588,17 @@ $ go run . ![](https://www.iris-go.com/images/gifs/install-create-iris.gif) -Iris には広範で詳細な **[ドキュメント](https://www.iris-go.com/docs)** が含まれているので、フレームワークを簡単に使い始めることができます。 +Iris には広範で詳細な **[ドキュメント](https://www.iris-go.com/docs)** があり、フレームワークを簡単に使い始められます。 - +より詳しい技術ドキュメントは [godocs](https://pkg.go.dev/github.com/kataras/iris/v12@v12.2.11) をご覧ください。実行できるコードは、いつでもリポジトリの [./_examples](_examples) サブディレクトリにあります。 - +### Plexon AI で開発する -より詳細な技術文書については [godocs](https://pkg.go.dev/github.com/kataras/iris/v12@main) をご覧ください。また、実行可能なコードについては、いつでもリポジトリのサブディレクトリ [./_examples](_examples) にアクセスできます。 +[Plexon AI](https://plexon.ai) は Hellenic Development によるクロスプラットフォームの AI コーディングアシスタントで、専用の **Iris スキル**を同梱しています。フレームワークの作者自身が書いた v14 開発ガイドで、ルーティングとマクロ、context API、`rest` ヘルパー、エラー処理、30 個すべてのミドルウェア、組み込みコントローラ、認証 SDK、セキュリティ強化、永続化、キャッシュ、i18n、可観測性、パフォーマンス、テスト、デプロイ、そして v12 から v14 への移行を扱う 19 本のリファレンス文書が含まれます。 -### 旅行中に本を読むのは好きですか? +**Software Developer** ペルソナをインストールすれば、Iris スキルもそれが有効にするエンジニアリング系エージェントと並んで一緒に入ります。以降、アシスタントは学習中にたまたま見たものから推測するのではなく、このフレームワークが本来意図された使い方どおりに Iris のコードを書きます。 + +### 旅行中に読書を楽しみますか? Book cover @@ -258,24 +608,20 @@ Iris には広範で詳細な **[ドキュメント](https://www.iris-go.com/doc [![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) -**Iris E-Book**(新版、**将来のv12.2.0+**)のPDFとオンライン・アクセスを今すぐ [リクエスト](https://www.iris-go.com/#ebookDonateForm) して、Irisの開発に参加してください。 +**Iris 電子書籍**(新版)の PDF とオンラインアクセスを今日[リクエスト](https://www.iris-go.com/#ebookDonateForm)して、Iris の開発に参加できます。 -## 🙌 貢献する +## 🙌 コントリビュート -Irisウェブ・フレームワークへの貢献をお待ちしています!Iris プロジェクトへの貢献についての詳細は、 [CONTRIBUTING.md](CONTRIBUTING.md) ファイルをご覧ください。 +Iris Web Framework へのあなたの貢献をお待ちしています! Iris プロジェクトへの貢献方法について詳しくは [CONTRIBUTING.md](CONTRIBUTING.md) をご覧ください。 -[全貢献者のリスト](https://github.com/kataras/iris/graphs/contributors) +[すべてのコントリビューター一覧](https://github.com/kataras/iris/graphs/contributors) -## 🛡 セキュリティの脆弱性 +## 🛡 セキュリティ脆弱性 -Iris にセキュリティ上の脆弱性を発見した場合は、 [iris-go@outlook.com](mailto:iris-go@outlook.com) にメールを送ってください。すべてのセキュリティ脆弱性は、速やかに対処されます。 +Iris にセキュリティ上の脆弱性を発見した場合は、[iris-go@outlook.com](mailto:iris-go@outlook.com) までメールをお送りください。すべてのセキュリティ脆弱性は速やかに対処されます。 ## 📝 ライセンス -このプロジェクトのライセンスは、Goプロジェクトと同様、 [BSD 3-clause license](LICENSE) です。 +このプロジェクトは、Go プロジェクト自体と同じ [BSD 3-clause ライセンス](LICENSE)の下で提供されます。 -プロジェクト名の "Iris" はギリシャ神話からインスピレーションを得たものです。 - - +プロジェクト名「Iris」はギリシャ神話に由来します。 diff --git a/README_KO.md b/README_KO.md index 4aff1cd1..759b36c8 100644 --- a/README_KO.md +++ b/README_KO.md @@ -1,24 +1,22 @@ -# Iris Web Framework +

소식

-[![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) [![FOSSA Status](https://img.shields.io/badge/LICENSE%20SCAN-PASSING❤️-CD2956?style=for-the-badge&logo=fossa)](https://app.fossa.io/projects/git%2Bgithub.com%2Fkataras%2Firis?ref=badge_shield) [![view examples](https://img.shields.io/badge/learn%20by-examples-0C8EC5.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=7E18DD&logo=gitter&style=for-the-badge)](https://gitter.im/iris_go/community) +> 🚀 **Iris v14가 곧 나옵니다.** 다음 메이저 버전은 이 프로젝트 역사상 가장 큰 릴리스입니다. Go 제네릭 위에서 다시 만든 프레임워크, 컴파일러가 검사하는 애플리케이션 빌더, 검증까지 대신 해주는 요청 헬퍼, 하나의 중앙 에러 맵, 서른 개의 기본 제공 미들웨어, 그리고 저장소 안에 함께 담긴 책이 포함됩니다. 아래 [Iris v14에서 달라지는 것](#-iris-v14에서-달라지는-것)을 보세요. +> +> 여기서 설명하는 **v12**는 계속 동작하고 계속 수정을 받습니다. v14는 새로운 import 경로로 나오기 때문에, 출시되는 날 여러분 쪽에서 깨지는 것은 없습니다. -Iris는 단순하고 빠르며 좋은 성능과 모든 기능을 갖춘 Go언어용 웹 프레임워크입니다. 당신의 웹사이트나 API를 위해서 아름답고 사용하기 쉬운 기반을 제공합니다. +# Iris Web Framework English العربية -[여러 사람들의 의견](https://iris-go.com/testimonials/)을 둘러보세요. 그리고 이 github repository을 **star**하세요. +[![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) -[![](https://media.giphy.com/media/j5WLmtvwn98VPrm7li/giphy.gif)](https://iris-go.com/testimonials/) +⚡ Iris는 단순하고 빠르며 모든 기능을 갖춘 매우 효율적인 Go 웹 프레임워크입니다. -[![Benchmarks: Apr 2, 2020 at 12:13pm (UTC)](https://iris-go.com/static/images/benchmarks.svg)](https://github.com/kataras/server-benchmarks) +✨ 여러분의 다음 웹사이트나 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/) -```sh -# 다음 코드를 example.go 화일에 입력하세요. -$ cat example.go -``` +[![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 @@ -26,51 +24,604 @@ package main import "github.com/kataras/iris/v12" func main() { - app := iris.Default() - app.Get("/ping", func(ctx iris.Context) { - ctx.JSON(iris.Map{ - "message": "pong", - }) - }) + app := iris.New() + app.Use(iris.Compression) - app.Listen(":8080") + app.Get("/", func(ctx iris.Context) { + ctx.HTML("Hello %s!", "World") + }) + + app.Listen(":8080") } ``` -```sh -# example.go 를 실행하고, -# 웹브라우저에서 http://localhost:8080/ping 를 열어보세요. -$ go run example.go +어느 [Go 개발자](https://twitter.com/dkuye/status/1532087942696554497)가 말했듯이, **Iris는 모든 면에서 당신을 받쳐주고 오랜 세월 굳건히 서 있습니다** ⭐ + +Iris가 제공하는 기능의 일부입니다: + +* HTTP/2 (Push, 임베디드 데이터까지) +* 미들웨어 (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, 압축, 액세스 로깅, 헬스 엔드포인트, 에러 맵, 서비스, 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") ``` -> 라우팅은 Go로 작성한 가장 강력하고 빠른 trie기반의 소프트웨어인 [muxie](https://github.com/kataras/muxie)로 처리합니다. +### 핸들러가 같은 코드를 반복하지 않습니다 + +디코딩, 검증, 에러 렌더링이 핸들러 본문에서 빠져나옵니다. `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`이 미들웨어가 되었습니다. `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`로 나갑니다. 요청 본문 크기 제한이 모든 읽기 경로에서 적용됩니다. 다시 만드는 과정에서 오래된 버그들도 함께 잡혔습니다. 제한을 기록만 하고 한 번도 적용하지 않던 rate limiter와, 프로세스를 통째로 죽일 수 있던 `Logout` 호출이 그중 하나입니다. + +### 처음부터 끝까지 읽을 수 있는 문서 + +v14에는 저장소 안에 담긴 23장짜리 책, 테스트까지 갖춘 REST API를 문서 하나로 만들어보는 시작 튜토리얼, v12 애플리케이션을 위한 마이그레이션 가이드, 그리고 소스에서 생성되어 코드베이스에 대한 질문에 답하는 라이브 AI 위키가 함께합니다. + +### 여러분의 v12 코드에는 어떤 의미인가 + +import 경로가 `github.com/kataras/iris/v14`가 되므로 v12와 v14가 나란히 존재할 수 있고 출시일에 깨지는 것은 없습니다. 편할 때 업그레이드하세요. 마이그레이션 가이드는 import 경로, 패키지 이동, 제거된 모든 API와 그 대체, 동작 변경을 다루며, 기계적인 부분에는 바로 쓸 수 있는 명령을 제공합니다. + +아직 공개된 출시일은 없습니다. [릴리스](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 # windows에서는 -compat="1.23". +$ go run . +```
-Iris는 광범위하고 꼼꼼한 **[wiki](https://www.iris-go.com/#ebookDonateForm)** 를 가지고 있기 때문에 쉽게 프레임워크를 시작할 수 있습니다. +![](https://www.iris-go.com/images/gifs/install-create-iris.gif) -더 자세한 기술문서를 보시려면 [godocs](https://pkg.go.dev/github.com/kataras/iris/v12@v12.2.11)를 방문하세요. 그리고 실행가능한 예제코드는 [\_examples](_examples/) 하위 디렉토리에 있습니다. +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가 만든 크로스 플랫폼 AI 코딩 어시스턴트이며, **Iris 전용 스킬**을 함께 제공합니다. 프레임워크 제작자가 직접 쓴 v14 개발 가이드로, 라우팅과 매크로, 컨텍스트 API, `rest` 헬퍼, 에러 처리, 서른 개의 미들웨어 전부, 기본 제공 컨트롤러, 인증 SDK, 보안 강화, 데이터 영속성, 캐싱, i18n, 관측성, 성능, 테스트, 배포, 그리고 v12에서 v14로의 마이그레이션을 다루는 열아홉 개의 참조 문서가 들어 있습니다. + +**Software Developer** 페르소나를 설치하면 Iris 스킬이 함께 따라오며, 이 페르소나가 활성화하는 엔지니어링 에이전트들과 나란히 놓입니다. 그러면 어시스턴트는 학습 중에 우연히 본 것을 짐작하는 대신, 프레임워크가 의도한 방식 그대로 Iris 코드를 작성합니다. + +### 여행하면서 독서를 즐기시나요? Book cover -[![follow author](https://img.shields.io/twitter/follow/makismaropoulos.svg?style=for-the-badge)](https://twitter.com/intent/follow?screen_name=makismaropoulos) +[![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) -PDF 버전과 **E-Book** 에 대한 온라인 접근을 [요청](https://www.iris-go.com/#ebookDonateForm)하시고 Iris의 개발에 참가하실 수 있습니다. +[![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) -Iris 웹 프레임워크에 대한 여러분의 기여를 환영합니다! Iris 프로젝트에 기여하는 방법에 대한 자세한 내용은 [CONTRIBUTING.md](CONTRIBUTING.md) 파일을 참조하십시오. +**Iris E-Book** (새 판)의 PDF 버전과 온라인 접근을 오늘 [요청](https://www.iris-go.com/#ebookDonateForm)하시고 Iris 개발에 참여하세요. -[기여자 리스트](https://github.com/kataras/iris/graphs/contributors) +## 🙌 기여하기 -## 보안 취약점 +Iris 웹 프레임워크에 대한 여러분의 기여를 환영합니다! Iris 프로젝트에 기여하는 방법에 대한 자세한 내용은 [CONTRIBUTING.md](CONTRIBUTING.md) 파일을 참조하세요. -만약 Iris에서 보안 취약점을 발견하시면 [iris-go@outlook.com](mailto:iris-go@outlook.com) 로 메일을 보내주세요. 모든 보안 취약점은 즉 해결할 것입니다. +[기여자 목록](https://github.com/kataras/iris/graphs/contributors) -## 라이센스 +## 🛡 보안 취약점 -이 프로젝트의 이름 "Iris"는 그리스 신화에서 영감을 받았습니다. +Iris에서 보안 취약점을 발견하시면 [iris-go@outlook.com](mailto:iris-go@outlook.com)으로 메일을 보내주세요. 모든 보안 취약점은 신속히 해결됩니다. -Iris 웹 프레임워크는 [3-Clause BSD License](LICENSE)를 가지는 무료 오픈소스 소프트웨어입니다. +## 📝 라이선스 + +이 프로젝트는 Go 프로젝트와 마찬가지로 [BSD 3-clause 라이선스](LICENSE)를 따릅니다. + +프로젝트 이름 "Iris"는 그리스 신화에서 영감을 받았습니다. diff --git a/README_PT_BR.md b/README_PT_BR.md index bd475b14..b4a815cd 100644 --- a/README_PT_BR.md +++ b/README_PT_BR.md @@ -1,15 +1,22 @@ - +

Novidades

-# Iris Web Framework +> 🚀 **O Iris v14 está a caminho.** A próxima versão principal é o maior lançamento da história do projeto: o framework reconstruído sobre os genéricos do Go, um construtor de aplicação verificado pelo compilador, auxiliares de requisição que validam por você, um mapa central de erros, trinta middlewares incluídos e um livro dentro do próprio repositório. Veja [o que vem no Iris v14](#-o-que-vem-no-iris-v14) mais abaixo. +> +> A versão descrita aqui, a **v12**, continua funcionando e continua recebendo correções. A v14 chega em um novo caminho de importação, então nada do seu lado quebra no dia em que ela sair. -[![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-270-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 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 é um framework web rápido, simples, mas completo e muito eficiente para Go. +⚡ Iris é um framework web rápido, simples, mas completo e muito eficiente para Go. -Ele fornece uma base lindamente expressiva e fácil de usar para seu próximo site ou API. +✨ Ele fornece uma base lindamente expressiva e fácil de usar para seu próximo site ou API. +🌟 Veja o que [outras pessoas dizem sobre o Iris](https://www.iris-go.com/#review) e dê uma **[estrela](https://github.com/kataras/iris/stargazers)** a este projeto de código aberto + +[![](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 @@ -28,197 +35,531 @@ func main() { } ``` - - -Como um [Desenvolvedor Go](https://twitter.com/dkuye/status/1532087942696554497) disse uma vez, **Iris abrangeu tudo e se manteve forte ao longo dos anos**. - -Alguns dos recursos que o Iris Web Framework oferece: - -* HTTP/2 (Push, mesmo para dados incorporados) +* HTTP/2 (Push, inclusive dados embutidos) * Middleware (Accesslog, Basicauth, CORS, gRPC, Anti-Bot hCaptcha, JWT, MethodOverride, ModRevision, Monitor, PPROF, Ratelimit, Anti-Bot reCaptcha, Recovery, RequestID, Rewrite) * Versionamento de API * Model-View-Controller * Websockets * gRPC * Auto-HTTPS -* Suporte integrado para ngrok para colocar seu aplicativo na internet da maneira mais rápida -* Router único com caminho dinâmico como parametro com tipos padrões como :uuid, :string, :int... e a habilidade de criar o seu próprio router +* Suporte nativo ao ngrok, a forma mais rápida de colocar sua aplicação na internet +* Router único com caminhos dinâmicos como parâmetro, com tipos padrão como :uuid, :string, :int... e a possibilidade de criar os seus * Compressão -* View Engines (HTML, Django, Handlebars, Pug/Jade e mais) -* Cria seu próprio Servidor de Arquivo e hospeda seu próprio servidor WebDAV +* Motores de view (HTML, Django, Handlebars, Pug/Jade e mais) +* Crie seu próprio File Server e hospede seu próprio servidor WebDAV * Cache * Localização (i18n, sitemap) * Sessões -* Respostas Ricas (HTML, Text, Markdown, XML, YAML, Binary, JSON, JSONP, Protocol Buffers, MessagePack, Content Negotiation, Streaming, Server-Sent Events e mais) +* Respostas ricas (HTML, Text, Markdown, XML, YAML, Binary, JSON, JSONP, Protocol Buffers, MessagePack, Content Negotiation, Streaming, Server-Sent Events e mais) * Compressão de resposta (gzip, deflate, brotli, snappy, s2) -* Requisições Ricas (Bind URL Query, Headers, Form, Text, XML, YAML, Binary, JSON, Validation, Protocol Buffers, MessagePack e mais) +* Requisições ricas (Bind URL Query, Headers, Form, Text, XML, YAML, Binary, JSON, Validation, Protocol Buffers, MessagePack e mais) * Injeção de dependência (MVC, Handlers, API Routers) -* Suite de testes -* E o mais importante... você obtém respostas rápidas e suporte desde o 1º dia até agora - são seis anos completos! +* Suíte de testes +* E o mais importante... você recebe respostas rápidas e suporte, desde o primeiro dia até hoje -Aprenda com [o que os outros falam sobre Iris](https://www.iris-go.com/#review) e **[marque com uma estrela](https://github.com/kataras/iris/stargazers)** esse projeto de código aberto para apoiar o seu potencial. +## 🚀 O que vem no Iris v14 -[![](https://iris-go.com/static/images/reviews.gif)](https://iris-go.com/testimonials/) +O Iris v14 é o maior lançamento da história do projeto. Ele reconstrói o framework sobre os genéricos do Go e muda a forma como uma aplicação é montada: menos fiação no `main`, handlers mais curtos e um único lugar para as decisões que antes ficavam espalhadas por cada rota. -[![Benchmarks: Jul 18, 2020 at 10:46am (UTC)](https://iris-go.com/static/images/benchmarks.svg)](https://github.com/kataras/server-benchmarks) +Nada disso exige sua atenção hoje. A v12 continua funcionando, continua recebendo correções, e a v14 chega com um guia de migração que cobre cada API renomeada ou removida. + +### A aplicação inteira em uma cadeia verificada pelo compilador + +`iris.NewBuilder` conecta CORS, compressão, log de acesso, o endpoint de saúde, o mapa de erros, seus serviços e seus grupos de API em uma única expressão. O compilador impõe a ordem das etapas, então uma aplicação ou compila corretamente ou não compila de jeito nenhum. + +```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") +``` + +### Os handlers param de se repetir + +Decodificação, validação e renderização de erro saem do corpo do handler. `rest.ReadJSON[T]` decodifica a requisição, executa o método `Validate() error` do seu tipo quando ele existe, e escreve o 400 sozinho. Os auxiliares de resposta escrevem o status de sucesso, ou o que o seu mapa central disser que aquele erro deve retornar. + +```go +func (api *ProductsAPI) create(ctx iris.Context) { + input, ok := rest.ReadJSON[catalog.ProductInput](ctx) + if !ok { + return // 400 já escrito: JSON malformado ou Validate reprovado. + } + + id, err := api.svc.Create(ctx, input) + rest.Created(ctx, id, err) // 201, ou o erro mapeado centralmente. +} +``` + +`rest.OK`, `rest.NoContent`, `rest.Count` e `rest.Paginated` cobrem os demais formatos que uma API devolve. + +### Os erros são declarados uma única vez + +O novo pacote `rest/errors` guarda o mapeamento dos erros do seu domínio para respostas HTTP. Os clientes recebem payloads canônicos e legíveis por máquina. Mensagens internas ficam internas. Registre um coletor e cada falha chega ao seu logger ou ao seu banco de dados a partir de um único lugar. Um erro pode ser renderizado como JSON ou como view, dependendo do que o cliente pediu. + +### Injeção de dependência em todo lugar, não só no MVC + +Os construtores declaram o que precisam e o contêiner fornece: para handlers, para grupos de API, para controladores. Um serviço que implementa `Init(ctx context.Context) error` roda uma vez dentro de `Build()`. Tudo que pode ser fechado é fechado no desligamento. O pacote `hero` acabou, substituído por `dep` e `rest`, que fazem mais com menos linhas. Os controladores MVC são construídos sobre genéricos. + +### Os pacotes estão onde você esperaria + +`sessions`, `cache`, `websocket`, `i18n`, `view` e `versioning` viraram middleware. `mvc` foi para dentro de `controller`, ao lado dos novos controladores `fileserver`, `sitemap` e `apigraph`. O `apigraph` desenha a sua árvore de rotas como um grafo D3 interativo. + +Trinta middlewares vêm de fábrica, incluindo os novos: `httpcost` (tempo, memória e CPU por requisição, para análise de desempenho ou cobrança), `bodylimit`, `compress`, `counter`, `referrer`, `geolocation`, `ipaccess` e `servertiming`. As implementações dos motores de view foram para [iris-contrib/views](https://github.com/iris-contrib/views). + +### A configuração é um literal parcial + +`iris.Configuration` e os configuradores `With*` foram substituídos por `iris.Options`. Defina os campos que importam para você e o resto vem dos padrões. `Bind` carrega YAML da variável de ambiente `SERVER_CONFIG` e depois de um arquivo. + +```go +app := iris.New(iris.Options{Name: "myapp", LogLevel: "debug"}) +``` + +### Nomes que dizem o que fazem + +Ler um cabeçalho de requisição e definir um de resposta não compartilham mais um prefixo que inverte de sentido em silêncio: `ctx.Header` lê a requisição, enquanto `ctx.SetHeader` e `ctx.ResponseHeader` atuam na resposta. `Party` agora é `Router`. `ctx.URLParam` agora é `ctx.Query().Get`. Cada renomeação está no guia de migração junto do seu substituto, e a maioria é um localizar e substituir. + +### Seguro por padrão + +Os cookies de sessão vêm com `Secure` e `SameSite=Lax`. O limite do corpo da requisição é aplicado em todos os caminhos de leitura. Junto com a reconstrução caíram bugs antigos, entre eles um limitador de taxa que registrava os limites sem nunca aplicá-los e uma chamada a `Logout` capaz de derrubar o processo inteiro. + +### Documentação que dá para ler do começo ao fim + +A v14 vem com um livro de 23 capítulos dentro do repositório, um tutorial inicial que constrói uma API REST com testes em um único documento, um guia de migração para aplicações v12, e um wiki de IA ao vivo gerado a partir do código-fonte que responde perguntas sobre a base de código. + +### O que isso significa para o seu código v12 + +O caminho de importação passa a ser `github.com/kataras/iris/v14`, então v12 e v14 podem conviver e nada quebra no dia do lançamento. Atualize quando for conveniente. O guia de migração cobre o caminho de importação, a mudança dos pacotes, cada API removida e seu substituto, e as mudanças de comportamento, com comandos prontos para as partes mecânicas. + +Ainda não há data pública de lançamento. Acompanhe os [releases](https://github.com/kataras/iris/releases) ou siga [@iris_framework](https://twitter.com/iris_framework) para saber primeiro. ## 👑 Apoiadores -Com a sua ajuda, nós podemos melhorar o desenvolvimento web de Código Aberto para todos ! +Com a sua ajuda, podemos melhorar o desenvolvimento web de código aberto para todo mundo! -> [@github](https://github.com/github) agora está patrocinando você por $550,00 uma vez. -> -> Uma nota do seu novo patrocinador: -> -> Para comemorar o Mês do Mantenedor, queremos agradecer por tudo que você faz pela comunidade de código aberto. Confira nossa postagem no blog para saber mais sobre como o GitHub está investindo em mantenedores +

+ 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 +

-> Doações direto da [China](https://github.com/kataras/iris/issues/1870#issuecomment-1101418349) agora são aceitas! - -## 📖 Aprenda sobre o Iris Web Framework +## 📖 Aprendendo Iris ### Instalação -O único requisito é a [Linguagem de programação Go](https://go.dev/dl/). +O único requisito é a [linguagem de programação Go](https://go.dev/dl/). #### Criar um novo projeto @@ -226,20 +567,20 @@ O único requisito é a [Linguagem de programação Go](https://go.dev/dl/). $ mkdir myapp $ cd myapp $ go mod init myapp -$ go get github.com/kataras/iris/v12@latest # or @v12.2.11 +$ go get github.com/kataras/iris/v12@latest # ou @v12.2.11 ``` -
Instalar num projeto existente +
Instalar em um projeto existente ```sh $ cd myapp $ go get github.com/kataras/iris/v12@latest ``` -**Run** +**Executar** ```sh -$ go mod tidy -compat=1.20 # -compat="1.20" for windows. +$ go mod tidy -compat=1.23 # -compat="1.23" no windows. $ go run . ``` @@ -247,17 +588,19 @@ $ go run . ![](https://www.iris-go.com/images/gifs/install-create-iris.gif) -Iris contém extensa e completa **[documentação](https://www.iris-go.com/docs)**, o que torna fácil o começo com o framework. +O Iris tem uma **[documentação](https://www.iris-go.com/docs)** ampla e detalhada que facilita começar com o framework. - +Para uma documentação técnica mais detalhada, visite nossos [godocs](https://pkg.go.dev/github.com/kataras/iris/v12@v12.2.11). E para código executável, você sempre pode visitar o subdiretório [./_examples](_examples) do repositório. - +### Desenvolva com o Plexon AI -Para obter uma documentação técnica mais detalhada, você pode acessar nosso [godocs](https://pkg.go.dev/github.com/kataras/iris/v12@main). E para executar o código você sempre pode visitar os subdiretórios do diretório [./_examples](_examples). +O [Plexon AI](https://plexon.ai) é um assistente de programação com IA multiplataforma da Hellenic Development, e vem com uma **skill dedicada ao Iris**: um guia de desenvolvimento da v14 escrito pelo próprio autor do framework, com dezenove documentos de referência que cobrem roteamento e macros, a API de contexto, os auxiliares `rest`, tratamento de erros, os trinta middlewares, os controladores nativos, o SDK de autenticação, endurecimento de segurança, persistência, cache, i18n, observabilidade, desempenho, testes, implantação e a migração da v12 para a v14. -### Você gosta de ler enquanto viaja ? +Instale a persona **Software Developer** e a skill do Iris vem junto, ao lado dos agentes de engenharia que ela ativa. Aí o seu assistente escreve código Iris do jeito que o framework foi feito para ser usado, em vez de adivinhar pelo que viu durante o treinamento. - Book cover +### Você gosta de ler enquanto viaja? + + Capa do livro [![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) @@ -265,22 +608,20 @@ Para obter uma documentação técnica mais detalhada, você pode acessar nosso [![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) -Você pode [solicitar](https://www.iris-go.com/#ebookDonateForm) o acesso ao **Iris E-Book** de forma online e também no formato PDF (Nova edição, **future v12.2.0+**) hoje today e se antecipar no desenvolvimento do Iris. +Você pode [solicitar](https://www.iris-go.com/#ebookDonateForm) hoje o PDF e o acesso online do **E-Book do Iris** (Nova Edição) e participar do desenvolvimento do Iris. -## 🙌 Contribuidores +## 🙌 Contribuindo -Adoraríamos ver sua contribuição para o Iris Web Framework! Para mais informações sobre como contribuir com o projeto Iris, consulte o arquivo [CONTRIBUTING.md](CONTRIBUTING.md). +Adoraríamos ver sua contribuição ao Iris Web Framework! Para mais informações sobre como contribuir com o projeto Iris, veja o arquivo [CONTRIBUTING.md](CONTRIBUTING.md). -[Lista de todos os Contribuidores](https://github.com/kataras/iris/graphs/contributors) +[Lista de todos os contribuidores](https://github.com/kataras/iris/graphs/contributors) -## 🛡Vulnerabilidades de segurança +## 🛡 Vulnerabilidades de segurança -Se você descobrir alguma vulnerabilidade de segurança dentro do Iris, por favor, envie um email para [iris-go@outlook.com](mailto:iris-go@outlook.com). Todas as vulnerabilidades de segurança serão prontamente tratadas. +Se você descobrir uma vulnerabilidade de segurança no Iris, envie um e-mail para [iris-go@outlook.com](mailto:iris-go@outlook.com). Todas as vulnerabilidades de segurança serão tratadas prontamente. ## 📝 Licença -Este projeto está licenciado sob a [Licença BSD 3-clause](LICENSE), assim como o próprio projeto Go. -O nome do projeto "Iris" foi inspirado pela mitologia Grega. - +O nome do projeto "Iris" foi inspirado na mitologia grega. diff --git a/README_RU.md b/README_RU.md index 59e53da6..916e7448 100644 --- a/README_RU.md +++ b/README_RU.md @@ -1,23 +1,22 @@ -# Iris Web Framework +

Новости

-[![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) [![FOSSA Status](https://img.shields.io/badge/LICENSE%20SCAN-PASSING❤️-CD2956?style=for-the-badge&logo=fossa)](https://app.fossa.io/projects/git%2Bgithub.com%2Fkataras%2Firis?ref=badge_shield) [![view examples](https://img.shields.io/badge/learn%20by-examples-0C8EC5.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=7E18DD&logo=gitter&style=for-the-badge)](https://gitter.im/iris_go/community) -Iris — это быстрый, простой, но полнофункциональный и эффективный веб-фреймворк для Go. Он обеспечивает красивую, выразительную и простую в использовании основу для вашего следующего веб-сайта или API. +> 🚀 **Iris v14 уже в пути.** Следующая мажорная версия — самый крупный релиз за всю историю проекта: фреймворк, перестроенный на дженериках Go, конструктор приложения, который проверяет компилятор, помощники запроса, выполняющие валидацию за вас, единая карта ошибок, тридцать встроенных middleware и книга прямо внутри репозитория. Смотрите [что нас ждёт в Iris v14](#-что-нас-ждёт-в-iris-v14) ниже. +> +> Версия, о которой рассказывает этот файл, **v12**, продолжает работать и получать исправления. v14 выходит на новом пути импорта, поэтому в день релиза у вас ничего не сломается. -Узнайте, что [говорят другие люди об Iris](https://iris-go.com/testimonials/) и поставьте **[звёздочку](https://github.com/kataras/iris/stargazers)** этому проекту с открытым исходным кодом, чтобы поддержать его потенциал. +# Iris Web Framework English العربية -[![](https://media.giphy.com/media/j5WLmtvwn98VPrm7li/giphy.gif)](https://iris-go.com/testimonials/) +[![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) -[![Benchmarks: Apr 2, 2020 at 12:13pm (UTC)](https://iris-go.com/static/images/benchmarks.svg)](https://github.com/kataras/server-benchmarks) +⚡ Iris — это быстрый, простой, но полнофункциональный и очень эффективный веб-фреймворк для Go. -## Изучение Iris +✨ Он даёт выразительную и простую в использовании основу для вашего следующего сайта или API. -
-Быстрый старт +🌟 Узнайте, что [говорят другие об Iris](https://www.iris-go.com/#review), и поставьте **[звёздочку](https://github.com/kataras/iris/stargazers)** этому проекту с открытым исходным кодом -```sh -# например, код в файле example.go будет таким: -$ cat example.go -``` +[![](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 @@ -25,57 +24,604 @@ package main import "github.com/kataras/iris/v12" func main() { - app := iris.Default() - app.Get("/ping", func(ctx iris.Context) { - ctx.JSON(iris.Map{ - "message": "pong", - }) - }) + app := iris.New() + app.Use(iris.Compression) - app.Listen(":8080") + app.Get("/", func(ctx iris.Context) { + ctx.HTML("Hello %s!", "World") + }) + + app.Listen(":8080") } ``` -```sh -# запустите example.go и перейдите в браузер -# по адресу http://localhost:8080/ping -$ go run example.go +Как однажды сказал один [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") ``` -> Система роутинга запросов работает на [muxie](https://github.com/kataras/muxie), мощное и быстрое trie-based ПО, написанное на Go. +### Обработчики перестают повторяться + +Декодирование, валидация и отрисовка ошибок уходят из тела обработчика. `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), чтобы узнать первыми. + +## 👑 Спонсоры + +С вашей помощью мы можем сделать веб-разработку с открытым исходным кодом лучше для всех! + +

+ 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" для windows. +$ go run . +```
-У Iris есть исчерпывающий и тщательный **[wiki](https://www.iris-go.com/#ebookDonateForm)**, который позволит вам быстрее начать работу с фреймворком. +![](https://www.iris-go.com/images/gifs/install-create-iris.gif) - +У Iris есть подробная и тщательная **[документация](https://www.iris-go.com/docs)**, которая позволяет быстро начать работу с фреймворком. -Для получения более подробной технической документации вы можете обратиться к нашему [godoc](https://pkg.go.dev/github.com/kataras/iris/v12@v12.2.11). А для живых примеров кода — вы всегда можете посетить [\_examples](_examples/) в поддиректории этого репозитория. +Более детальную техническую документацию можно найти в наших [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 так, как фреймворк и задуман, а не догадывается по тому, что успел увидеть при обучении. ### Вы любите читать во время путешествий? - 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) -Вы можете [запросить](https://www.iris-go.com/#ebookDonateForm) PDF версию и онлайн-доступ к **E-Book** сегодня и принять участие в разработке Iris. +[![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) -Мы будем рады видеть ваш вклад в веб-фреймворк Iris! Для получения дополнительной информации о содействии проекту Iris, пожалуйста, проверьте файл [CONTRIBUTING.md](CONTRIBUTING.md). +Вы можете [запросить](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). Все уязвимости безопасности будут оперативно устранены. +Если вы обнаружите уязвимость безопасности в Iris, отправьте письмо на [iris-go@outlook.com](mailto:iris-go@outlook.com). Все уязвимости безопасности будут оперативно устранены. -## Лицензия +## 📝 Лицензия + +Проект распространяется под [лицензией BSD 3-clause](LICENSE), как и сам язык Go. Название проекта «Iris» было вдохновлено греческой мифологией. - -Веб-фреймворк Iris — это ПО с открытым исходным кодом под лицензией [3-Clause BSD License](LICENSE). - -## Накопление звёзд со временем - -[![Stargazers over time](https://starchart.cc/kataras/iris.svg)](https://starchart.cc/kataras/iris) diff --git a/README_VN.md b/README_VN.md index f838fbb2..25db09ed 100644 --- a/README_VN.md +++ b/README_VN.md @@ -1,19 +1,18 @@ - +# Iris Web Framework English العربية -# Iris Web Framework +[![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) -[![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 là một khung web nhanh, đơn giản nhưng đầy đủ tính năng và rất hiệu quả dành cho Go. -Iris là một khung web nhanh, đơn giản nhưng đầy đủ tính năng và rất hiệu quả dành cho Go. +✨ Nó cung cấp một nền tảng đẹp mắt, giàu tính biểu đạt và dễ sử dụng cho trang web hoặc API tiếp theo của bạn. -Nó cung cấp một nền tảng đẹp mắt và dễ sử dụng cho trang web hoặc API tiếp theo của bạn. - - -Tìm hiểu xem [những người khác nói gì về Iris](https://www.iris-go.com/#review) và **[gắn sao](https://github.com/kataras/iris/stargazers)** dự án mã nguồn mở này để phát huy tiềm năng của nó. +🌟 Tìm hiểu xem [những người khác nói gì về Iris](https://www.iris-go.com/#review) và **[gắn sao](https://github.com/kataras/iris/stargazers)** cho dự án mã nguồn mở này [![](https://iris-go.com/static/images/reviews.gif)](https://iris-go.com/testimonials/) @@ -29,211 +28,559 @@ func main() { app.Use(iris.Compression) app.Get("/", func(ctx iris.Context) { - ctx.HTML("Xin chào %s!", "Thế Giới") + ctx.HTML("Hello %s!", "World") }) app.Listen(":8080") } ``` - - -Như một [nhà phát triển Go](https://twitter.com/dkuye/status/1532087942696554497) đã từng nói, **Iris giúp bạn bảo vệ toàn diện và đứng vững qua nhiều năm**. - -Một số tính năng Iris cung cấp: - -* HTTP/2 (Push, cả những Embedded data) +* HTTP/2 (Push, kể cả dữ liệu nhúng) * Middleware (Accesslog, Basicauth, CORS, gRPC, Anti-Bot hCaptcha, JWT, MethodOverride, ModRevision, Monitor, PPROF, Ratelimit, Anti-Bot reCaptcha, Recovery, RequestID, Rewrite) -* API Versioning +* Quản lý phiên bản API * Model-View-Controller * Websockets * gRPC * Auto-HTTPS -* Tích hợp hỗ trợ ngrok để đưa ứng dụng của bạn lên internet một cách nhanh nhất -* Unique Router với đường dẫn động làm tham số với các loại tiêu chuẩn như :uuid, :string, :int... và khả năng tạo của riêng bạn -* Compression -* View Engines (HTML, Django, Handlebars, Pug/Jade and more) -* Tạo Máy chủ tệp của riêng bạn và lưu trữ máy chủ WebDAV của riêng bạn +* Hỗ trợ ngrok tích hợp sẵn, cách nhanh nhất để đưa ứng dụng của bạn lên internet +* Router độc đáo với đường dẫn động làm tham số, có sẵn các kiểu chuẩn như :uuid, :string, :int... và cho phép tự tạo kiểu riêng +* Nén +* Các bộ máy view (HTML, Django, Handlebars, Pug/Jade và nhiều hơn nữa) +* Tự tạo File Server của riêng bạn và tự vận hành máy chủ WebDAV * Cache -* Localization (i18n, sitemap) +* Bản địa hóa (i18n, sitemap) * Sessions -* Rich Responses (HTML, Text, Markdown, XML, YAML, Binary, JSON, JSONP, Protocol Buffers, MessagePack, Content Negotiation, Streaming, Server-Sent Events and more) -* Response Compression (gzip, deflate, brotli, snappy, s2) -* Rich Requests (Bind URL Query, Headers, Form, Text, XML, YAML, Binary, JSON, Validation, Protocol Buffers, MessagePack and more) +* Phản hồi phong phú (HTML, Text, Markdown, XML, YAML, Binary, JSON, JSONP, Protocol Buffers, MessagePack, Content Negotiation, Streaming, Server-Sent Events và nhiều hơn nữa) +* Nén phản hồi (gzip, deflate, brotli, snappy, s2) +* Yêu cầu phong phú (Bind URL Query, Headers, Form, Text, XML, YAML, Binary, JSON, Validation, Protocol Buffers, MessagePack và nhiều hơn nữa) * Dependency Injection (MVC, Handlers, API Routers) -* Testing Suite -* Và điều quan trọng nhất... bạn nhận được câu trả lời và hỗ trợ nhanh chóng từ ngày đầu tiên cho đến bây giờ - đó là sáu năm đầy đủ! +* Bộ công cụ kiểm thử +* Và điều quan trọng nhất... bạn nhận được câu trả lời nhanh và sự hỗ trợ, từ ngày đầu tiên cho đến hôm nay -## 👑 Người ủng hộ +## 🚀 Iris v14 mang lại điều gì -Với sự giúp đỡ của bạn, chúng tôi có thể cải thiện việc phát triển web Nguồn mở cho mọi người! +Iris v14 là bản phát hành lớn nhất trong lịch sử dự án. Nó dựng lại khung trên generics của Go và thay đổi cách một ứng dụng được lắp ráp: ít đấu nối trong `main` hơn, handler ngắn hơn, và một nơi duy nhất cho những quyết định trước đây nằm rải rác trên từng route. + +Không điều nào trong số đó cần bạn để tâm hôm nay. v12 vẫn chạy, vẫn nhận bản sửa lỗi, và v14 đến kèm một hướng dẫn chuyển đổi bao quát mọi API bị đổi tên hoặc bị loại bỏ. + +### Toàn bộ ứng dụng trong một chuỗi được trình biên dịch kiểm tra + +`iris.NewBuilder` nối CORS, nén, ghi log truy cập, endpoint kiểm tra sức khỏe, bảng ánh xạ lỗi, các service và các nhóm API của bạn trong một biểu thức duy nhất. Trình biên dịch áp đặt thứ tự các bước, nên một ứng dụng hoặc là build đúng, hoặc là không build được. + +```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") +``` + +### Handler thôi lặp lại chính mình + +Việc giải mã, kiểm tra dữ liệu và kết xuất lỗi rời khỏi thân handler. `rest.ReadJSON[T]` giải mã request, chạy phương thức `Validate() error` của kiểu dữ liệu nếu có, và tự viết ra mã 400. Các hàm hỗ trợ phản hồi viết ra mã trạng thái thành công, hoặc bất cứ thứ gì bảng ánh xạ trung tâm của bạn quy định cho lỗi đó. + +```go +func (api *ProductsAPI) create(ctx iris.Context) { + input, ok := rest.ReadJSON[catalog.ProductInput](ctx) + if !ok { + return // 400 đã được viết: JSON sai định dạng hoặc Validate thất bại. + } + + id, err := api.svc.Create(ctx, input) + rest.Created(ctx, id, err) // 201, hoặc lỗi đã được ánh xạ tập trung. +} +``` + +`rest.OK`, `rest.NoContent`, `rest.Count` và `rest.Paginated` bao phủ những dạng phản hồi còn lại của một API. + +### Lỗi chỉ khai báo một lần + +Gói `rest/errors` mới giữ ánh xạ từ các lỗi nghiệp vụ của bạn sang phản hồi HTTP. Client nhận được payload chuẩn hóa, máy đọc được. Thông điệp nội bộ ở lại bên trong. Đăng ký một collector và mọi thất bại đều đến logger hoặc cơ sở dữ liệu của bạn từ một chỗ duy nhất. Một lỗi có thể được kết xuất dưới dạng JSON hoặc dưới dạng view, tùy vào thứ client yêu cầu. + +### Dependency injection ở khắp nơi, không chỉ trong MVC + +Các constructor khai báo thứ chúng cần và container cung cấp: cho handler, cho nhóm API, cho controller. Một service hiện thực `Init(ctx context.Context) error` sẽ chạy một lần bên trong `Build()`. Mọi thứ có thể đóng đều được đóng khi tắt máy chủ. Gói `hero` biến mất, thay bằng `dep` và `rest`, làm được nhiều hơn với ít dòng hơn. Controller MVC được xây trên generics. + +### Các gói nằm đúng chỗ bạn nghĩ + +`sessions`, `cache`, `websocket`, `i18n`, `view` và `versioning` đã trở thành middleware. `mvc` chuyển xuống dưới `controller`, bên cạnh các controller mới `fileserver`, `sitemap` và `apigraph`. `apigraph` vẽ cây route của bạn thành một đồ thị D3 tương tác. + +Ba mươi middleware có sẵn trong hộp, trong đó có những cái mới: `httpcost` (thời gian, bộ nhớ và CPU cho mỗi request, phục vụ phân tích hiệu năng hoặc tính phí), `bodylimit`, `compress`, `counter`, `referrer`, `geolocation`, `ipaccess` và `servertiming`. Phần hiện thực các bộ máy view đã chuyển sang [iris-contrib/views](https://github.com/iris-contrib/views). + +### Cấu hình là một literal từng phần + +`iris.Configuration` và các bộ cấu hình `With*` được thay bằng `iris.Options`. Đặt những trường bạn quan tâm, phần còn lại lấy từ giá trị mặc định. `Bind` nạp YAML từ biến môi trường `SERVER_CONFIG` trước, rồi mới từ tệp. + +```go +app := iris.New(iris.Options{Name: "myapp", LogLevel: "debug"}) +``` + +### Những cái tên nói đúng việc chúng làm + +Đọc header của request và đặt header cho response không còn dùng chung một tiền tố lặng lẽ đổi nghĩa: `ctx.Header` đọc request, còn `ctx.SetHeader` và `ctx.ResponseHeader` làm việc trên response. `Party` nay là `Router`. `ctx.URLParam` nay là `ctx.Query().Get`. Mọi thay đổi tên đều được liệt kê trong hướng dẫn chuyển đổi kèm thứ thay thế, và phần lớn chỉ cần một lần tìm và thay. + +### An toàn theo mặc định + +Cookie phiên đi kèm `Secure` và `SameSite=Lax`. Giới hạn kích thước thân request được áp dụng trên mọi đường đọc dữ liệu. Cùng với lần dựng lại này, nhiều lỗi tồn tại lâu năm đã được xử lý, trong đó có một bộ giới hạn tần suất chỉ ghi nhận giới hạn mà chưa bao giờ thực thi, và một lệnh gọi `Logout` có thể kéo sập cả tiến trình. + +### Tài liệu đọc được từ đầu đến cuối + +v14 đi kèm một cuốn sách 23 chương nằm trong kho mã nguồn, một hướng dẫn nhập môn dựng nên một REST API có kiểm thử chỉ trong một tài liệu, một hướng dẫn chuyển đổi cho ứng dụng v12, và một wiki AI trực tiếp được sinh ra từ mã nguồn, trả lời các câu hỏi về codebase. + +### Điều này có nghĩa gì với mã v12 của bạn + +Đường dẫn import trở thành `github.com/kataras/iris/v14`, nên v12 và v14 có thể tồn tại song song và không có gì hỏng vào ngày phát hành. Nâng cấp khi nào bạn thấy tiện. Hướng dẫn chuyển đổi bao quát đường dẫn import, việc di chuyển các gói, từng API bị loại bỏ và thứ thay thế nó, cùng những thay đổi về hành vi, kèm các lệnh dùng ngay cho phần máy móc. + +Chưa có ngày phát hành công khai. Hãy theo dõi [releases](https://github.com/kataras/iris/releases) hoặc [@iris_framework](https://twitter.com/iris_framework) để biết tin sớm nhất. + +## 👑 Nhà tài trợ + +Với sự giúp đỡ của các bạn, chúng tôi có thể làm cho việc phát triển web mã nguồn mở tốt hơn cho tất cả mọi người! + +

+ 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 +

## 📖 Học Iris ### Cài đặt -Yêu cầu duy nhất là [Ngôn ngữ lập trình Go](https://go.dev/dl/). +Yêu cầu duy nhất là [ngôn ngữ lập trình Go](https://go.dev/dl/). -#### Tạo một dự án mới +#### Tạo dự án mới ```sh $ mkdir myapp $ cd myapp $ go mod init myapp -$ go get github.com/kataras/iris/v12@latest # or @v12.2.11 +$ go get github.com/kataras/iris/v12@latest # hoặc @v12.2.11 ``` -
Cài đặt trên dự án hiện có +
Cài vào dự án sẵn có ```sh $ cd myapp $ go get github.com/kataras/iris/v12@latest ``` -**Run** +**Chạy** ```sh -$ go mod tidy -compat=1.20 # -compat="1.20" for windows. +$ go mod tidy -compat=1.23 # dùng -compat="1.23" trên windows. $ go run . ``` @@ -241,15 +588,17 @@ $ go run . ![](https://www.iris-go.com/images/gifs/install-create-iris.gif) -Iris chứa **[tài liệu](https://www.iris-go.com/docs)** phong phú và kỹ lưỡng giúp bạn dễ dàng bắt đầu với khung. +Iris có **[tài liệu](https://www.iris-go.com/docs)** đầy đủ và kỹ lưỡng, giúp bạn bắt đầu với khung này một cách dễ dàng. - +Để xem tài liệu kỹ thuật chi tiết hơn, bạn có thể ghé [godocs](https://pkg.go.dev/github.com/kataras/iris/v12@v12.2.11). Còn mã chạy được thì luôn nằm trong thư mục con [./_examples](_examples) của kho mã nguồn. - +### Phát triển cùng Plexon AI -Để có tài liệu kỹ thuật chi tiết hơn, bạn có thể truy cập [godocs](https://pkg.go.dev/github.com/kataras/iris/v12@main) của chúng tôi. Và đối với mã thực thi, bạn luôn có thể truy cập thư mục con của kho lưu trữ [./_examples](_examples). +[Plexon AI](https://plexon.ai) là trợ lý lập trình AI đa nền tảng của Hellenic Development, và nó đi kèm một **skill dành riêng cho Iris**: hướng dẫn phát triển v14 do chính tác giả của khung viết, với mười chín tài liệu tham chiếu bao quát định tuyến và macro, context API, các hàm hỗ trợ `rest`, xử lý lỗi, toàn bộ ba mươi middleware, các controller có sẵn, SDK xác thực, gia cố bảo mật, lưu trữ dữ liệu, cache, i18n, khả năng quan sát, hiệu năng, kiểm thử, triển khai, và việc chuyển từ v12 sang v14. -### Bạn có thích đọc khi đi du lịch không? +Cài persona **Software Developer** thì skill Iris đi kèm theo, bên cạnh các agent kỹ thuật mà persona đó kích hoạt. Từ đó trợ lý của bạn viết mã Iris đúng như cách khung được thiết kế để dùng, thay vì đoán theo những gì nó tình cờ thấy trong quá trình huấn luyện. + +### Bạn thích đọc sách khi đi du lịch? Book cover @@ -259,23 +608,20 @@ Iris chứa **[tài liệu](https://www.iris-go.com/docs)** phong phú và kỹ [![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) -Bạn có thể [yêu cầu](https://www.iris-go.com/#ebookDonateForm) PDF và truy cập trực tuyến **Sách điện tử Iris** (Phiên bản mới, **tương lai v12.2.0+**) hôm nay và được tham gia vào sự phát triển của Iris. +Bạn có thể [yêu cầu](https://www.iris-go.com/#ebookDonateForm) bản PDF và quyền truy cập trực tuyến của **Iris E-Book** (Ấn bản mới) ngay hôm nay và cùng tham gia vào việc phát triển Iris. ## 🙌 Đóng góp -Chúng tôi muốn thấy sự đóng góp của bạn cho Iris Web Framework! Để biết thêm thông tin về việc đóng góp cho dự án Iris, vui lòng kiểm tra tệp [CONTRIBUTING.md](CONTRIBUTING.md). +Chúng tôi rất mong được thấy đóng góp của bạn cho Iris Web Framework! Để biết thêm thông tin về việc đóng góp cho dự án Iris, vui lòng xem tệp [CONTRIBUTING.md](CONTRIBUTING.md). -[Danh sách những người đóng góp](https://github.com/kataras/iris/graphs/contributors) +[Danh sách tất cả những người đóng góp](https://github.com/kataras/iris/graphs/contributors) ## 🛡 Lỗ hổng bảo mật -Nếu bạn phát hiện ra lỗ hổng bảo mật trong Iris, vui lòng gửi e-mail tới [iris-go@outlook.com](mailto:iris-go@outlook.com). Tất cả các lỗ hổng bảo mật sẽ được giải quyết kịp thời. +Nếu bạn phát hiện lỗ hổng bảo mật trong Iris, vui lòng gửi email tới [iris-go@outlook.com](mailto:iris-go@outlook.com). Mọi lỗ hổng bảo mật sẽ được xử lý kịp thời. ## 📝 Giấy phép -Dự án này được cấp phép theo [BSD 3-clause license](LICENSE), giống như chính dự án Go. +Dự án này được cấp phép theo [giấy phép BSD 3-clause](LICENSE), giống như chính dự án Go. Tên dự án "Iris" được lấy cảm hứng từ thần thoại Hy Lạp. - diff --git a/README_ZH.md b/README_ZH.md index 3ef26b4e..9594b6d0 100644 --- a/README_ZH.md +++ b/README_ZH.md @@ -1,5 +1,13 @@ -# Iris Web Framework +

新闻

- [Traditional Chinese (zht / zh-Hant)](README_ZH_HANT.md) +> 🚀 **Iris v14 即将到来。** 下一个大版本是本项目历史上最大的一次发布:基于 Go 泛型重建的框架、由编译器检查的应用构建器、替你完成校验的请求辅助函数、统一的错误映射表、三十个内置中间件,以及随仓库一同发布的一本书。详情请见下方任一中文版本中的「Iris v14 带来了什么」。 +> +> 现在的 **v12** 仍然可用,也仍在持续修复。v14 使用新的 import 路径,所以它发布的那天,你这边不会有任何东西被破坏。 - [Simplified Chinese (zhs / zh-Hans)](README_ZH_HANS.md) +# Iris Web Framework English العربية + +请选择中文版本: + + [繁體中文 Traditional Chinese (zht / zh-Hant)](README_ZH_HANT.md) + + [简体中文 Simplified Chinese (zhs / zh-Hans)](README_ZH_HANS.md) diff --git a/README_ZH_HANS.md b/README_ZH_HANS.md index 135eebf9..5cf0bfcc 100644 --- a/README_ZH_HANS.md +++ b/README_ZH_HANS.md @@ -1,216 +1,627 @@ -[![黑人的命也是命](https://iris-go.com/static/images/blacklivesmatter_banner.png)](https://support.eji.org/give/153413/#!/donation/checkout) +

新闻

- - -> 这是一个**开发中的版本**。敬请关注即将发布的版本 [v12.2.0](HISTORY.md#Next)。如果想使用稳定版本,请查看 [v12.1.8 分支](https://github.com/kataras/iris/tree/v12.1.8) 。 +> 🚀 **Iris v14 即将到来。** 下一个大版本是本项目历史上最大的一次发布:基于 Go 泛型重建的框架、由编译器检查的应用构建器、替你完成校验的请求辅助函数、统一的错误映射表、三十个内置中间件,以及随仓库一同发布的一本书。详情见下方的 [Iris v14 带来了什么](#-iris-v14-带来了什么)。 > -> ![](https://iris-go.com/static/images/cli.png) 立即尝试官方的[Iris命令行工具](https://github.com/kataras/iris-cli)! +> 这里介绍的 **v12** 仍然可用,也仍在持续修复。v14 使用新的 import 路径,所以它发布的那天,你这边不会有任何东西被破坏。 - +# Iris Web Framework English العربية -# Iris Web Framework +[![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) -[![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-253-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 编写的一个快速、简单但功能齐全且非常高效的 Web 框架。 - +✨ 它为您的下一个网站或 API 提供了非常富有表现力且易于使用的基础。 -Iris 是基于 Go 编写的一个快速,简单但功能齐全且非常高效的 Web 框架。 - -它为您的下一个网站或 API 提供了一个非常富有表现力且易于使用的基础。 - -看看 [其他人如何评价 Iris](https://iris-go.com/testimonials/),同时欢迎各位为此开源项目点亮 **[star](https://github.com/kataras/iris/stargazers)**。 +🌟 看看[其他人如何评价 Iris](https://www.iris-go.com/#review),同时欢迎为此开源项目点亮 **[star](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) -## 📖 开始学习 Iris - -```sh -# 安装Iris:https://www.iris-go.com/#ebookDonateForm -$ go get github.com/kataras/iris/v12@latest -# 假设main.go文件中已存在以下代码 -$ cat main.go -``` - ```go package main import "github.com/kataras/iris/v12" func main() { - app := iris.New() + app := iris.New() + app.Use(iris.Compression) - booksAPI := app.Party("/books") - { - booksAPI.Use(iris.Compression) + app.Get("/", func(ctx iris.Context) { + ctx.HTML("Hello %s!", "World") + }) - // GET: http://localhost:8080/books - booksAPI.Get("/", list) - // POST: http://localhost:8080/books - booksAPI.Post("/", create) - } - - app.Listen(":8080") -} - -// Book example. -type Book struct { - Title string `json:"title"` -} - -func list(ctx iris.Context) { - books := []Book{ - {"Mastering Concurrency in Go"}, - {"Go Design Patterns"}, - {"Black Hat Go"}, - } - - ctx.JSON(books) - // 提示: 在服务器优先级和客户端请求中进行响应协商, - // 以此来代替 ctx.JSON: - // ctx.Negotiation().JSON().MsgPack().Protobuf() - // ctx.Negotiate(books) -} - -func create(ctx iris.Context) { - var b Book - err := ctx.ReadJSON(&b) - // 提示: 使用 ctx.ReadBody(&b) 代替,来绑定所有类型的入参 - if err != nil { - ctx.StopWithProblem(iris.StatusBadRequest, iris.NewProblem(). - Title("Book creation failure").DetailErr(err)) - // 提示: 如果仅有纯文本(plain text)错误响应, - // 可使用 ctx.StopWithError(code, err) - return - } - - println("Received Book: " + b.Title) - - ctx.StatusCode(iris.StatusCreated) + app.Listen(":8080") } ``` -同样地,在**MVC**中 : +正如一位 [Go 开发者](https://twitter.com/dkuye/status/1532087942696554497)所说,**Iris 面面俱到,多年来始终坚挺** ⭐ + +Iris 提供的部分功能: + +* 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、内容协商、流式传输、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 带来了什么 + +Iris v14 是本项目历史上最大的一次发布。它把框架重建在 Go 泛型之上,也改变了一个应用的组装方式:`main` 里的接线更少,处理函数更短,那些以前散落在每条路由上的决定,现在只在一个地方做。 + +这些今天都不需要你操心。v12 继续可用,继续收到修复,而 v14 会带着一份覆盖每个重命名和移除 API 的迁移指南一起到来。 + +### 整个应用写在一条由编译器检查的链里 + +`iris.NewBuilder` 用一个表达式把 CORS、压缩、访问日志、健康检查端点、错误映射表、你的服务和 API 分组连接起来。步骤顺序由编译器强制,所以应用要么正确构建,要么根本编译不过。 ```go -import "github.com/kataras/iris/v12/mvc" +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 -m := mvc.New(booksAPI) -m.Handle(new(BookController)) +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,也可以渲染为视图,取决于客户端想要什么。 + +### 依赖注入无处不在,不再只属于 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 -type BookController struct { - /* dependencies */ -} - -// GET: http://localhost:8080/books -func (c *BookController) Get() []Book { - return []Book{ - {"Mastering Concurrency in Go"}, - {"Go Design Patterns"}, - {"Black Hat Go"}, - } -} - -// POST: http://localhost:8080/books -func (c *BookController) Post(b Book) int { - println("Received Book: " + b.Title) - - return iris.StatusCreated -} +app := iris.New(iris.Options{Name: "myapp", LogLevel: "debug"}) ``` -**启动** 您的 Iris web 服务: +### 名字如实说明它在做什么 + +读请求头和设置响应头不再共用一个会悄悄改变含义的前缀:`ctx.Header` 读取请求,而 `ctx.SetHeader` 和 `ctx.ResponseHeader` 作用于响应。`Party` 现在叫 `Router`。`ctx.URLParam` 现在是 `ctx.Query().Get`。每一处重命名都连同替代写法列在迁移指南里,其中大多数只需一次查找替换。 + +### 默认就是安全的 + +会话 cookie 默认带上 `Secure` 和 `SameSite=Lax`。请求体大小限制在所有读取路径上都会生效。重建的过程中也顺手解决了一批老问题,其中包括一个只记录限制却从不真正执行的限流器,以及一次可能把整个进程带走的 `Logout` 调用。 + +### 可以从头读到尾的文档 + +v14 附带一本收录在仓库里的 23 章图书、一份用单篇文档写出带测试的 REST API 的入门教程、一份面向 v12 应用的迁移指南,以及一个由源码生成、可以回答代码库问题的实时 AI wiki。 + +### 这对你的 v12 代码意味着什么 + +import 路径变为 `github.com/kataras/iris/v14`,因此 v12 和 v14 可以并存,发布当天不会有任何东西被破坏。什么时候升级由你决定。迁移指南覆盖 import 路径、包的移动、每一个被移除的 API 及其替代品,以及行为上的变化,机械的部分还给出了可直接执行的命令。 + +目前还没有公开的发布日期。关注 [releases](https://github.com/kataras/iris/releases) 或者 [@iris_framework](https://twitter.com/iris_framework),第一时间收到消息。 + +## 👑 赞助者 + +有了你们的帮助,我们可以让开源 Web 开发对所有人都更好! + +

+ 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 -$ go run main.go -> Now listening on: http://localhost:8080 -> Application started. Press CTRL+C to shut down. +$ mkdir myapp +$ cd myapp +$ go mod init myapp +$ go get github.com/kataras/iris/v12@latest # 或 @v12.2.11 ``` -Books **列表查询** : +
在已有项目中安装 ```sh -$ curl --header 'Accept-Encoding:gzip' http://localhost:8080/books - -[ - { - "title": "Mastering Concurrency in Go" - }, - { - "title": "Go Design Patterns" - }, - { - "title": "Black Hat Go" - } -] +$ cd myapp +$ go get github.com/kataras/iris/v12@latest ``` -**创建** 新的Book: +**运行** ```sh -$ curl -i -X POST \ ---header 'Content-Encoding:gzip' \ ---header 'Content-Type:application/json' \ ---data "{\"title\":\"Writing An Interpreter In Go\"}" \ -http://localhost:8080/books - -> HTTP/1.1 201 Created -``` - -这是**错误**响应所展示的样子: - -```sh -$ curl -X POST --data "{\"title\" \"not valid one\"}" \ -http://localhost:8080/books - -> HTTP/1.1 400 Bad Request - -{ - "status": 400, - "title": "Book creation failure" - "detail": "invalid character '\"' after object key", -} +$ go mod tidy -compat=1.23 # windows 下用 -compat="1.23"。 +$ go run . ```
-[![run in the browser](https://img.shields.io/badge/Run-in%20the%20Browser-348798.svg?style=for-the-badge&logo=repl.it)](https://replit.com/@kataras/Iris-Hello-World-v1220?v=1) +![](https://www.iris-go.com/images/gifs/install-create-iris.gif) -Iris 有完整且详尽的 **[使用文档](https://www.iris-go.com/#ebookDonateForm)** ,让您可以轻松地使用此框架。 +Iris 有完整且详尽的 **[使用文档](https://www.iris-go.com/docs)**,让您可以轻松地上手此框架。 - +要了解更详细的技术文档,请访问我们的 [godocs](https://pkg.go.dev/github.com/kataras/iris/v12@v12.2.11)。如果想要寻找可运行的示例代码,可以到仓库的 [./_examples](_examples) 子目录下获取。 -要了解更详细的技术文档,请访问我们的 [godocs](https://pkg.go.dev/github.com/kataras/iris/v12@main)。如果想要寻找代码示例,您可以到仓库的 [./_examples](_examples) 子目录下获取。 +### 用 Plexon AI 开发 + +[Plexon AI](https://plexon.ai) 是 Hellenic Development 推出的跨平台 AI 编程助手,它内置了一个专门的 **Iris 技能(skill)**:一份由框架作者亲自撰写的 v14 开发指南,包含十九篇参考文档,覆盖路由与宏、context API、`rest` 辅助函数、错误处理、全部三十个中间件、内置控制器、认证 SDK、安全加固、数据持久化、缓存、i18n、可观测性、性能、测试、部署,以及从 v12 到 v14 的迁移。 + +安装 **Software Developer** 人格(persona),Iris 技能会随之而来,与它启用的一批工程类 agent 并列。这样一来,助手写出的 Iris 代码就是框架本该被使用的样子,而不是靠训练时见过的零碎印象去猜。 ### 你喜欢在旅行时阅读吗? Book cover -[![follow Iris web framework on twitter](https://img.shields.io/twitter/follow/iris_framework?color=ee7506&logoColor=ee7506&style=for-the-badge)](https://twitter.com/intent/follow?screen_name=iris_framework) +[![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) -您可以[获取](https://www.iris-go.com/#ebookDonateForm)PDF版本或在线访问**电子图书**,并参与到Iris的开发中。 +[![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) **Iris 电子书**(新版)的 PDF 版本和在线访问权限,并参与到 Iris 的开发中。 ## 🙌 贡献 -我们欢迎您为Iris框架做出贡献!想要知道如何为Iris项目做贡献,请查看[CONTRIBUTING.md](CONTRIBUTING.md)。 +我们欢迎您为 Iris 框架做出贡献!想要知道如何为 Iris 项目做贡献,请查看 [CONTRIBUTING.md](CONTRIBUTING.md)。 [贡献者名单](https://github.com/kataras/iris/graphs/contributors) ## 🛡 安全漏洞 -如果您发现在 Iris 存在安全漏洞,请发送电子邮件至 [iris-go@outlook.com](mailto:iris-go@outlook.com)。所有安全漏洞将会得到及时解决。 +如果您在 Iris 中发现安全漏洞,请发送电子邮件至 [iris-go@outlook.com](mailto:iris-go@outlook.com)。所有安全漏洞将会得到及时解决。 ## 📝 开源协议(License) -就像Go语言的协议一样,此项目也采用 [BSD 3-clause license](LICENSE)。 +就像 Go 语言本身一样,此项目也采用 [BSD 3-clause license](LICENSE)。 项目名称 "Iris" 的灵感来自于希腊神话。 - - diff --git a/README_ZH_HANT.md b/README_ZH_HANT.md index f857f550..a02f727b 100644 --- a/README_ZH_HANT.md +++ b/README_ZH_HANT.md @@ -1,26 +1,22 @@ - +# Iris Web 框架 English العربية - +[![組建狀態](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) [![查看範例](https://img.shields.io/badge/examples%20-285-a83adf.svg?style=for-the-badge&logo=go)](https://github.com/kataras/iris/tree/main/_examples) [![聊天室](https://img.shields.io/gitter/room/iris_go/community.svg?color=cc2b5e&logo=gitter&style=for-the-badge)](https://gitter.im/iris_go/community) [![捐助](https://img.shields.io/badge/support-Iris-blue.svg?style=for-the-badge&logo=paypal)](https://iris-go.com/donate) -# Iris Web 框架 +⚡ Iris 是款不僅迅速、簡捷,並且功能完善、高效率的 Go 語言 Web 框架。 -[![組建狀態](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) [![查看範例](https://img.shields.io/badge/examples%20-285-a83adf.svg?style=for-the-badge&logo=go)](https://github.com/kataras/iris/tree/main/_examples) [![聊天室](https://img.shields.io/gitter/room/iris_go/community.svg?color=cc2b5e&logo=gitter&style=for-the-badge)](https://gitter.im/iris_go/community) [![捐助](https://img.shields.io/badge/support-Iris-blue.svg?style=for-the-badge&logo=paypal)](https://iris-go.com/donate) +✨ 它能為你的下一個網站或 API,立下漂亮、富有表達性,且易於使用的基礎。 - +🌟 看看[其他人怎麼評價 Iris](https://www.iris-go.com/#review),也歡迎為這個開源專案點一顆 **[星星](https://github.com/kataras/iris/stargazers)** -Iris 是款不僅迅速、簡捷,並且功能完善、高效率的 Go 語言 Web 框架。**與 Go 生態系統中其它人提供的免費軟體套件不同,這個軟體保證終身主動維護。** +[![](https://iris-go.com/static/images/reviews.gif)](https://iris-go.com/testimonials/) -> 想要取得接下來 **v12.2.0** 穩定版本(正在逐步推進 (2023🎅))的新消息,請收藏 🌟 並關注 👀 這個儲存庫! - -Iris 能為你的下一個網站或 API,立下漂亮、富有表達性,且易於使用的基礎。 +[![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 @@ -39,197 +35,531 @@ func main() { } ``` - +新的 `rest/errors` 套件保存著從你的領域錯誤到 HTTP 回應的對應關係。用戶端拿到的是規範、機器可讀的內容。內部訊息留在內部。註冊一個 collector,每一次失敗都會從同一個地方進到你的記錄器或資料庫。錯誤可以輸出成 JSON,也可以輸出成畫面,端看用戶端要的是什麼。 -據一位 [Go 開發者](https://twitter.com/dkuye/status/1532087942696554497) 所言,**Iris 能向您提供全方位的服務,並地位多年來屹立不搖**。 +### 相依性注入無所不在,不再只屬於 MVC -Iris 提供了至少這些功能: +建構函式宣告自己需要什麼,容器負責提供:處理函式、API 群組、控制器都一樣。實作 `Init(ctx context.Context) error` 的服務會在 `Build()` 裡執行一次。可關閉的資源會在關機時關閉。`hero` 套件走入歷史,由 `dep` 與 `rest` 接手,用更少的程式碼做更多事。MVC 控制器建立在泛型之上。 -- HTTP/2 (Push, 甚至是 Embedded 資料) -- 中介模組(存取日誌、基礎認證、CORS、gRPC、防機器人 hCaptcha、JWT、方法覆寫、模組版本顯示、監控、PPROF、速率限制、防機器人 reCaptcha、panic 救援、請求識別碼、重寫請求) -- API 分版 (versioning) -- MVC (Model-View-Controller) 模式 -- Websocket -- gRPC -- 自動啟用 HTTPS -- 內建 ngrok 支援,讓您可以把 app 以最快速的方式推上網際網路 -- 包含動態路徑、具唯一性的路由,支援如 :uuid、:string、:int 等等的標準類型,並且可以自己建立 -- 壓縮功能 -- 檢視 (View) 算繪引擎 (HTML、Django、Handlebars、Pug/Jade 等等) -- 建立自己的檔案伺服器,並寄存您自己的 WebDAV 伺服器 -- 快取 -- 本地化 (i18n、sitemap) -- 連線階段管理 -- 豐富的回應格式(HTML、純文字、Markdown、XML、YAML、二進位、JSON、JSONP、Protocol Buffers、MessagePack、(HTTP) 內容協商、串流、Server-Sent Events 等) -- 回應壓縮功能(gzip、deflate、brotli、snappy、s2) -- 豐富的請求方式(綁定 URL 查詢、標頭、文字、XML、YAML、二進位、JSON、資料驗證、Protocol Buffers、MessagePack 等) -- 依賴注入(MVC、處理常式 (handler)、API 路由) -- 測試套件 -- 最重要的是…… 從發行第一天到現在(已經整整六年),解答與支援一直都十分迅速! +### 套件都在你以為它該在的位置 -看看別人 [是如何評價 Iris 的](https://www.iris-go.com/#review),並且 **[給這個開放原始碼專案一顆小星星](https://github.com/kataras/iris/stargazers)**,支持專案的潛力。 +`sessions`、`cache`、`websocket`、`i18n`、`view` 與 `versioning` 都成了中介軟體。`mvc` 搬到 `controller` 底下,和新的 `fileserver`、`sitemap`、`apigraph` 控制器並列。`apigraph` 會把你的路由樹畫成可互動的 D3 圖。 -[![](https://iris-go.com/static/images/reviews.gif)](https://iris-go.com/testimonials/) +框架內建三十個中介軟體,其中包含這些新成員:`httpcost`(每個請求的時間、記憶體與 CPU,可用於效能分析或計費)、`bodylimit`、`compress`、`counter`、`referrer`、`geolocation`、`ipaccess` 與 `servertiming`。樣板引擎的實作搬到了 [iris-contrib/views](https://github.com/iris-contrib/views)。 -[![Benchmarks: Jul 18, 2020 at 10:46am (UTC)](https://iris-go.com/static/images/benchmarks.svg)](https://github.com/kataras/server-benchmarks) +### 設定是一個部分字面值 -## 👑 支援者 +`iris.Configuration` 與那些 `With*` 設定器由 `iris.Options` 取代。只寫你在意的欄位,其餘的從預設值來。`Bind` 會先從 `SERVER_CONFIG` 環境變數讀取 YAML,接著才從檔案讀取。 -你的一臂之力,能夠為大家帶來更好的開放原始碼 Web 開發體驗! +```go +app := iris.New(iris.Options{Name: "myapp", LogLevel: "debug"}) +``` -> [@github](https://github.com/github) is now sponsoring you for $550.00 one time. -> -> A note from your new sponsor: -> -> To celebrate Maintainer Month we want to thank you for all you do for the open source community. Check out our blog post to learn more about how GitHub is investing in maintainers. https://github.blog/2022-06-24-thank-you-to-our-maintainers/ +### 名稱如實說明它在做什麼 -> 現已支援來自 [中國](https://github.com/kataras/iris/issues/1870#issuecomment-1101418349) 的捐款! +讀取請求標頭與設定回應標頭,不再共用一個會悄悄改變意思的前綴:`ctx.Header` 讀請求,而 `ctx.SetHeader` 與 `ctx.ResponseHeader` 作用在回應上。`Party` 現在叫 `Router`。`ctx.URLParam` 現在是 `ctx.Query().Get`。每一處更名都連同替代寫法列在移轉指南裡,而且大多數只需要一次搜尋取代。 + +### 預設就是安全的 + +Session cookie 預設帶著 `Secure` 與 `SameSite=Lax`。請求本體的大小限制會在所有讀取路徑上生效。重建的過程也順手解決了一批陳年問題,其中包括一個只記錄限制卻從未真正執行的流量限制器,以及一次可能把整個行程帶走的 `Logout` 呼叫。 + +### 可以從頭讀到尾的文件 + +v14 附上一本收錄在儲存庫裡的 23 章書、一份用單篇文件寫出附測試的 REST API 的入門教學、一份給 v12 應用程式的移轉指南,以及一個由原始碼生成、能回答程式碼庫問題的即時 AI wiki。 + +### 這對你的 v12 程式碼意味著什麼 + +import 路徑變成 `github.com/kataras/iris/v14`,因此 v12 與 v14 可以並存,發行當天不會有東西壞掉。什麼時候升級由你決定。移轉指南涵蓋 import 路徑、套件的搬移、每一個被移除的 API 及其替代品,以及行為上的變化,機械性的部分還附上可直接執行的指令。 + +目前還沒有公開的發行日期。追蹤 [releases](https://github.com/kataras/iris/releases) 或關注 [@iris_framework](https://twitter.com/iris_framework),第一時間收到消息。 + +## 👑 贊助者 + +有了你們的幫助,我們能讓開源的 Web 開發對所有人都更好! + +

+ 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/) 即可。 +唯一的要求是 [Go 程式語言](https://go.dev/dl/)。 #### 建立新專案 @@ -240,7 +570,7 @@ $ go mod init myapp $ go get github.com/kataras/iris/v12@latest # 或 @v12.2.11 ``` -
在現有專案安裝 +
在既有專案中安裝 ```sh $ cd myapp @@ -250,7 +580,7 @@ $ go get github.com/kataras/iris/v12@latest **執行** ```sh -$ go mod tidy -compat=1.20 # Windows 的話,請試試 -compat="1.20" +$ go mod tidy -compat=1.23 # windows 請用 -compat="1.23"。 $ go run . ``` @@ -258,42 +588,40 @@ $ go run . ![](https://www.iris-go.com/images/gifs/install-create-iris.gif) -Iris 包含極其豐富且透徹的 **[文件](https://www.iris-go.com/docs)**,讓框架的入門觸手可及。 +Iris 有完整而詳盡的 **[使用文件](https://www.iris-go.com/docs)**,讓你可以輕鬆上手這個框架。 - +想看更詳細的技術文件,可以前往我們的 [godocs](https://pkg.go.dev/github.com/kataras/iris/v12@v12.2.11)。至於可執行的程式碼,隨時可以造訪儲存庫的 [./_examples](_examples) 子目錄。 - +### 用 Plexon AI 開發 -如需更為詳細的技術性文件,您可以前往我們的 [godocs](https://pkg.go.dev/github.com/kataras/iris/v12@main)。如果要可以直接執行的程式碼,可以到 [./\_examples](_examples) 儲存庫的子目錄參閱。 +[Plexon AI](https://plexon.ai) 是 Hellenic Development 推出的跨平台 AI 程式設計助理,它內建了一個專屬的 **Iris 技能(skill)**:一份由框架作者親自撰寫的 v14 開發指南,包含十九篇參考文件,涵蓋路由與巨集、context API、`rest` 輔助函式、錯誤處理、全部三十個中介軟體、內建控制器、認證 SDK、安全強化、資料持久化、快取、i18n、可觀測性、效能、測試、部署,以及從 v12 到 v14 的移轉。 -### 想一邊旅行、一邊閱讀嗎? +安裝 **Software Developer** 人格(persona),Iris 技能就會一起進來,與它啟用的那批工程類 agent 並列。這樣助理寫出來的 Iris 程式碼,就是這個框架原本該有的用法,而不是靠訓練時瞄到的片段去猜。 + +### 你喜歡在旅行時閱讀嗎? Book cover -[![在 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 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) -[![在 Twitter 上追蹤 Iris Web 框架](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 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) -[![在 Facebook 上追蹤 Iris Web 框架](https://img.shields.io/badge/Follow%20%40Iris.framework-569-2D88FF.svg?style=for-the-badge&logo=facebook)](https://www.facebook.com/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) **Iris 電子書**(新版,**針對未來版本 v12.2.0+**) 的 PDF 和線上閱讀存取權限,並共同參與 Iris 的開發。 +你可以立刻[索取](https://www.iris-go.com/#ebookDonateForm) **Iris 電子書**(新版)的 PDF 版本與線上閱讀權限,並參與 Iris 的開發。 ## 🙌 貢獻 -我們殷切期盼你對 Iris Web 框架的貢獻!有關貢獻 Iris 專案的更多資訊,請參閱 [CONTRIBUTING.md](CONTRIBUTING.md) 檔案。 +我們很期待看到你對 Iris Web 框架的貢獻!想知道如何為 Iris 專案貢獻,請參閱 [CONTRIBUTING.md](CONTRIBUTING.md)。 [所有貢獻者名單](https://github.com/kataras/iris/graphs/contributors) -## 🛡 安全性漏洞 +## 🛡 安全漏洞 -如果你發現 Iris 中有安全性漏洞,請寄一封電子郵件至 [iris-go@outlook.com](mailto:iris-go@outlook.com)。我們會儘速解決所有安全性漏洞。 +如果你在 Iris 中發現安全漏洞,請寄送電子郵件至 [iris-go@outlook.com](mailto:iris-go@outlook.com)。所有安全漏洞都會盡速處理。 ## 📝 授權條款 -本專案和 Go 語言相同,皆採 [BSD 3-clause 授權條款](LICENSE) 授權。 +本專案採用 [BSD 3-clause 授權條款](LICENSE),與 Go 專案本身相同。 -專案的名稱「Iris」取材自希臘神話。 - - +專案名稱「Iris」的靈感來自希臘神話。 diff --git a/_examples/auth/basicauth/database/go.mod b/_examples/auth/basicauth/database/go.mod index 5dbc7a33..57011e7b 100644 --- a/_examples/auth/basicauth/database/go.mod +++ b/_examples/auth/basicauth/database/go.mod @@ -1,6 +1,6 @@ module myapp -go 1.25 +go 1.26 require ( github.com/go-sql-driver/mysql v1.9.3 diff --git a/_examples/auth/jwt/tutorial/go.mod b/_examples/auth/jwt/tutorial/go.mod index 47fccf27..be0cf509 100644 --- a/_examples/auth/jwt/tutorial/go.mod +++ b/_examples/auth/jwt/tutorial/go.mod @@ -1,6 +1,6 @@ module myapp -go 1.25 +go 1.26 require ( github.com/google/uuid v1.6.0 diff --git a/_examples/bootstrapper/go.mod b/_examples/bootstrapper/go.mod index 3f9dd9bb..e73f04ff 100644 --- a/_examples/bootstrapper/go.mod +++ b/_examples/bootstrapper/go.mod @@ -1,6 +1,6 @@ module github.com/kataras/iris/v12/_examples/bootstrapper -go 1.25 +go 1.26 require ( github.com/gorilla/securecookie v1.1.2 diff --git a/_examples/configuration/multi-environments/go.mod b/_examples/configuration/multi-environments/go.mod index 56c331c9..4d9d9f43 100644 --- a/_examples/configuration/multi-environments/go.mod +++ b/_examples/configuration/multi-environments/go.mod @@ -1,6 +1,6 @@ module github.com/kataras/my-iris-app -go 1.25 +go 1.26 require ( github.com/kataras/iris/v12 v12.2.11-0.20251225090712-30c1c6b10edd diff --git a/_examples/configuration/viper/go.mod b/_examples/configuration/viper/go.mod index c013f243..4f9fe920 100644 --- a/_examples/configuration/viper/go.mod +++ b/_examples/configuration/viper/go.mod @@ -1,6 +1,6 @@ module app -go 1.25 +go 1.26 require ( github.com/kataras/iris/v12 v12.2.11-0.20251225090712-30c1c6b10edd diff --git a/_examples/database/mongodb/go.mod b/_examples/database/mongodb/go.mod index 2f6d14b3..de15c3df 100644 --- a/_examples/database/mongodb/go.mod +++ b/_examples/database/mongodb/go.mod @@ -1,6 +1,6 @@ module myapp -go 1.25 +go 1.26 require ( github.com/joho/godotenv v1.5.1 diff --git a/_examples/database/mysql/go.mod b/_examples/database/mysql/go.mod index 1707c086..e0dd9732 100644 --- a/_examples/database/mysql/go.mod +++ b/_examples/database/mysql/go.mod @@ -1,6 +1,6 @@ module myapp -go 1.25 +go 1.26 require ( github.com/DATA-DOG/go-sqlmock v1.5.2 diff --git a/_examples/database/orm/reform/go.mod b/_examples/database/orm/reform/go.mod index 96db9777..1839ecbe 100644 --- a/_examples/database/orm/reform/go.mod +++ b/_examples/database/orm/reform/go.mod @@ -1,6 +1,6 @@ module myapp -go 1.25 +go 1.26 require ( github.com/kataras/golog v0.1.12 diff --git a/_examples/dependency-injection/jwt/contrib/go.mod b/_examples/dependency-injection/jwt/contrib/go.mod index cb98c74a..ba3a3abb 100644 --- a/_examples/dependency-injection/jwt/contrib/go.mod +++ b/_examples/dependency-injection/jwt/contrib/go.mod @@ -1,6 +1,6 @@ module github.com/kataras/iris/_examples/dependency-injection/jwt/contrib -go 1.25 +go 1.26 require ( github.com/iris-contrib/middleware/jwt v0.0.0-20251225090426-92c6f28facda diff --git a/_examples/desktop/webview/go.mod b/_examples/desktop/webview/go.mod index ebdf027b..9d8a041f 100644 --- a/_examples/desktop/webview/go.mod +++ b/_examples/desktop/webview/go.mod @@ -1,6 +1,6 @@ module github.com/kataras/iris/_examples/desktop/webview -go 1.25 +go 1.26 require ( github.com/kataras/iris/v12 v12.2.11-0.20251225090712-30c1c6b10edd diff --git a/_examples/graphql/schema-first/go.mod b/_examples/graphql/schema-first/go.mod index e2625104..2e5dc66b 100644 --- a/_examples/graphql/schema-first/go.mod +++ b/_examples/graphql/schema-first/go.mod @@ -1,6 +1,6 @@ module github.com/iris-contrib/outerbanks-api -go 1.25 +go 1.26 require ( github.com/99designs/gqlgen v0.17.86 diff --git a/_examples/http-server/h2c/go.mod b/_examples/http-server/h2c/go.mod index bf06bab6..9b66cc4f 100644 --- a/_examples/http-server/h2c/go.mod +++ b/_examples/http-server/h2c/go.mod @@ -1,6 +1,6 @@ module github.com/kataras/iris/_examples/http-server/h2c -go 1.25 +go 1.26 require ( github.com/kataras/iris/v12 v12.2.11-0.20251225090712-30c1c6b10edd diff --git a/_examples/http-server/http3-quic/go.mod b/_examples/http-server/http3-quic/go.mod index 42aacbde..e294d9a3 100644 --- a/_examples/http-server/http3-quic/go.mod +++ b/_examples/http-server/http3-quic/go.mod @@ -1,6 +1,6 @@ module github.com/kataras/iris/_examples/http-server/http3-quic -go 1.25 +go 1.26 require ( github.com/kataras/iris/v12 v12.2.11-0.20251225090712-30c1c6b10edd diff --git a/_examples/kafka-api/go.mod b/_examples/kafka-api/go.mod index 0e6224a9..bc003052 100644 --- a/_examples/kafka-api/go.mod +++ b/_examples/kafka-api/go.mod @@ -1,6 +1,6 @@ module myapp -go 1.25 +go 1.26 require ( github.com/IBM/sarama v1.46.3 diff --git a/_examples/logging/request-logger/accesslog-slack/go.mod b/_examples/logging/request-logger/accesslog-slack/go.mod index 27d5921a..0d9a59d5 100644 --- a/_examples/logging/request-logger/accesslog-slack/go.mod +++ b/_examples/logging/request-logger/accesslog-slack/go.mod @@ -1,6 +1,6 @@ module github.com/kataras/iris/_examples/logging/accesslog-slack -go 1.25 +go 1.26 require ( github.com/kataras/iris/v12 v12.2.11-0.20251225090712-30c1c6b10edd diff --git a/_examples/logging/rollbar/go.mod b/_examples/logging/rollbar/go.mod index b1d8e1ca..bbc837c9 100644 --- a/_examples/logging/rollbar/go.mod +++ b/_examples/logging/rollbar/go.mod @@ -1,6 +1,6 @@ module github.com/kataras/iris/examples/logging/rollbar -go 1.25 +go 1.26 require ( github.com/kataras/iris/v12 v12.2.11-0.20251225090712-30c1c6b10edd diff --git a/_examples/monitor/statsviz/go.mod b/_examples/monitor/statsviz/go.mod index 1cff2be3..a3c8d9a9 100644 --- a/_examples/monitor/statsviz/go.mod +++ b/_examples/monitor/statsviz/go.mod @@ -1,6 +1,6 @@ module github.com/kataras/iris/_examples/statsviz -go 1.25 +go 1.26 require ( github.com/arl/statsviz v0.8.0 diff --git a/_examples/mvc/grpc-compatible-bidirectional-stream/go.mod b/_examples/mvc/grpc-compatible-bidirectional-stream/go.mod index 2e6863fa..a2a951b7 100644 --- a/_examples/mvc/grpc-compatible-bidirectional-stream/go.mod +++ b/_examples/mvc/grpc-compatible-bidirectional-stream/go.mod @@ -1,6 +1,6 @@ module grpcexample -go 1.25 +go 1.26 require ( github.com/golang/protobuf v1.5.4 diff --git a/_examples/mvc/overview/go.mod b/_examples/mvc/overview/go.mod index b1f45f83..54540053 100644 --- a/_examples/mvc/overview/go.mod +++ b/_examples/mvc/overview/go.mod @@ -1,6 +1,6 @@ module app -go 1.25 +go 1.26 require github.com/kataras/iris/v12 v12.2.11-0.20251225090712-30c1c6b10edd diff --git a/_examples/mvc/vuejs-todo-mvc/src/go.mod b/_examples/mvc/vuejs-todo-mvc/src/go.mod index 320d9cc4..c56b5bb9 100644 --- a/_examples/mvc/vuejs-todo-mvc/src/go.mod +++ b/_examples/mvc/vuejs-todo-mvc/src/go.mod @@ -1,6 +1,6 @@ module github.com/kataras/iris/v12/_examples/mvc/vuejs-todo-mvc/src -go 1.25 +go 1.26 require github.com/kataras/iris/v12 v12.2.11-0.20251225090712-30c1c6b10edd diff --git a/_examples/project/go.mod b/_examples/project/go.mod index 777bd246..b8e347ac 100644 --- a/_examples/project/go.mod +++ b/_examples/project/go.mod @@ -1,6 +1,6 @@ module github.com/username/project -go 1.25 +go 1.26 require ( github.com/kataras/golog v0.1.12 diff --git a/_examples/response-writer/json-third-party/go.mod b/_examples/response-writer/json-third-party/go.mod index 305013df..d75dd195 100644 --- a/_examples/response-writer/json-third-party/go.mod +++ b/_examples/response-writer/json-third-party/go.mod @@ -1,6 +1,6 @@ module github.com/kataras/iris/_examples/response-writer/json-third-party -go 1.25 +go 1.26 require ( github.com/bytedance/sonic v1.14.2 diff --git a/_examples/response-writer/protobuf/go.mod b/_examples/response-writer/protobuf/go.mod index 9db0d58f..dcf8fc12 100644 --- a/_examples/response-writer/protobuf/go.mod +++ b/_examples/response-writer/protobuf/go.mod @@ -1,6 +1,6 @@ module app -go 1.25 +go 1.26 require ( github.com/golang/protobuf v1.5.0 diff --git a/_examples/routing/party-controller/go.mod b/_examples/routing/party-controller/go.mod index 6ae3127f..271f1a1c 100644 --- a/_examples/routing/party-controller/go.mod +++ b/_examples/routing/party-controller/go.mod @@ -1,6 +1,6 @@ module github.com/kataras/iris/_examples/routing/party-controller -go 1.25 +go 1.26 require github.com/kataras/iris/v12 v12.2.11-0.20251225090712-30c1c6b10edd diff --git a/_examples/routing/subdomains/redirect/multi-instances/go.mod b/_examples/routing/subdomains/redirect/multi-instances/go.mod index dfa4108b..59e654e0 100644 --- a/_examples/routing/subdomains/redirect/multi-instances/go.mod +++ b/_examples/routing/subdomains/redirect/multi-instances/go.mod @@ -1,6 +1,6 @@ module github.com/kataras/iris/_examples/routing/subdomains/redirect/multi-instances -go 1.25 +go 1.26 require github.com/kataras/iris/v12 v12.2.11-0.20251225090712-30c1c6b10edd diff --git a/_examples/sessions/database/redis/go.mod b/_examples/sessions/database/redis/go.mod index ffe01461..f112114e 100644 --- a/_examples/sessions/database/redis/go.mod +++ b/_examples/sessions/database/redis/go.mod @@ -1,6 +1,6 @@ module app -go 1.25 +go 1.26 require github.com/kataras/iris/v12 v12.2.11-0.20251225090712-30c1c6b10edd diff --git a/_examples/testing/ginkgotest/go.mod b/_examples/testing/ginkgotest/go.mod index 02eb43f2..9230906e 100644 --- a/_examples/testing/ginkgotest/go.mod +++ b/_examples/testing/ginkgotest/go.mod @@ -1,6 +1,6 @@ module ginkgotest -go 1.25 +go 1.26 require ( github.com/kataras/iris/v12 v12.2.11-0.20251225090712-30c1c6b10edd diff --git a/_examples/view/templ/go.mod b/_examples/view/templ/go.mod index bb7aaae9..9dac3cb6 100644 --- a/_examples/view/templ/go.mod +++ b/_examples/view/templ/go.mod @@ -1,6 +1,6 @@ module github.com/kataras/iris/v12/_examples/view/templ -go 1.25 +go 1.26 require ( github.com/a-h/templ v0.3.977 diff --git a/_examples/websocket/basic/go.mod b/_examples/websocket/basic/go.mod index f1ec6abe..63341e98 100644 --- a/_examples/websocket/basic/go.mod +++ b/_examples/websocket/basic/go.mod @@ -1,6 +1,6 @@ module github.com/kataras/iris/_examples/websocket/basic -go 1.25 +go 1.26 require ( github.com/iris-contrib/middleware/jwt v0.0.0-20251225090426-92c6f28facda diff --git a/_examples/websocket/gorilla-filewatch/go.mod b/_examples/websocket/gorilla-filewatch/go.mod index ad4c13d7..059ed8fc 100644 --- a/_examples/websocket/gorilla-filewatch/go.mod +++ b/_examples/websocket/gorilla-filewatch/go.mod @@ -1,6 +1,6 @@ module gorilla-filewatch-example -go 1.25 +go 1.26 require ( github.com/gorilla/websocket v1.5.3 diff --git a/_examples/websocket/socketio/go.mod b/_examples/websocket/socketio/go.mod index 5f6fd3da..b216649e 100644 --- a/_examples/websocket/socketio/go.mod +++ b/_examples/websocket/socketio/go.mod @@ -1,6 +1,6 @@ module github.com/kataras/iris/_examples/websocket/socketio -go 1.25 +go 1.26 require ( github.com/googollee/go-socket.io v1.7.0 diff --git a/go.mod b/go.mod index 3343be49..c26d67a3 100644 --- a/go.mod +++ b/go.mod @@ -1,52 +1,52 @@ module github.com/kataras/iris/v12 -go 1.25 +go 1.26 retract [v12.0.0, v12.1.8] // Retract older versions as only latest is to be depended upon. Please update to @latest require ( github.com/BurntSushi/toml v1.6.0 - github.com/CloudyKit/jet/v6 v6.3.1 + github.com/CloudyKit/jet/v6 v6.3.2 github.com/Joker/jade v1.1.3 github.com/Shopify/goreferrer v0.0.0-20250617153402-88c1d9a79b05 - github.com/andybalholm/brotli v1.2.0 + github.com/andybalholm/brotli v1.2.2 github.com/blang/semver/v4 v4.0.0 - github.com/dgraph-io/badger/v4 v4.9.0 + github.com/dgraph-io/badger/v4 v4.9.5 github.com/fatih/structs v1.1.0 github.com/flosch/pongo2/v4 v4.0.2 github.com/golang/snappy v1.0.0 - github.com/gomarkdown/markdown v0.0.0-20250810172220-2e2c11897d1a + github.com/gomarkdown/markdown v0.0.0-20260725000948-8435af3f5984 github.com/google/uuid v1.6.0 github.com/gorilla/securecookie v1.1.2 github.com/iris-contrib/httpexpect/v2 v2.15.2 github.com/iris-contrib/schema v0.0.6 github.com/json-iterator/go v1.1.12 github.com/kataras/blocks v0.0.8 - github.com/kataras/golog v0.1.12 + github.com/kataras/golog v0.1.15 github.com/kataras/jwt v0.1.17 github.com/kataras/neffos v0.0.24 github.com/kataras/pio v0.0.13 github.com/kataras/sitemap v0.0.6 github.com/kataras/tunnel v0.0.4 - github.com/klauspost/compress v1.18.2 + github.com/klauspost/compress v1.18.0 github.com/mailgun/raymond/v2 v2.0.48 - github.com/mailru/easyjson v0.9.1 + github.com/mailru/easyjson v0.9.2 github.com/microcosm-cc/bluemonday v1.0.27 - github.com/redis/go-redis/v9 v9.17.2 + github.com/redis/go-redis/v9 v9.21.0 github.com/schollz/closestmatch v2.1.0+incompatible github.com/shirou/gopsutil/v3 v3.24.5 - github.com/tdewolff/minify/v2 v2.24.8 + github.com/tdewolff/minify/v2 v2.24.14 github.com/vmihailenco/msgpack/v5 v5.4.1 github.com/yosssi/ace v0.0.5 - go.etcd.io/bbolt v1.4.3 - golang.org/x/crypto v0.47.0 - golang.org/x/exp v0.0.0-20260112195511-716be5621a96 - golang.org/x/net v0.49.0 - golang.org/x/sys v0.40.0 - golang.org/x/text v0.33.0 - golang.org/x/time v0.14.0 + go.etcd.io/bbolt v1.5.0 + golang.org/x/crypto v0.31.0 + golang.org/x/exp v0.0.0-20230905200255-921286631fa9 + golang.org/x/net v0.26.0 + golang.org/x/sys v0.47.0 + golang.org/x/text v0.23.0 + golang.org/x/time v0.15.0 google.golang.org/protobuf v1.36.11 - gopkg.in/ini.v1 v1.67.1 + gopkg.in/ini.v1 v1.67.3 gopkg.in/yaml.v3 v3.0.1 ) @@ -57,7 +57,6 @@ require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/dgraph-io/ristretto/v2 v2.2.0 // indirect - github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/fatih/color v1.15.0 // indirect github.com/go-logr/logr v1.4.3 // indirect @@ -92,7 +91,7 @@ require ( github.com/shoenig/go-m1cpu v0.1.6 // indirect github.com/sirupsen/logrus v1.8.1 // indirect github.com/stretchr/testify v1.11.1 // indirect - github.com/tdewolff/parse/v2 v2.8.5 // indirect + github.com/tdewolff/parse/v2 v2.8.14 // indirect github.com/tklauser/go-sysconf v0.3.12 // indirect github.com/tklauser/numcpus v0.6.1 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect @@ -104,10 +103,11 @@ require ( github.com/yudai/gojsondiff v1.0.0 // indirect github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82 // indirect github.com/yusufpapurcu/wmi v1.2.4 // indirect - go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/otel v1.37.0 // indirect - go.opentelemetry.io/otel/metric v1.37.0 // indirect - go.opentelemetry.io/otel/trace v1.37.0 // indirect - golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect + go.opentelemetry.io/auto/sdk v1.2.1 // indirect + go.opentelemetry.io/otel v1.41.0 // indirect + go.opentelemetry.io/otel/metric v1.41.0 // indirect + go.opentelemetry.io/otel/trace v1.41.0 // indirect + go.uber.org/atomic v1.11.0 // indirect + golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect moul.io/http2curl/v2 v2.3.0 // indirect ) diff --git a/go.sum b/go.sum index 7c006cda..366920e9 100644 --- a/go.sum +++ b/go.sum @@ -2,8 +2,8 @@ github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53 h1:sR+/8Yb4slttB4vD+b9btVEnWgL3Q00OBTzVT8B9C0c= github.com/CloudyKit/fastprinter v0.0.0-20200109182630-33d98a066a53/go.mod h1:+3IMCy2vIlbG1XG/0ggNQv0SvxCAIpPM5b1nCz56Xno= -github.com/CloudyKit/jet/v6 v6.3.1 h1:6IAo5Cx21xrHVaR8zzXN5gJatKV/wO7Nf6bfCnCSbUw= -github.com/CloudyKit/jet/v6 v6.3.1/go.mod h1:lf8ksdNsxZt7/yH/3n4vJQWA9RUq4wpaHtArHhGVMOw= +github.com/CloudyKit/jet/v6 v6.3.2 h1:BPaX0lnXTZ9TniICiiK/0iJqzeGJ2ibvB4DjAqLMBSM= +github.com/CloudyKit/jet/v6 v6.3.2/go.mod h1:lf8ksdNsxZt7/yH/3n4vJQWA9RUq4wpaHtArHhGVMOw= github.com/Joker/hpp v1.0.0 h1:65+iuJYdRXv/XyN62C1uEmmOx3432rNG/rKlX6V7Kkc= github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= github.com/Joker/jade v1.1.3 h1:Qbeh12Vq6BxURXT1qZBRHsDxeURB8ztcL6f3EXSGeHk= @@ -12,8 +12,8 @@ github.com/Shopify/goreferrer v0.0.0-20250617153402-88c1d9a79b05 h1:dG7/gLroJGht github.com/Shopify/goreferrer v0.0.0-20250617153402-88c1d9a79b05/go.mod h1:NYezi6wtnJtBm5btoprXc5SvAdqH0XTXWnUup0MptAI= github.com/ajg/form v1.5.1 h1:t9c7v8JUKu/XxOGBU0yjNpaMloxGEJhUkqFRq0ibGeU= github.com/ajg/form v1.5.1/go.mod h1:uL1WgH+h2mgNtvBq0339dVnzXdBETtL2LeUXaIv25UY= -github.com/andybalholm/brotli v1.2.0 h1:ukwgCxwYrmACq68yiUqwIWnGY0cTPox/M94sVwToPjQ= -github.com/andybalholm/brotli v1.2.0/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= +github.com/andybalholm/brotli v1.2.2 h1:HzTuoo2ErYQqf5qvcJInB8uvqSVxRttzkFexPWtnceM= +github.com/andybalholm/brotli v1.2.2/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= github.com/aymerick/douceur v0.2.0 h1:Mv+mAeH1Q+n9Fr+oyamOlAkUNPWPlA8PPGR0QAaYuPk= github.com/aymerick/douceur v0.2.0/go.mod h1:wlT5vV2O3h55X9m7iVYN0TBM0NH/MmbLnd30/FjWUq4= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= @@ -28,14 +28,12 @@ github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2 github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgraph-io/badger/v4 v4.9.0 h1:tpqWb0NewSrCYqTvywbcXOhQdWcqephkVkbBmaaqHzc= -github.com/dgraph-io/badger/v4 v4.9.0/go.mod h1:5/MEx97uzdPUHR4KtkNt8asfI2T4JiEiQlV7kWUo8c0= +github.com/dgraph-io/badger/v4 v4.9.5 h1:zT46OMrF3ntqsfI3ynKp7hUkQrGlcK2CX5psQmH0iW0= +github.com/dgraph-io/badger/v4 v4.9.5/go.mod h1:Xa9dAupjbwAacupWFCpa6YEn9E1PjBXkfZYr2I/8aWg= github.com/dgraph-io/ristretto/v2 v2.2.0 h1:bkY3XzJcXoMuELV8F+vS8kzNgicwQFAaGINAEJdWGOM= github.com/dgraph-io/ristretto/v2 v2.2.0/go.mod h1:RZrm63UmcBAaYWC1DotLYBmTvgkrs0+XhBd7Npn7/zI= github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da h1:aIftn67I1fkbMa512G+w+Pxci9hJPB8oMnkcP3iZF38= github.com/dgryski/go-farm v0.0.0-20240924180020-3414d57e47da/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= -github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= @@ -45,8 +43,8 @@ github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga github.com/flosch/pongo2/v4 v4.0.2 h1:gv+5Pe3vaSVmiJvh/BZa82b7/00YUGm0PIyVVLop0Hw= github.com/flosch/pongo2/v4 v4.0.2/go.mod h1:B5ObFANs/36VwxxlgKpdchIJHMvHB562PW+BWPhwZD8= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= -github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/fsnotify/fsnotify v1.10.1 h1:b0/UzAf9yR5rhf3RPm9gf3ehBPpf0oZKIjtpKrx59Ho= +github.com/fsnotify/fsnotify v1.10.1/go.mod h1:TLheqan6HD6GBK6PrDWyDPBaEV8LspOxvPSjC+bVfgo= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -64,8 +62,8 @@ github.com/gobwas/ws v1.4.0 h1:CTaoG1tojrh4ucGPcoJFiAQUAsEWekEWvLy7GsVNqGs= github.com/gobwas/ws v1.4.0/go.mod h1:G3gNqMNtPppf5XUz7O4shetPpcZ1VJ7zt18dlUeakrc= github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs= github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/gomarkdown/markdown v0.0.0-20250810172220-2e2c11897d1a h1:l7A0loSszR5zHd/qK53ZIHMO8b3bBSmENnQ6eKnUT0A= -github.com/gomarkdown/markdown v0.0.0-20250810172220-2e2c11897d1a/go.mod h1:JDGcbDT52eL4fju3sZ4TeHGsQwhG9nbDV21aMyhwPoA= +github.com/gomarkdown/markdown v0.0.0-20260725000948-8435af3f5984 h1:6DE2PprLLZelQJu7AeebZLxjcENwC1plRZHDvd5uMCU= +github.com/gomarkdown/markdown v0.0.0-20260725000948-8435af3f5984/go.mod h1:JDGcbDT52eL4fju3sZ4TeHGsQwhG9nbDV21aMyhwPoA= github.com/google/flatbuffers v25.2.10+incompatible h1:F3vclr7C3HpB1k9mxCGRMXq6FdUalZ6H/pNX4FP1v0Q= github.com/google/flatbuffers v25.2.10+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -97,8 +95,8 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/kataras/blocks v0.0.8 h1:MrpVhoFTCR2v1iOOfGng5VJSILKeZZI+7NGfxEh3SUM= github.com/kataras/blocks v0.0.8/go.mod h1:9Jm5zx6BB+06NwA+OhTbHW1xkMOYxahnqTN5DveZ2Yg= -github.com/kataras/golog v0.1.12 h1:Bu7I/G4ilJlbfzjmU39O9N+2uO1pBcMK045fzZ4ytNg= -github.com/kataras/golog v0.1.12/go.mod h1:wrGSbOiBqbQSQznleVNX4epWM8rl9SJ/rmEacl0yqy4= +github.com/kataras/golog v0.1.15 h1:gDNOENbbn+6me98UW1f9Cs5MRUlAkabnNvmgLFM58Xw= +github.com/kataras/golog v0.1.15/go.mod h1:Ozu1TDa+OKC7fFe7OG64In71yLxjda+6kPl+Rg3v1hA= github.com/kataras/jwt v0.1.17 h1:dYjemzcdYqA4ylwq9/56MslCr/pNOyVUZ2bl3hYNHgc= github.com/kataras/jwt v0.1.17/go.mod h1:HUnU5HDBCDanVF8zrPVSE2VK8HicospKefZDD4DzOKU= github.com/kataras/neffos v0.0.24 h1:S3lHqJopCfXN285VdlbGeOj+Id83u4xdQKToa+w1vW0= @@ -109,8 +107,10 @@ github.com/kataras/sitemap v0.0.6 h1:w71CRMMKYMJh6LR2wTgnk5hSgjVNB9KL60n5e2KHvLY github.com/kataras/sitemap v0.0.6/go.mod h1:dW4dOCNs896OR1HmG+dMLdT7JjDk7mYBzoIRwuj5jA4= github.com/kataras/tunnel v0.0.4 h1:sCAqWuJV7nPzGrlb0os3j49lk2JhILT0rID38NHNLpA= github.com/kataras/tunnel v0.0.4/go.mod h1:9FkU4LaeifdMWqZu7o20ojmW4B7hdhv2CMLwfnHGpYw= -github.com/klauspost/compress v1.18.2 h1:iiPHWW0YrcFgpBYhsA6D1+fqHssJscY/Tm/y2Uqnapk= -github.com/klauspost/compress v1.18.2/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= +github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE= +github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -121,8 +121,8 @@ github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 h1:6E+4a0GO5zZEnZ github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/mailgun/raymond/v2 v2.0.48 h1:5dmlB680ZkFG2RN/0lvTAghrSxIESeu9/2aeDqACtjw= github.com/mailgun/raymond/v2 v2.0.48/go.mod h1:lsgvL50kgt1ylcFJYZiULi5fjPBkkhNfj4KA0W54Z18= -github.com/mailru/easyjson v0.9.1 h1:LbtsOm5WAswyWbvTEOqhypdPeZzHavpZx96/n553mR8= -github.com/mailru/easyjson v0.9.1/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= +github.com/mailru/easyjson v0.9.2 h1:dX8U45hQsZpxd80nLvDGihsQ/OxlvTkVUXH2r/8cb2M= +github.com/mailru/easyjson v0.9.2/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= @@ -157,10 +157,10 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c h1:ncq/mPwQF4JjgDlrVEn3C11VoGHZN7m8qihwgMEtzYw= github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/redis/go-redis/v9 v9.17.2 h1:P2EGsA4qVIM3Pp+aPocCJ7DguDHhqrXNhVcEp4ViluI= -github.com/redis/go-redis/v9 v9.17.2/go.mod h1:u410H11HMLoB+TP67dz8rL9s6QW2j76l0//kSOd3370= -github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= -github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/redis/go-redis/v9 v9.21.0 h1:FPBE4hhbAke+TLmcY3WkpbDffJEomdqPn3HYiqAtL9E= +github.com/redis/go-redis/v9 v9.21.0/go.mod h1:v/M13XI1PVCDcm01VtPFOADfZtHf8YW3baQf57KlIkA= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sanity-io/litter v1.5.5 h1:iE+sBxPBzoK6uaEP5Lt3fHNgpKcHXc/A2HGETy0uJQo= @@ -192,12 +192,12 @@ github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXl github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/tailscale/depaware v0.0.0-20210622194025-720c4b409502/go.mod h1:p9lPsd+cx33L3H9nNoecRRxPssFKUwwI50I3pZ0yT+8= -github.com/tdewolff/minify/v2 v2.24.8 h1:58/VjsbevI4d5FGV0ZSuBrHMSSkH4MCH0sIz/eKIauE= -github.com/tdewolff/minify/v2 v2.24.8/go.mod h1:0Ukj0CRpo/sW/nd8uZ4ccXaV1rEVIWA3dj8U7+Shhfw= -github.com/tdewolff/parse/v2 v2.8.5 h1:ZmBiA/8Do5Rpk7bDye0jbbDUpXXbCdc3iah4VeUvwYU= -github.com/tdewolff/parse/v2 v2.8.5/go.mod h1:Hwlni2tiVNKyzR1o6nUs4FOF07URA+JLBLd6dlIXYqo= -github.com/tdewolff/test v1.0.11 h1:FdLbwQVHxqG16SlkGveC0JVyrJN62COWTRyUFzfbtBE= -github.com/tdewolff/test v1.0.11/go.mod h1:XPuWBzvdUzhCuxWO1ojpXsyzsA5bFoS3tO/Q3kFuTG8= +github.com/tdewolff/minify/v2 v2.24.14 h1:y05Dj1YHaCJ0g6nZa5wC6vyI+x5iziYBY20gsC6xvbo= +github.com/tdewolff/minify/v2 v2.24.14/go.mod h1:ducvuHPTtUvKKK6uCI4p0fR2Mxvoy+XpFy9cC8QDv1c= +github.com/tdewolff/parse/v2 v2.8.14 h1:GuhuMMPKAqj5BhP9hZUz3r3JqX/lOvQ1E6wxW6p/FhY= +github.com/tdewolff/parse/v2 v2.8.14/go.mod h1:XdsoSFThlVIRIajAuqz1evNY7bagZS8LBOPA3aVopwQ= +github.com/tdewolff/test v1.0.12 h1:7F21DqIajswxuche0geHdrUZRCWE4oko4b7bcmkkrxk= +github.com/tdewolff/test v1.0.12/go.mod h1:XPuWBzvdUzhCuxWO1ojpXsyzsA5bFoS3tO/Q3kFuTG8= github.com/tklauser/go-sysconf v0.3.12 h1:0QaGUFOdQaIVdPgfITYzaTegZvdCjmYO52cSFAEVmqU= github.com/tklauser/go-sysconf v0.3.12/go.mod h1:Ho14jnntGE1fpdOqQEEaiKRpvIavV0hSfmBq8nJbHYI= github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= @@ -230,23 +230,27 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0= github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -go.etcd.io/bbolt v1.4.3 h1:dEadXpI6G79deX5prL3QRNP6JB8UxVkqo4UPnHaNXJo= -go.etcd.io/bbolt v1.4.3/go.mod h1:tKQlpPaYCVFctUIgFKFnAlvbmB3tpy1vkTnDWohtc0E= -go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= -go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/otel v1.37.0 h1:9zhNfelUvx0KBfu/gb+ZgeAfAgtWrfHJZcAqFC228wQ= -go.opentelemetry.io/otel v1.37.0/go.mod h1:ehE/umFRLnuLa/vSccNq9oS1ErUlkkK71gMcN34UG8I= -go.opentelemetry.io/otel/metric v1.37.0 h1:mvwbQS5m0tbmqML4NqK+e3aDiO02vsf/WgbsdpcPoZE= -go.opentelemetry.io/otel/metric v1.37.0/go.mod h1:04wGrZurHYKOc+RKeye86GwKiTb9FKm1WHtO+4EVr2E= -go.opentelemetry.io/otel/trace v1.37.0 h1:HLdcFNbRQBE2imdSEgm/kwqmQj1Or1l/7bW6mxVK7z4= -go.opentelemetry.io/otel/trace v1.37.0/go.mod h1:TlgrlQ+PtQO5XFerSPUYG0JSgGyryXewPGyayAWSBS0= +github.com/zeebo/xxh3 v1.1.0 h1:s7DLGDK45Dyfg7++yxI0khrfwq9661w9EN78eP/UZVs= +github.com/zeebo/xxh3 v1.1.0/go.mod h1:IisAie1LELR4xhVinxWS5+zf1lA4p0MW4T+w+W07F5s= +go.etcd.io/bbolt v1.5.0 h1:S7GAl7Fxv12yohbwFfIbQCGDWbQbtDGPET4P/bD4lxU= +go.etcd.io/bbolt v1.5.0/go.mod h1:mkltfYE5aUHQxUct9N9V+Kp7aSjFqjgrhcXIS70Lrdk= +go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= +go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= +go.opentelemetry.io/otel v1.41.0 h1:YlEwVsGAlCvczDILpUXpIpPSL/VPugt7zHThEMLce1c= +go.opentelemetry.io/otel v1.41.0/go.mod h1:Yt4UwgEKeT05QbLwbyHXEwhnjxNO6D8L5PQP51/46dE= +go.opentelemetry.io/otel/metric v1.41.0 h1:rFnDcs4gRzBcsO9tS8LCpgR0dxg4aaxWlJxCno7JlTQ= +go.opentelemetry.io/otel/metric v1.41.0/go.mod h1:xPvCwd9pU0VN8tPZYzDZV/BMj9CM9vs00GuBjeKhJps= +go.opentelemetry.io/otel/trace v1.41.0 h1:Vbk2co6bhj8L59ZJ6/xFTskY+tGAbOnCtQGVVa9TIN0= +go.opentelemetry.io/otel/trace v1.41.0/go.mod h1:U1NU4ULCoxeDKc09yCWdWe+3QoyweJcISEVa1RBzOis= +go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= +go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8= -golang.org/x/crypto v0.47.0/go.mod h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A= -golang.org/x/exp v0.0.0-20260112195511-716be5621a96 h1:Z/6YuSHTLOHfNFdb8zVZomZr7cqNgTJvA8+Qz75D8gU= -golang.org/x/exp v0.0.0-20260112195511-716be5621a96/go.mod h1:nzimsREAkjBCIEFtHiYkrJyT+2uy9YZJB7H1k68CXZU= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= +golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= @@ -255,13 +259,13 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= -golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= +golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= +golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= -golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= +golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -276,17 +280,17 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= -golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs= +golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= -golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8= -golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= -golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= +golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= +golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= +golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20201211185031-d93e913c1a58/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -294,17 +298,16 @@ golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY= -golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/ini.v1 v1.67.1 h1:tVBILHy0R6e4wkYOn3XmiITt/hEVH4TFMYvAX2Ytz6k= -gopkg.in/ini.v1 v1.67.1/go.mod h1:x/cyOwCgZqOkJoDIJ3c1KNHMo10+nLGAhh+kn3Zizss= +gopkg.in/ini.v1 v1.67.3 h1:iM9Lhz5MRSGhHVGGwCuzG9KO8PoirCXj/m/qTmOJJQw= +gopkg.in/ini.v1 v1.67.3/go.mod h1:x/cyOwCgZqOkJoDIJ3c1KNHMo10+nLGAhh+kn3Zizss= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=