路由规则

概述

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

在 api 描述语言中,有特定的路由规则,这些路由规则并非和 HTTP 的路由规则完全引用,接下来我们来看一下 api 描述语言中的路由规则吧。

路由规则

在 api 描述语言中,路由需要满足如下规则

  1. 路由必须以 / 开头
  2. 路由节点必须以 / 分隔
  3. 路由节点中可以包含 :,但是 : 必须是路由节点的第一个字符,: 后面的节点值必须要在结请求体中有 path tag 声明,用于接收路由参数,详细规则可参考 路由参数
  4. 路由节点可以包含字母、数字(goctl 1.5.1 支持,可参考新版 API 解析器使用)、下划线、中划线

路由示例:

  1. syntax = "v1"
  2. type DemoPath3Req {
  3. Id int64 `path:"id"`
  4. }
  5. type DemoPath4Req {
  6. Id int64 `path:"id"`
  7. Name string `path:"name"`
  8. }
  9. type DemoPath5Req {
  10. Id int64 `path:"id"`
  11. Name string `path:"name"`
  12. Age int `path:"age"`
  13. }
  14. type DemoReq {}
  15. type DemoResp {}
  16. service Demo {
  17. // 示例路由 /foo
  18. @handler demoPath1
  19. get /foo (DemoReq) returns (DemoResp)
  20. // 示例路由 /foo/bar
  21. @handler demoPath2
  22. get /foo/bar (DemoReq) returns (DemoResp)
  23. // 示例路由 /foo/bar/:id,其中 id 为请求体中的字段
  24. @handler demoPath3
  25. get /foo/bar/:id (DemoPath3Req) returns (DemoResp)
  26. // 示例路由 /foo/bar/:id/:name,其中 id,name 为请求体中的字段
  27. @handler demoPath4
  28. get /foo/bar/:id/:name (DemoPath4Req) returns (DemoResp)
  29. // 示例路由 /foo/bar/:id/:name/:age,其中 id,name,age 为请求体中的字段
  30. @handler demoPath5
  31. get /foo/bar/:id/:name/:age (DemoPath5Req) returns (DemoResp)
  32. // 示例路由 /foo/bar/baz-qux
  33. @handler demoPath6
  34. get /foo/bar/baz-qux (DemoReq) returns (DemoResp)
  35. // 示例路由 /foo/bar_baz/123(goctl 1.5.1 支持)
  36. @handler demoPath7
  37. get /foo/bar_baz/123 (DemoReq) returns (DemoResp)
  38. }