在Go语言中使用Rest APIs - 使用net/http还是像Gorilla这样的库?

21

我看到Go语言本身已经有一个net/http包,足以提供一切你需要的来搭建自己的REST API。然而,还有许多框架可供选择,最受欢迎的可能是gorilla

考虑到我未来需要做的主要事情之一就是构建REST API来访问一些后端存储(数据库、缓存等)以执行CRUD操作,我应该使用Go的标准库本身,还是应该考虑使用一些框架呢?

通常,人们会编写一个新的库或框架来解决现有库中存在的问题。但很多框架也会在实际需求简单时使问题变得更糟。

所以我有几个问题:

  1. Go语言的基本库是否足以支持REST的基本到中等功能?

  2. 如果我最终使用内置库,明天不得不改用某些框架(例如gorilla),这将会有多难/花费高昂?

  3. 框架是否真正解决了问题,还是只是把简单问题复杂化了?

如果有人能分享他的想法(他自己曾经做过这个选择),我将不胜感激。


你有哪些具体的使用案例想要实现? - user5547025
目前,它只是简单的Get请求(我的Api从某些后端存储中提取数据),它可以是数据库(Sql或No Sql)或缓存或两者兼而有之。将来它也可以是所有CRUD操作。话虽如此,还有其他事情需要考虑(良好的错误处理等)。 - Ankur Garg
2个回答

19
  1. net/http包对于大多数情况来说已经足够了,但如果你想简化开发,应该使用第三方包,如Gorilla。例如,net/httpServeMux在路由固定URL路径的传入请求时表现出色,但对于使用变量的漂亮路径,你需要实现自定义复用器,而使用Gorilla,你可以免费获得这个功能。

    另一个例子是,如果您想要指定RESTful资源与正确的HTTP方法,那么使用标准的http.ServeMux很难处理,而使用Gorilla的mux包,则可以基于URL主机、路径、路径前缀、协议头和查询值以及HTTP方法进行匹配。

  2. Gorilla的一个伟大优点是它与net/http包完全兼容,并且可以在未来被替换。

  3. 见1。

我完全鼓励您使用Gorilla的工具包开发REST服务。


1
非常感谢您,Shmulik,这正是我在这里寻找的答案类型。 - Ankur Garg
1
请记住,Gorilla 不是唯一的选择 - 我一直在使用 httprouter,它更加轻量级,并且我在使用它时取得了良好的成功。它没有那么多的功能,它在功能上介于内置包和 Gorilla 之间。 - Adrian
我喜欢大猩猩。请记住,该项目正在寻找新的维护人员。 - kintsukuroi
Gorilla项目将于2022年底归档。 Gorilla项目下的一些存储库现已归档,包括mux。 - papar

8
内置的net/http包足以构建完整的REST API。然而,一些库可以使构建API稍微容易一些,特别是如果REST API比较复杂。从内置设施更改为任何不错的框架相对简单 - 它们通常接受http.Handler类型的处理程序。
不过,这是一个非常具体情况下的选择。最好的方法是检查每个可用的解决方案,进行对比和比较,并使用顶级选项构建概念证明,如果可能的话。第一手经验将最好地指导您。

感谢您的回复,Adrian。是的,我同意并希望进行一些概念验证,以第一手探索更多事情。但是POC只能做一点点(我能做的就是简单的REST API,我认为这很容易,可能无法回答我在这里寻找的问题)。因此,我想在更广泛的开发人员论坛中询问那些使用Go构建东西的开发人员。您的回复为我提供了一些启示,并使我更加清晰地了解了这个问题。 - Ankur Garg

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接