API 定义完整示例

api 示例

下文仅展示 api 文件的完整写法和对应语法块的功能说明,如需查看 api 规范定义,可参考 《API 规范》

  1. syntax = "v1"
  2. info (
  3. title: "api 文件完整示例写法"
  4. desc: "演示如何编写 api 文件"
  5. author: "keson.an"
  6. date: "2022 年 12 月 26 日"
  7. version: "v1"
  8. )
  9. type UpdateReq {
  10. Arg1 string `json:"arg1"`
  11. }
  12. type ListItem {
  13. Value1 string `json:"value1"`
  14. }
  15. type LoginReq {
  16. Username string `json:"username"`
  17. Password string `json:"password"`
  18. }
  19. type LoginResp {
  20. Name string `json:"name"`
  21. }
  22. type FormExampleReq {
  23. Name string `form:"name"`
  24. }
  25. type PathExampleReq {
  26. // path 标签修饰的 id 必须与请求路由中的片段对应,如
  27. // id 在 service 语法块的请求路径上一定会有 :id 对应,见下文。
  28. ID string `path:"id"`
  29. }
  30. type PathExampleResp {
  31. Name string `json:"name"`
  32. }
  33. @server (
  34. jwt: Auth // 对当前 Foo 语法块下的所有路由,开启 jwt 认证,不需要则请删除此行
  35. prefix: /v1 // 对当前 Foo 语法块下的所有路由,新增 /v1 路由前缀,不需要则请删除此行
  36. group: g1 // 对当前 Foo 语法块下的所有路由,路由归并到 g1 目录下,不需要则请删除此行
  37. timeout: 3s // 对当前 Foo 语法块下的所有路由进行超时配置,不需要则请删除此行
  38. middleware: AuthInterceptor // 对当前 Foo 语法块下的所有路由添加中间件,不需要则请删除此行
  39. maxBytes: 1048576 // 对当前 Foo 语法块下的所有路由添加请求体大小控制,单位为 byte,goctl 版本 >= 1.5.0 才支持
  40. )
  41. service Foo {
  42. // 定义没有请求体和响应体的接口,如 ping
  43. @handler ping
  44. get /ping
  45. // 定义只有请求体的接口,如更新信息
  46. @handler update
  47. post /update (UpdateReq)
  48. // 定义只有响应体的结构,如获取全部信息列表
  49. @handler list
  50. get /list returns ([]ListItem)
  51. // 定义有结构体和响应体的接口,如登录
  52. @handler login
  53. post /login (LoginReq) returns (LoginResp)
  54. // 定义表单请求
  55. @handler formExample
  56. post /form/example (FormExampleReq)
  57. // 定义 path 参数
  58. @handler pathExample
  59. get /path/example/:id (PathExampleReq) returns (PathExampleResp)
  60. }