上面的代码是一些最佳实践的重点
- 用一个单独的包来实现路由的逻辑,并将它们分好组,然后安装(mount) 它们:
r.Mount("/api/todo", todo.Routes())
- 给 API 打上版本,这样你就可以对 api 进行更新时,不会破坏旧的客户端:
router.Route("/v1", ....)
- 使用中间件作为扩展。使用了非常多路由的代码是非常笨重的,其实可以变成链接的中间件,像:授权,设置响应头部,压缩,请求日志,限速等。
笔者(基于 Ajinkya 在评论中提到的问题,我会更多的阐述 walk 方法):
chi 路由有一个方法叫做 walk。这个方法接收的参数:
A router
A callback.
每个被定义的路由都会被回调,并且接收 4 个参数:
路由定义的方法
实际路由的字符串
处理器(函数),处理给定路由的请求
给定路由中,定义过的中间件列表(中间件是一个比较简单的函数,它会在处理器被调用前调用,所以它们才会被使用在请求处理之前,授权等)
以我为例,我将简单地轮询路由并且打印所有被定义的路由。从而让我对所有可用的路由一目了然。
接下来我们构建一个 todo 包,它实际上保存了我们 todo 逻辑。
注意事项
todo 包有一个返回所有路由的方法。这些路由都是写在 main.go 文件中。 实际上我通常会把这些路由写在一个叫 routes.go 的文件中, 这样会很容易在包里找到.
处理程序具有
func (w http.ResponseWriter,r *http.Request)
的函数签名,这意味着这处理程序和你使用标准库的 net/http 写法没有不同。使用 render.JSON,一个 encoding/json 的封装, 它会自动转义你 JSON 响应中所有的 html,并设置 content-type 为 application/json
你被它有多简单吓到了吗?可以在 GitHub 上查看这个项目 https://github.com/tonyalaribe/todoapi/tre....
在我们本系列的下篇文章中, 我们会继续对配置和共享状态的支持。 大多数项目通常都需要额外的配置,例如数据库连接,等等。 我们将会在下篇文章里讨论这个。
推荐教程:《Go教程》
以上就是优雅的实现 Golang REST API 架构的详细内容,更多文章请关注木庄网络博客!!
相关阅读 >>
解决Go语言安装air框架时遇到Go: inconsistent vendoring问题
更多相关阅读请进入《Go》频道 >>

Go语言101
一个与时俱进的Go编程知识库。