Versions Compared
compared with
Key
- This line was added.
- This line was removed.
- Formatting was changed.
在规范路由下,同一接口如何支持多种HTTP Method
提交方式
一个接口应当只做一件事情,首先,一个接口应当只做一件事情,HTTP Method
是有意义的(例如RESTful
接口风格设计),一个接口支持多种HTTP Method
方式是接口设计不合理,在规范路由下不支持。建议重新审视接口设计。方式通常是接口设计不合理,建议重新审视接口设计。
通常是不存在一个API
需要绑定多个HTTP Method
的场景的。例如,拿用户接口来讲,一个例如,拿用户接口来讲,一个CURD
接口在RESTful
实现应当有4-5
个API
定义,实现不同的业务逻辑。那么可能存在以下API
定义的RESTful
接口:
Code Block | ||
---|---|---|
| ||
接口名称 Method Path 创建用户 PUT /user 用户列表 GET /user 用户详情 GET /user/{uid} 修改用户 POST /user/{uid} 删除用户 DELETE /user/{uid} |
不存在一个API
需要绑定多个HTTP Method
的场景。
ALL
这种请求处理路由,在标准的OpenAPI
协议里面不支持,可以不使用规范路由,而是使用普通的路由注册方式,将方法定义为func(r *ghttp.Request)
即可。不同的路由注册方式可以结合使用,虽然不是很推荐。如果确实存在一个接口支持多个HTTP Method的场景,那么可以通过在Meta标签中的method属性中使用英文,号分隔各个HTTP Method即可,例如:
Code Block | ||
---|---|---|
| ||
type SaveReq struct {
g.Meta `path:"/user/{uid}" method:"put,post" summary:"保存用户" tags:"用户管理"`
Uid int64 `dc:"用户ID"`
Name string `dc:"用户名"`
// ...
} |
使用默认提供的Response
结构体,如何让Data
字段只返回数组而无需指定名称的键值对
使用类型别名即可。
源码地址:https://github.com/gogf/gf/tree/master/example/httpserver/response_with_json_array
结果示例:
Panel | ||
---|---|---|
| ||
|