diff --git a/README_ZH.md b/README_ZH.md index af329ae80c..4494aa5efa 100644 --- a/README_ZH.md +++ b/README_ZH.md @@ -1,23 +1,36 @@ -# Iris Web Framework +[![黑人的命也是命](https://iris-go.com/images/blacklivesmatter_banner.png)](https://support.eji.org/give/153413/#!/donation/checkout) -[![build status](https://img.shields.io/travis/kataras/iris/master.svg?style=for-the-badge&logo=travis)](https://travis-ci.org/kataras/iris) [![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/master/_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 编写的一个快速,简单但功能齐全且非常高效的 Web 框架。 它为您的下一个网站或 API 提供了一个非常富有表现力且易于使用的基础。 +> 这是一个**开发中的版本**。敬请关注即将发布的版本 [v12.2.0](HISTORY.md#Next)。如果想使用稳定版本,请查看 [v12.1.8 分支](https://github.com/kataras/iris/tree/v12.1.8) 。 +> +> ![](https://iris-go.com/images/cli.png) 立即尝试官方的[Iris命令行工具](https://github.com/kataras/iris-cli)! -看看 [其他人如何评价 Iris](https://iris-go.com/testimonials/),同时欢迎各位点亮 **star**。 + -[![](https://media.giphy.com/media/j5WLmtvwn98VPrm7li/giphy.gif)](https://iris-go.com/testimonials/) +# Iris Web Framework -[![Benchmarks: Apr 2, 2020 at 12:13pm (UTC)](https://iris-go.com/images/benchmarks.svg)](https://github.com/kataras/server-benchmarks) +[![build status](https://img.shields.io/travis/kataras/iris/master.svg?style=for-the-badge&logo=travis)](https://travis-ci.org/kataras/iris) [![view examples](https://img.shields.io/badge/examples%20-173-a83adf.svg?style=for-the-badge&logo=go)](https://github.com/kataras/iris/tree/master/_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 + -
-快速入门 +Iris 是基于 Go 编写的一个快速,简单但功能齐全且非常高效的 Web 框架。 + +它为您的下一个网站或 API 提供了一个非常富有表现力且易于使用的基础。 + +看看 [其他人如何评价 Iris](https://iris-go.com/testimonials/),同时欢迎各位为此开源项目点亮 **[star](https://github.com/kataras/iris/stargazers)**。 + +[![](https://iris-go.com/images/reviews.gif)](https://iris-go.com/testimonials/) + +[![Benchmarks: Jul 18, 2020 at 10:46am (UTC)](https://iris-go.com/images/benchmarks.svg)](https://github.com/kataras/server-benchmarks) + +## 📖 开始学习 Iris ```sh -# 假设文件已经存在 -$ cat example.go +# 安装Iris:https://github.com/kataras/iris/wiki/Installation +$ go get github.com/kataras/iris/v12@master +# 假设main.go文件中已存在以下代码 +$ cat main.go ``` ```go @@ -26,51 +39,178 @@ 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.Listen(":8080") + app := iris.New() + + booksAPI := app.Party("/books") + { + booksAPI.Use(iris.Compression) + + // 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) +} +``` + +同样地,在**MVC**中 : + +```go +import "github.com/kataras/iris/v12/mvc" +``` + +```go +m := mvc.New(booksAPI) +m.Handle(new(BookController)) +``` + +```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 } ``` +**启动** 您的 Iris web 服务: + ```sh -# 运行 example.go -# 在浏览器中访问 http://localhost:8080/ping -$ go run example.go +$ go run main.go +> Now listening on: http://localhost:8080 +> Application started. Press CTRL+C to shut down. ``` -> 路由由 [muxie](https://github.com/kataras/muxie) 提供支持,muxie 是基于 Go 编写的最强大最快速的基于 trie 的路由 +Books **列表查询** : + +```sh +$ curl --header 'Accept-Encoding:gzip' http://localhost:8080/books + +[ + { + "title": "Mastering Concurrency in Go" + }, + { + "title": "Go Design Patterns" + }, + { + "title": "Black Hat Go" + } +] +``` + +**创建** 新的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", +} +```
-Iris 包含详细而完整的 **[文档](https://github.com/kataras/iris/wiki)**,使你很容易开始使用该框架。 +[![run in the browser](https://img.shields.io/badge/Run-in%20the%20Browser-348798.svg?style=for-the-badge&logo=repl.it)](https://bit.ly/2YJeSZe) + +Iris 有完整且详尽的 **[使用文档](https://github.com/kataras/iris/wiki)** ,让您可以轻松地使用此框架。 -要了解更多详细的技术文档,可以访问我们的 [godocs](https://pkg.go.dev/github.com/kataras/iris/v12@v12.2.0)。对于可执行代码,可以随时访问示例代码,在仓库的 [\_examples](_examples/) 目录下。 + -### 你喜欢在旅行中看书吗? +要了解更详细的技术文档,请访问我们的 [godocs](https://godoc.org/github.com/kataras/iris)。如果想要寻找代码示例,您可以到仓库的 [./_examples](_examples) 子目录下获取。 -你现在可以 [获取](https://bit.ly/iris-req-book) PDF 版本和在线访问我们的 **电子书** 并参与 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 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) -## 贡献 +您可以[获取](https://bit.ly/iris-req-book)PDF版本或在线访问**电子图书**,并参与到Iris的开发中。 -我们很高兴看到你对 Iris Web 框架的贡献!有关为 Iris 做出贡献的更多信息,请查看 [CONTRIBUTING.md](CONTRIBUTING.md)。 +## 🙌 贡献 -[所有贡献者名单](https://github.com/kataras/iris/graphs/contributors) +我们欢迎您为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)。 项目名称 "Iris" 的灵感来自于希腊神话。 -Iris Web 框架授权基于 [3-Clause BSD License](LICENSE) 许可的免费开源软件。 +