Golang中哪种Web框架最适合生产级REST API开发?

Golang中哪种Web框架最适合生产级REST API开发? 我正在一家公司工作,我们正在寻找一个可用于生产环境的Web框架。我们的需求包括:

  • REST API
  • 快速开发
  • 稳定的框架

请推荐最佳框架,请不要建议使用标准库,因为快速开发是我们的首要任务。 谢谢

14 回复

感谢您的回复 🙂

更多关于Golang中哪种Web框架最适合生产级REST API开发?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


谢谢。我需要生产级别的工具。

很遗憾没有提到 https://beego.me/。它也可以用于生产级别。

你可以在 https://github.com/avelino/awesome-go 找到一份优秀的 Go 工具和库列表。

或许值得在你的帖子中编辑一下,指向这里。这是为了确保那些只阅读第一个答案而不再继续阅读的人能够了解到与Iris维护者相关的问题。

我正在编写一个不使用框架和ORM的开源论坛,也许你会喜欢它。

GitHub图标

GitHub

头像

godiscourse/godiscourse

另一个使用Golang、React和PostgreSQL编写的开源论坛 - godiscourse/godiscourse

你好

Gin框架非常流行,在GitHub上拥有25k星标且活跃度很高

GitHub GitHub

gin-gonic/gin

gin-gonic/gin

Gin是一个用Go语言编写的HTTP Web框架。它具有类似Martini的API,但性能更好——最高可提升40倍。如果你需要极致的性能,那就选择Gin吧。- …

我推荐使用Echo。它是开源的,Packt出版社还出版了一本关于如何使用和学习它的书籍。它可用于实现Web应用程序和Web API - 包括REST。

如果目标只是开发API,我推荐goa。这是一个开源框架,采用设计优先的方法来设计API。它还会从那些用DSL描述的API自动生成Swagger文档,而DSL本身就是Go语言(该DSL不是自创语言或yaml)。

goa的方法可能看起来工作量有点大,但我推荐使用它。当你的API达到大约七个端点时,未来的你会感谢自己!当然,这一切都取决于手头的问题、需求以及你的资源。

此外还有更新的相关报告,情况依然不容乐观:

图片

r/golang - 关于 github.com/kataras/iris 的警告

目前该帖在Reddit上已获得342票支持和73条评论

图片

@laliluna,关于 Iris 有个老生常谈的禁忌:

reddit

reddit

预览图

r/golang - 为什么你真的应该停止使用 Iris

目前 Reddit 上已有 163 票支持和 80 条评论

我注意到以下框架被频繁提及: http://www.gorillatoolkit.org/pkg/mux

Echo - High performance, minimalist Go web framework

Echo - 高性能、极简的Go Web框架

Echo是一个高性能、可扩展、极简的Go(Golang)Web框架。

https://iris-go.com/(在选择Iris之前,请查看并验证下面的相关讨论) https://github.com/urfave/negroni Middleware

以下库可以帮助您重新加载Web服务以实现更快的开发:

gravityblast/fresh

gravityblast/fresh

在保存/创建/删除源文件后构建并(重新)启动Go Web应用程序。

codegangsta/gin

codegangsta/gin

Go Web服务器的实时重新加载工具。通过在GitHub上创建帐户为codegangsta/gin的开发做出贡献。

这两个框架在生产环境中最为流行。
Echo 提供了许多有用的中间件。

GitHub
GitHub

头像

labstack/echo

高性能、极简的 Go Web 框架。通过在 GitHub 上创建账户为 labstack/echo 的开发做出贡献。

GitHub
GitHub

头像

gin-gonic/gin

Gin 是一个用 Go(Golang)编写的 HTTP Web 框架。它具有类似 Martini 的 API,但性能更好——最高可提升 40 倍。如果你需要极致的性能,就选择 Gin。

我首次使用Go语言开发REST服务时采用了go-swagger工具——以下是我们某个代码库README文件的节选内容(名称已替换为example)。

[Swagger](https://github.com/go-swagger/go-swagger) 工具被用于生成此服务器。
由于该工具仅支持swagger规范的v2版本,生成时必须使用该版本

[安装Swagger](https://goswagger.io/install.html)

```bash
$ swagger generate server --target . --name example --spec example.2.0.yaml

$ tree -d
.
├── cmd
│   └── example-server
├── models
├── restapi
│   └── operations
│       └── example

您可以轻松更新API文件并重新生成服务器。当然,您仍然需要创建处理器来实现业务逻辑。

我的一些同事也使用了:https://github.com/protocolbuffers/protobuf
特别是Go语言版本:https://github.com/golang/protobuf

我们能够生成同时处理REST和gRPC的服务器,这可能会引起您的兴趣。

对于生产级REST API开发,我推荐使用Gin框架。Gin在性能、开发速度和稳定性方面都表现出色,是目前Go生态中最受欢迎的Web框架之一。

以下是一个简单的REST API示例:

package main

import (
    "net/http"
    "github.com/gin-gonic/gin"
)

type User struct {
    ID   string `json:"id"`
    Name string `json:"name"`
}

func main() {
    r := gin.Default()
    
    // 获取所有用户
    r.GET("/users", func(c *gin.Context) {
        users := []User{
            {ID: "1", Name: "John"},
            {ID: "2", Name: "Jane"},
        }
        c.JSON(http.StatusOK, users)
    })
    
    // 获取单个用户
    r.GET("/users/:id", func(c *gin.Context) {
        id := c.Param("id")
        user := User{ID: id, Name: "User " + id}
        c.JSON(http.StatusOK, user)
    })
    
    // 创建用户
    r.POST("/users", func(c *gin.Context) {
        var user User
        if err := c.BindJSON(&user); err != nil {
            c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
            return
        }
        c.JSON(http.StatusCreated, user)
    })
    
    r.Run(":8080")
}

Gin的优势包括:

  • 高性能的路由引擎
  • 内置JSON验证和绑定
  • 中间件支持
  • 完善的错误处理
  • 活跃的社区和良好的文档

安装命令:

go get -u github.com/gin-gonic/gin

对于需要更多企业级功能的场景,也可以考虑Echo框架,它在API设计和中间件生态系统方面同样表现优秀。

回到顶部