如何在 Golang 中构建生产级 REST API - 猿码设计师

如何在 Golang 中构建生产级 REST API - 猿码设计师icon-default.png?t=M4ADhttps://www.yuanmadesign.com/ymdesign/go-router

有一种说法是,用 golang 编写的 API 不能像其他语言那样简单和惯用。实际上,我遇到过很多 REST API 代码库,这些代码库复杂混乱,其中包含很多的抽象,最终损害了可读性和可维护性。

在这个系列中,我们将介绍如何构建一个生产级的 todo list rest api,它将有机地增长,从代码结构和路由等开始,然后添加一个 mongo db 和一个 badger 数据存储 层,然后是认证层。

我们将在本系列中使用 chi 路由器。

为什么是chi?为什么不是标准库、Gin 或 router-x?

这并不重要。无论您使用什么路由器,文中将讨论的概念都适用。但是下面的清单让我认为 chi router 是比大多数替代品更好的选择:

  • 100% 兼容 net/http – 使用生态系统中也兼容 net/http 的任何 http 或中间件 pkg
  • 专为模块化/可组合 API 设计 – 中间件、内联中间件、路由组和子路由器安装
  • 没有外部依赖 – Go 1.7+ stdlib + net/http
  • 稳健 – 在 Pressly、CloudFlare、Heroku、99Designs 和许多其他公司进行生产
  • 轻量级——在 ~1000 LOC 中用于 chi 路由器

是的,它真的很快。我最喜欢的是,您为其他 net/http 兼容路由器编写的旧 http 处理程序和中间件也可以在这里工作。

让我们开始吧。首先我们创建我们的 main.go。我们计划的基石:

上面代码中一些最佳实践的亮点

1. 将路由分组到各个包中的逻辑组,然后挂载这些路由:

r.Mount("/api/todo", todo.Routes())

2. 版本API,所以你可以在不破坏旧客户端的情况下进行api更新:

router.Route("/v1", ....)

3. 广泛使用中间件。大多数被多个路由大量使用的代码都可以变成可链接的中间件。例如身份验证、设置响应标头、压缩、请求记录、速率限制等。

chi 路由器有一个名为 walk 的方法。该方法接收:

  • 一个路由器
  • 一个回调

路由器上定义的每个路由调用回调,并接收 4 个参数:

  • 为路由定义的方法
  • 实际的路由字符串
  • 处理给定路由请求的处理程序(函数)
  • 为给定路由定义的中间件列表(中间件只是在调用处理程序之前调用的简单函数,因此它们用于预处理请求、身份验证等)

在我的示例中,我只是简单地走过路由器并打印所有定义的routes。这有助于我一目了然地查看所有可用routes。

接下来我们构建 todo 包,它实际上保存了我们的 todo 逻辑。

注意事项

  • todo 包有一个返回所有路由的函数。的路线安装在 main.go 中。在实践中,我通常会将这些路由添加到名为 routes.go 的文件中,因此在包中很容易找到。
  • 处理程序具有 func (w http.ResponseWriter,r *http.Request) 的函数签名,这意味着如果您在标准库中使用 net/http,您将编写的处理程序没有不同的形式。
  • 使用 render.JSON 它只是 encoding/json 的一个包装器,它会自动转义 JSON 响应中的所有 html,并将内容类型设置为 application/json
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值