Go 中的 Rest API——使用 net/http 与像 Gorilla 这样的库
Rest APIs in Go - using net/http vs. a library like Gorilla
我看到 Go 本身有一个包 net/http
,它足以提供您启动自己的 REST API 和 运行 所需的一切。但是,有多种框架;最受欢迎的可能是 gorilla
.
考虑到我今后需要做的主要事情之一是构建 REST API,它将访问一些后端存储(数据库、缓存等)以执行 CRUD
操作,是吗?很适合 Go 的标准库本身,还是我应该考虑使用一些框架?
通常,人们会编写一个新的库或框架来解决现有库中存在的问题。但是当实际需求很简单时,很多框架也会让事情变得更糟。
所以我有几个问题:
go lang 中的基本库是否足以支持 REST 的基本到中等功能?
如果我最终使用内置库并且明天必须更改它以使用某些框架(如大猩猩),那会怎样?difficult/costly?
框架是真正解决问题还是只是把简单的问题复杂化?
我将非常感谢有人在这里分享他的想法(他自己做出了这个选择),同时我研究了更多自己的想法。
内置的 net/http
包足以构建一个完整的 REST API。但是,一些库可以使构建 API 稍微容易一些,尤其是当 REST API 很复杂时。从内置设施更改为任何体面的框架都相对简单 - 它们通常接受 http.Handler
类型的处理程序。
不过,归根结底,这是一个极端情况下的选择。您可以做的最好的事情是检查每个可用的解决方案,对比和比较,并在可能的情况下使用最佳选项构建概念证明。第一手经验将是最好的指导。
net/http
包在大多数情况下可能已经足够了,但是如果你想简化你的开发,你应该使用 third-party 包,比如 Gorilla。
例如,net/http
的 ServeMux
在为固定 URL 路径路由传入请求方面做得很好,但对于使用变量的漂亮路径,您需要在使用 Gorilla 时实现自定义多路复用器,您将免费获得此内容。
另一个例子是如果你想指定 RESTful 资源
正确的 HTTP 方法,很难使用标准
http.ServeMux
,使用 Gorilla 的 mux
包时,
请求可以根据 URL host, path, path prefix,
方案、header 和查询值以及 HTTP 方法。
Gorilla 的一大优点是它与 net/http
软件包完全兼容,并且可以在将来被替换。
见1.
我完全鼓励您使用 Gorilla 的工具包来开发 REST 服务。
我看到 Go 本身有一个包 net/http
,它足以提供您启动自己的 REST API 和 运行 所需的一切。但是,有多种框架;最受欢迎的可能是 gorilla
.
考虑到我今后需要做的主要事情之一是构建 REST API,它将访问一些后端存储(数据库、缓存等)以执行 CRUD
操作,是吗?很适合 Go 的标准库本身,还是我应该考虑使用一些框架?
通常,人们会编写一个新的库或框架来解决现有库中存在的问题。但是当实际需求很简单时,很多框架也会让事情变得更糟。
所以我有几个问题:
go lang 中的基本库是否足以支持 REST 的基本到中等功能?
如果我最终使用内置库并且明天必须更改它以使用某些框架(如大猩猩),那会怎样?difficult/costly?
框架是真正解决问题还是只是把简单的问题复杂化?
我将非常感谢有人在这里分享他的想法(他自己做出了这个选择),同时我研究了更多自己的想法。
内置的 net/http
包足以构建一个完整的 REST API。但是,一些库可以使构建 API 稍微容易一些,尤其是当 REST API 很复杂时。从内置设施更改为任何体面的框架都相对简单 - 它们通常接受 http.Handler
类型的处理程序。
不过,归根结底,这是一个极端情况下的选择。您可以做的最好的事情是检查每个可用的解决方案,对比和比较,并在可能的情况下使用最佳选项构建概念证明。第一手经验将是最好的指导。
net/http
包在大多数情况下可能已经足够了,但是如果你想简化你的开发,你应该使用 third-party 包,比如 Gorilla。 例如,net/http
的ServeMux
在为固定 URL 路径路由传入请求方面做得很好,但对于使用变量的漂亮路径,您需要在使用 Gorilla 时实现自定义多路复用器,您将免费获得此内容。另一个例子是如果你想指定 RESTful 资源 正确的 HTTP 方法,很难使用标准
http.ServeMux
,使用 Gorilla 的mux
包时, 请求可以根据 URL host, path, path prefix, 方案、header 和查询值以及 HTTP 方法。Gorilla 的一大优点是它与
net/http
软件包完全兼容,并且可以在将来被替换。见1.
我完全鼓励您使用 Gorilla 的工具包来开发 REST 服务。