Go中的Rest API - 使用net / http与像Gorilla这样的库

时间:2016-07-08 10:25:18

标签: rest go net-http gorilla

我看到Go本身有一个包let incomplete = R.wrap(R.filter, function(filter, array, isComplete) { return filter( R.whereEq( { complete: isComplete }), array ) }) incomplete(data, false); ,足以提供启动和运行自己的REST API所需的一切。然而,有各种各样的框架,最流行的可能是大猩猩。

考虑到我需要做的主要事情之一是构建REST API,它通常会访问一些后端存储(数据库,缓存等)以执行CRUD操作,与Go一起使用是否合适?标准库本身还是我应该考虑使用一些框架?

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

所以我几乎没有问题:

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

  2. 如果我最终使用内置库并且明天必须将其更改为使用某些框架(如大猩猩)那么努力会有多么困难/昂贵?

  3. 框架是真的解决问题还是只是简单地解决问题?

  4. 我非常感谢有人在这里分享他的想法(他自己做出这个选择),而我则更多地研究自己的想法。

2 个答案:

答案 0 :(得分:4)

  1. 对于大多数情况,net/http包可能已足够,但如果您想简化开发,则应使用第三方软件包,例如Gorilla。 例如,net/http' s ServeMux在路由传入的固定网址路径请求方面做得非常出色,但对于使用变量的漂亮路径,您需要实现自定义多路复用器,而使用Gorilla时正在免费获得这个。

    另一个例子是,如果要使用指定RESTful资源 正确的HTTP方法,很难使用标准 http.ServeMux,与大猩猩的mux套餐一样, 请求可以根据URL主机,路径,路径前缀, 方案,标头和查询值以及HTTP方法。

  2. Gorilla的一大好处是它与net/http包完全兼容,将来可以替代。

  3. 见1.

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

答案 1 :(得分:2)

内置的net/http包足以构建完整的REST API。但是,某些库可以使构建API稍微容易一些,特别是在REST API很复杂的情况下。从内置设施更改为任何体面的框架相对简单 - 它们通常接受http.Handler类型的处理程序。

最后,这是一个非常情境化的选择。您可以做的最好的事情是检查每个可用的解决方案,对比和比较,如果可能的话,用顶级选项构建概念证明。第一手经验将为您提供最佳指导。