当前位置: 首页 > 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.jsqmd.com/news/980197/

相关文章:

  • 【每日一题】LeetCode 11. 盛最多水的容器 TypeScript
  • Sqribble电子书自动化排版系统深度解析
  • 英雄联盟智能助手League Akari:3步实现游戏自动化与数据洞察的终极指南
  • 锐捷AC虚拟化(VAC)配置避坑指南:高职比赛实验中的同型号同版本要求详解
  • 如何优化Spring Boot应用的第三方API调用
  • AWS Glue + Athena:无服务器数据湖分析闭环实战指南
  • Transformer也能玩转高光谱图像分类?SpectralFormer论文精读与PyTorch复现避坑指南
  • 基于STM32物联网WiFi火灾烟雾自动灭火报警器Proteus仿真+代码+报告+视频
  • 从‘Hello World’到完整项目:我的Halcon视觉检测系统搭建全记录(附C#混合编程避坑指南)
  • 三菱FX PLC控制东芝4轴机械手完整工程包:带注释程序+信捷HMI+电气图+仿真软件
  • Claude Code 新手避坑指南:10 个常见错误与解决方案
  • 从家庭Wi-Fi到企业网络:手把手教你规划不同规模的局域网架构
  • 元器件库存管理革命:PartKeepr如何通过Octopart API集成实现智能数据同步
  • 别再让‘继承Bucket’坑了你!深入理解阿里云OSS的ACL权限模型与最佳实践
  • Qt 高级开发 029: QListWidget从基础条目到自定义微信式列表实战详析
  • 小程序毕业设计-基于Springboot+微信小程序的个性化漫画阅读推荐智能推荐、在线阅读、收藏评论系统的设计与实现(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • 莱阳SEO优化公司|品牌搜索曝光升级,莱阳网站优化公司能力解析 - 招财兔数字员工
  • ⚡高频高效王者|NTMFS5C430NLT1G 安森美原装 工业 / 车载通吃 178-9846-4801
  • 宠物一站式服务厂家的设备实测运行数据差异是多少?
  • 英红品牌的口碑怎么样?75年国货老牌的全球竞争力与品质真相
  • QQ音乐加密文件解密终极指南:qmcdump让音乐回归自由
  • 从广告点击到下单转化:阿里ESMM模型如何用PaddlePaddle解决CVR预估的样本偏差难题
  • 异常行为智能识别技术,筑牢监管场所预警类视频孪生防线
  • 告别零散图片!用Python和mbutil把地图瓦片打包成mbtiles文件(附完整脚本)
  • Hindsight 内存爆炸 4 个词排查清单:9,284 条 6 成是 SSH 调试日志——Agent 标签系统的实战复盘
  • 滨州滨城区黄金回收 卖黄金怎么不被坑 - 润富黄金回收
  • 微软独占游戏策略摇摆不定,《战争机器:E 日》独占能否推动 Xbox 销售?
  • 预训练 vs 后训练:用“培养一个员工“讲清大模型是怎么炼成的
  • 龙石数据中台 V3.9.0 升级 | 数据资产门户全面升级
  • FusionCompute CNA 8.0.0部署实战:在VMware里规划一个“生产级”测试环境(含IP、资源规划表)