签名开关

概述

在 go-zero 中,我们通过 api 语言来声明 HTTP 服务,然后通过 goctl 生成 HTTP 服务代码,在之前我们系统性的介绍了 API 规范

在 go-zero 中,已经内置了签名功能,我们可以通过 api 语言来开启签名功能,然后通过 goctl 生成签名代码,这样我们就可以在 HTTP 服务中使用签名功能了。

签名开关

在 api 语言中,我们可以通过 signature 关键字来开启签名功能,假设我们有一个 signdemo 服务,我们有一个接口如下:

  1. https://example.com/sign/demo

其对应的 api 语言如下:

  1. syntax = "v1"
  2. type (
  3. SignDemoReq {
  4. Msg string `json:"msg"`
  5. }
  6. SignDemoResp {
  7. Msg string `json:"msg"`
  8. }
  9. )
  10. @server (
  11. signature: true // 通过 signature 关键字开启签名功能
  12. )
  13. service sign-api {
  14. @handler SignDemo
  15. post /sign/demo (SignDemoReq) returns (SignDemoResp)
  16. }

我们来看一下生成的路由代码,完整代码点击 这里下载

  1. func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
  2. server.AddRoutes(
  3. []rest.Route{
  4. {
  5. Method: http.MethodPost,
  6. Path: "/sign/demo",
  7. Handler: SignDemoHandler(serverCtx),
  8. },
  9. },
  10. rest.WithSignature(serverCtx.Config.Signature),
  11. )
  12. }

可以看到,我们通过 rest.WithSignature 来开启签名功能,这样我们就可以在 HTTP 服务中使用签名功能了。