在规范路由下,同一接口如何支持多种 HTTP Method 提交方式

首先,一个接口应当只做一件事情, HTTP Method 是有意义的(例如 RESTful 接口风格设计),一个接口支持多种 HTTP Method 方式通常是接口设计不合理,建议重新审视接口设计。

通常是不存在一个 API 需要绑定多个 HTTP Method 的场景的。例如,拿用户接口来讲,一个 CURD 接口在 RESTful 实现应当有 4-5API 定义,实现不同的业务逻辑。那么可能存在以下 API 定义的 RESTful 接口:

  1. 接口名称 Method Path
  2. 创建用户 PUT /user
  3. 用户列表 GET /user
  4. 用户详情 GET /user/{uid}
  5. 修改用户 POST /user/{uid}
  6. 删除用户 DELETE /user/{uid}

如果确实存在一个接口支持多个 HTTP Method 的场景,那么可以通过在 Meta 标签中的 method 属性中使用英文 , 号分隔各个 HTTP Method 即可,例如:

  1. type SaveReq struct {
  2. g.Meta `path:"/user/{uid}" method:"put,post" summary:"保存用户" tags:"用户管理"`
  3. Uid int64 `dc:"用户ID"`
  4. Name string `dc:"用户名"`
  5. // ...
  6. }

使用默认提供的 Response 结构体,如何让 Data 字段只返回数组而无需指定名称的键值对

使用类型别名即可。

源码地址: gf/example/httpserver/response-with-json-array

结果示例:

规范路由-常见问题 - 图1