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

101 KiB

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ì ở 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 العربية

build status view examples chat 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ề Irisgắn sao cho dự án mã nguồn mở này

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

package main

import "github.com/kataras/iris/v12"

func main() {
  app := iris.New()
  app.Use(iris.Compression)

  app.Get("/", func(ctx iris.Context) {
    ctx.HTML("Hello <strong>%s</strong>!", "World")
  })

  app.Listen(":8080")
}

Như một lập trình viên Go 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.

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 đó.

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.Countrest.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 deprest, 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, viewversioning đã trở thành middleware. mvc chuyển xuống dưới controller, bên cạnh các controller mới fileserver, sitemapapigraph. 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, ipaccessservertiming. Phần hiện thực các bộ máy view đã chuyển sang 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.

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.SetHeaderctx.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 SecureSameSite=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 hoặc @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.

Tạo dự án mới

$ 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ó
$ cd myapp
$ go get github.com/kataras/iris/v12@latest

Chạy

$ go mod tidy -compat=1.23 # dùng -compat="1.23" trên windows.
$ go run .

Iris có tài liệu đầ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. Còn mã chạy được thì luôn nằm trong thư mục con ./_examples của kho mã nguồn.

Phát triển cùng Plexon AI

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?

Book cover

follow author on twitter

follow Iris web framework on twitter

follow Iris web framework on facebook

Bạn có thể yêu cầu 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.

Danh sách tất cả những người đóng góp

🛡 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. 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, 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.