aiDoc/examples/backend/api-example.md
API 层负责接收 HTTP 请求、从合适的位置提取参数、调用 Service、统一返回响应,并补全 Swagger 注释。
参数从哪里取,不是由“AI 习惯”决定,而是由下面几件事共同决定:
也就是说,API 层不应该机械地一律使用 ShouldBindJSON,而应该先判断参数来源,再选择对应取法。
ShouldBindJSONShouldBindQuery、c.Query(...)、c.DefaultQuery(...)c.Param(...)multipart/form-data: c.FormFile(...)、c.DefaultPostForm(...)、c.Request.FormValue(...)c.GetHeader(...)、c.Request.Header.Get(...)c.Cookie(...)下面这个示例演示的是 POST + JSON body 场景,所以这里使用 ShouldBindJSON。
package system
import (
"github.com/flipped-aurora/gin-vue-admin/server/model/common/response"
systemReq "github.com/flipped-aurora/gin-vue-admin/server/model/system/request"
"github.com/gin-gonic/gin"
)
// GetOrderList
// @Tags Order
// @Summary 分页获取订单列表
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param data body systemReq.OrderSearch true "分页和筛选参数"
// @Success 200 {object} response.Response{data=response.PageResult,msg=string} "返回列表、总数、分页信息"
// @Router /order/getOrderList [post]
func (o *OrderApi) GetOrderList(c *gin.Context) {
var pageInfo systemReq.OrderSearch
if err := c.ShouldBindJSON(&pageInfo); err != nil {
response.FailWithMessage(err.Error(), c)
return
}
list, total, err := orderService.GetOrderList(pageInfo)
if err != nil {
response.FailWithMessage("获取失败", c)
return
}
response.OkWithDetailed(response.PageResult{
List: list,
Total: total,
Page: pageInfo.Page,
PageSize: pageInfo.PageSize,
}, "获取成功", c)
}
multipart/form-dataresponse 包c.JSON(...),绕开统一响应ShouldBindJSONserver/api/v1/system/sys_user.goserver/api/v1/system/sys_dictionary.goserver/api/v1/system/auto_code_mcp.goserver/api/v1/example/exa_file_upload_download.goserver/utils/claims.go