news 2026/6/20 1:30:04

REST 接口规范

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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接口设计,确保与项目架构保持一致。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 8:50:40

QQ音乐加密文件解密终极指南:qmcdump让音乐回归自由

QQ音乐加密文件解密终极指南:qmcdump让音乐回归自由 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump 你是否曾…

作者头像 李华
网站建设 2026/6/9 8:43:22

数据科学工作流操作系统:四层架构与生产级工具链实践

1. 这不是工具清单,而是一套可运转的数据科学工作流操作系统“Your Data Science Toolbox — What is Inside?” 这个标题乍看像一本入门书的副标题,但在我带过27个企业级数据项目、亲手搭建过14套生产环境数据栈、给金融、电商、医疗、制造四类行业客户…

作者头像 李华
网站建设 2026/6/9 8:42:20

从‘A Study on’到顶刊标题:用AI工具辅助优化你的论文标题与关键词(附Prompt模板)

科研标题革命:AI驱动的高影响力论文标题生成方法论 在学术出版的激烈竞争中,论文标题是研究成果的第一张名片。一个平庸的标题可能让突破性发现埋没在文献海洋中,而一个精心设计的标题则能显著提升论文的被引率和传播度。传统学术写作训练往往…

作者头像 李华
网站建设 2026/6/9 8:42:08

Mythos安全模型:通用AI驱动的自动化漏洞挖掘与利用链生成

1. 项目概述:一场静默却震耳欲聋的AI能力跃迁这周,整个AI安全圈没有爆炸性新闻稿,没有铺天盖地的发布会直播,只有一份措辞克制、数据密集的系统卡片(System Card)和一份由英国AI安全研究所(AISI…

作者头像 李华