当前位置: 首页 > news >正文

REST 接口规范

REST 接口规范

一、命名规范

1. 文件命名

  • 规则: 小写字母 + 下划线(snake_case)
  • 示例:ui_train_online_request.go

2. 结构体命名

  • 请求结构体:{业务模块}Request
    • 示例:TrainOnlineRequest,TrainPlanRequest
  • 响应结构体:{业务模块}Result
    • 示例:TrainOnlineResult,TrainPlanResp
  • UI请求封装:Ui{业务模块}Request
    • 示例:UiTrainOnlineRequest,UiTrainRequest

3. 字段命名

  • JSON序列化: 小驼峰(camelCase)
  • 数据库字段: 下划线命名(snake_case)
  • 示例:

go

type TrainOnlineRequest struct { StudentId int64 `json:"studentId,string" gorm:"column:student_id"` TrainPlanId int64 `json:"trainPlanId,string" gorm:"column:train_plan_id"` StudentName string `json:"studentName" gorm:"column:student_name"` }

二、接口方法命名规范

基于UiSimpleQR的通用方法,定义以下标准方法:

方法名功能描述HTTP方法路径示例
UiList()分页查询列表GET/api/trainOnline/list
UiSave()新增保存POST/api/trainOnline
UiUpdate()更新数据PUT/api/trainOnline
UiDeleteByIdResult()按ID删除DELETE/api/trainOnline/{id}
UiGetById()按ID查询GET/api/trainOnline/{id}
Patch{Action}()局部更新(如签到、通知)PATCH/api/trainOnline/{id}/signIn

三、UiSimpleQR 泛型参数约定

go

type Ui{业务模块}Request struct { basedto.BaseEntity uiframe.UiSimpleQR[*QueryRequest, *DbEntity, *ResultResponse] }
参数位置类型说明
Q (第1位)查询请求体*TrainOnlineRequest
E (第2位)数据库实体*planentity.TrainOnline
R (第3位)响应结果*TrainOnlineResult

四、请求参数结构

1. 查询参数(Query)

go

