Tin tức
> 🚀 **Iris v14 sắp ra mắt.** Phiên bản lớn tiếp theo là bản phát hành lớn nhất trong lịch sử dự án: khung được dựng lại trên generics của Go, một trình dựng ứng dụng được trình biên dịch kiểm tra, các hàm hỗ trợ request tự thực hiện việc kiểm tra dữ liệu, một bảng ánh xạ lỗi tập trung, ba mươi middleware có sẵn và một cuốn sách nằm ngay trong kho mã nguồn. Xem [Iris v14 mang lại điều gì](#-iris-v14-mang-lại-điều-gì) ở bên dưới.
>
> Phiên bản được nói đến ở đây, **v12**, vẫn chạy tốt và vẫn tiếp tục nhận các bản sửa lỗi. v14 đến trên một đường dẫn import mới, nên ngày nó ra mắt sẽ không có gì bên phía bạn bị hỏng.
#
Iris Web Framework English
العربية
[](https://github.com/kataras/iris/actions/workflows/ci.yml) [](https://github.com/kataras/iris/tree/main/_examples) [](https://gitter.im/iris_go/community) [](https://iris-go.com/donate)
⚡ 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.
🌟 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/testimonials/)
[](https://github.com/kataras/server-benchmarks)
```go
package main
import "github.com/kataras/iris/v12"
func main() {
app := iris.New()
app.Use(iris.Compression)
app.Get("/", func(ctx iris.Context) {
ctx.HTML("Hello %s!", "World")
})
app.Listen(":8080")
}
```
Như một [lập trình viên Go](https://twitter.com/dkuye/status/1532087942696554497) từng nói, **Iris lo cho bạn mọi mặt và vẫn đứng vững qua năm tháng** ⭐
Một vài tính năng mà Iris mang lại:
* 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)
* Quản lý phiên bản API
* Model-View-Controller
* Websockets
* gRPC
* Auto-HTTPS
* 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
* Bản địa hóa (i18n, sitemap)
* Sessions
* 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)
* 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
## 🚀 Iris v14 mang lại điều gì
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!
## 📖 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/).
#### Tạo dự án mới
```sh
$ mkdir myapp
$ cd myapp
$ go mod init myapp
$ go get github.com/kataras/iris/v12@latest # hoặc @v12.2.11
```
Cài vào dự án sẵn có
```sh
$ cd myapp
$ go get github.com/kataras/iris/v12@latest
```
**Chạy**
```sh
$ go mod tidy -compat=1.23 # dùng -compat="1.23" trên windows.
$ go run .
```

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
[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.
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?
[](https://twitter.com/intent/follow?screen_name=makismaropoulos)
[](https://twitter.com/intent/follow?screen_name=iris_framework)
[](https://www.facebook.com/iris.framework)
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 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 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 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 [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.