type TrainOnlineRequest struct { // 基础字段 Id int64 `json:"id,string"` StudentId int64 `json:"studentId,string"` TrainPlanId int64 `json:"trainPlanId,string"` // 模糊查询字段 UserNo string `json:"userNo"` StudentName string `json:"studentName"` Phone string `json:"phone"` // 枚举/状态字段 TrainMode int32 `json:"trainMode"` TrainType int32 `json:"trainType"` Status []int16 `json:"status"` // 时间范围 DateRange *dateutils.DateRange `json:"dateRange"` }

2. 分页参数(继承自 SimpleParam)

字段类型说明默认值
pageCurrentint当前页码1
pageSizeint每页大小10
orderBysstring排序字段startAt|desc
keywordstring通用搜索关键字-

五、响应结构规范

1. 分页响应

go

type PageResult[R any] struct { Code int `json:"code"` // 状态码 Msg string `json:"msg"` // 提示信息 Total int64 `json:"total"` // 总记录数 Data []*R `json:"data"` // 数据列表 }

2. 操作响应

go

type IchubResult struct { Code int `json:"code"` // 0成功,非0失败 Msg string `json:"msg"` // 提示信息 }

3. 单条数据响应

go

type TrainOnlineResult struct { simplemodel.Model `json:"model"` // 基础模型字段 StudentId int64 `json:"studentId,string"` TrainPlanId int64 `json:"trainPlanId,string"` StudentName string `json:"studentName"` // ... 其他业务字段 // 关联实体 Actual planentity.Actual `json:"actual"` TrainSign planentity.TrainSign `json:"trainSign"` CoachOn planentity.CoachOn `json:"coach"` }

六、接口路径规范

标准 CRUD 路径

操作HTTP方法路径说明
列表查询GET/api/{module}/list分页查询
单条查询GET/api/{module}/{id}按ID查询
新增POST/api/{module}新增数据
更新PUT/api/{module}/{id}更新数据
删除DELETE/api/{module}/{id}删除数据
批量删除DELETE/api/{module}/batch批量删除
局部更新PATCH/api/{module}/{id}/{action}如签到、通知

路径命名规则

  • 使用小驼峰命名:/api/trainOnline/list
  • 避免下划线:不推荐/api/train_online/list

七、错误码规范

错误码含义使用场景
200成功操作成功
-1参数错误请求参数校验失败
-2用户不存在用户未登录或不存在
-3权限不足无操作权限
-4数据不存在查询/操作的数据不存在
-5业务错误业务逻辑校验失败

八、代码实现示例

1. UI请求结构体定义

go

type UiTrainOnlineRequest struct { basedto.BaseEntity uiframe.UiSimpleQR[*TrainOnlineRequest, *planentity.TrainOnline, *TrainOnlineResult] } func NewUiTrainOnlineRequest() *UiTrainOnlineRequest { var req = &UiTrainOnlineRequest{} req.InitDao() req.initQuery() return req }

2. 查询初始化

go

func (self *UiTrainOnlineRequest) initQuery() *UiTrainOnlineRequest { self.SetBeforeQuery(func() { self.BuildGeneralParams(self.PageDbRequest) self.DbEq("opc_id", self.GetOpcId()) // 业务条件 if self.Query.StudentId > 0 { self.DbEq("student_id", self.Query.StudentId) } if self.Query.TrainPlanNo != "" { self.DbLike("train_plan_no", self.Query.TrainPlanNo) } }) return self }

3. 标准方法实现

go

func (self *UiTrainOnlineRequest) UiList() *pagemodel.PageResult[*TrainOnlineResult] { // 前置校验 if self.GetUserId() == 0 { return pagemodel.PageFail[*TrainOnlineResult]("用户不存在") } // 执行查询并转换 var ret = self.PageTo(self.List()) // 数据填充 for i := range ret.Data { // 关联数据填充逻辑 } return ret }

九、最佳实践

  1. 统一响应格式: 所有接口返回统一的PageResultIchubResult结构
  2. 错误处理: 使用pagemodel.PageFail()basedto.ResultFailUser()统一错误返回
  3. 日志记录: 在失败路径记录错误日志golog.Error(ret)
  4. 参数校验: 在initQuery()中完成参数校验和条件组装
  5. 权限控制: 通过self.User判断用户角色和权限

此规范基于现有代码模式和UiSimpleQR接口设计,确保与项目架构保持一致。

http://www.rkmt.cn/news/1491926.html

相关文章:

  • 告别加班!用普元EOS Studio拖拽式开发,一天搞定一个审批模块(附实战截图)
  • 从V1到V3+:一文搞懂DeepLab系列的核心演进与PyTorch实战要点
  • 如何优化Spring Boot应用的第三方API调用
  • 莱阳SEO优化公司|品牌搜索曝光升级,莱阳网站优化公司能力解析 - 招财兔数字员工
  • 滨州滨城区黄金回收 卖黄金怎么不被坑 - 润富黄金回收
  • Hindsight 内存爆炸 4 个词排查清单:9,284 条 6 成是 SSH 调试日志——Agent 标签系统的实战复盘
  • 预训练 vs 后训练:用“培养一个员工“讲清大模型是怎么炼成的
  • FusionCompute CNA 8.0.0部署实战:在VMware里规划一个“生产级”测试环境(含IP、资源规划表)
  • 拒绝盲从!2026公考培训四强测评:粉笔师资与环境实测报告
  • 别再乱铺地了!从Henry Ott的经典理论,聊聊PCB地平面设计的那些‘坑’与实战避雷指南
  • 团队级AI编码协作的五层契约系统
  • 从4G到5G再到6G:MIMO技术到底是怎么‘卷’起来的?聊聊Massive MIMO和波束赋形的那些事儿
  • 从直播卡顿到秒开流畅:一次搞定FFmpeg播放器参数调优全流程
  • Win11下MATLAB 2021b连接USRP X310避坑指南(含UHD 3.15.0固件烧写)
  • 双视角训练策略提升审稿人匹配准确率
  • MuleSoft企业级AI编排:打通LLM与核心系统的最后一公里
  • 从四条设计准则到代码实现:深入理解ShuffleNet V2为何比V1更高效(PyTorch源码解析)
  • Web应用项目开发学习心得|从零基础到实战开发的成长总结
  • 汕大毕设实战包:用关节角度做动作识别,含论文、代码、数据和可视化结果
  • 如何用NCMconverter轻松解锁网易云音乐ncm格式:5个实用技巧让你的音乐自由播放
  • Agentic工作坊报名 | 一个 Skill 能走多远? 来一个下午亲手验证
  • 手把手拆解:一个CMOS反相器的开关,如何‘炸’出10A瞬态电流?
  • 从广告点击到下单转化:阿里ESMM模型如何用多任务学习解决CVR预估的样本偏差难题
  • 别再死记硬背Xception结构了!用TensorFlow 2.x从InceptionV3到Xception,手把手带你理解深度可分离卷积的演进
  • HumanEgo——从半小时人类第一视角视频中进行零样本学习的4大关键点:对人类手臂进行图像修补、将每只手和每个物体编码为一个交互中心 Token、流匹配策略、稠密辅助目标
  • 别再傻傻用\n了!手把手教你用飞书富文本API实现完美消息换行
  • 从战场到药房:微分方程模型如何悄悄改变我们的世界?聊聊3个意想不到的应用
  • 潜山SEO优化公司|品牌搜索曝光升级,潜山网站优化公司能力解析 - 招财兔数字员工
  • 模型上线不是终点:生产级ML系统集成与稳定性实战指南
  • 别再只看PSNR了!用SRGAN和感知损失让你的超分结果更‘真实’