这个开发规范,完全出于七镜平时的工作经验,方便七镜平台发使用,可能与业内广泛流传的开发规范有悖!
一、服务端
A、命名规范
- 加s表示单词复数,不遵循英语语法规范,诸如不规则变换的复数表示形式统统不用考虑。
- [2023-09-03更新]函数的
入参类型
为函数名+Req
;函数的入参命名为interface+函数名+Req
;函数的出参命名为函数名+Resp
。
type GenerateTokenReq struct { TokenType string `json:"token_type"` // 令牌类型:varchar(10) 枚举 FromId string `json:"from_id"` // 颁发者:varchar(36) uuid Topic string `json:"topic"` // 主题,varchar(10) 枚举 ToId string `json:"to_id"` // 受众:varchar(36) uuid DurationAccess string `json:"duration_access"` //过期时间:varchar(10) } type GenerateTokenResp struct { Access string `json:"access"` Expires time.Time `json:"expires"` } func GenerateToken(interfaceGenerateTokenReq interface{}) (generateTokenResp GenerateTokenResp, err error) { /* 令牌类型:varchar(10) 枚举 颁发者:varchar(36) uuid 主题,varchar(10) 枚举 受众:varchar(36) uuid 颁发时间:varchar(10) 过期时间:varchar(10) */ var generateTokenReq GenerateTokenReq switch interfaceGenerateTokenReq.(type) { case GenerateTokenReq: generateTokenReq = interfaceGenerateTokenReq.(GenerateTokenReq) default: return GenerateTokenResp{}, errors.New("params type error: type of params must be GenerateTokenReq") } ...... }
3.[2023-09-26更新]调用第三方sdk时,函数名的第一个单词应当为第三方sdk的标识(以调用腾讯云的短信api为例):
func TencentSmsSendMessage(interfaceTencentSmsSendMessageReq interface{}) (tencentSmsSendMessageResp TencentSmsSendMessageResp, err error) { var tencentSmsSendMessage TencentSmsSendMessageReq switch interfaceTencentSmsSendMessageReq.(type) { case TencentSmsSendMessageReq: tencentSmsSendMessage = interfaceTencentSmsSendMessageReq.(TencentSmsSendMessageReq) default: return TencentSmsSendMessageResp{}, errors.New("params type error: type of params must be TencentSmsSendMessageReq") } log.Println(tencentSmsSendMessage) return TencentSmsSendMessageResp{}, nil }
B、接口规范
- 接口返回结构体中,第1级包含
code
、content
、count
、msg
4个字段。其中code
表示状态码,content
表示实际返回的数据,必须是以序列(数组)形式返回,count
表示实际返回的数据的条数,msg
表示服务端消息或描述。第2级msg
,包含成功消息success
和失败消息fail
。
type ResponseCommon struct { //common response body struct Code int `json:"code"` Content interface{} `json:"content"` Count int64 `json:"count"` Msg Message `json:"msg"` } type Message struct { Success string `json:"success"` Fail string `json:"fail"` }
2.查询接口不区分详情数据和列表数据,即实际返回数据永远是序列(数组),详情数据就是数组长度为1的特殊情况。
二、客户端
- 导入图片时,图片变量命名规范为【图片格式_实际意义】,比如:
import PNG_DEFAULT from "./image/default.png" import JPG_WX from './image/wx.jpg'
2.[2023-08-07更新]每一个实体对应两种展示页面,其一是详情页,其二是列表页(一般列表页作为详情页的入口)。实体详情页面命名为【实体】,实体列表页面命名为【实体-list】比如:
// 产品下载详情页 production-download // 新闻详情页 news // 产品下载列表页 production-download-list // 新闻列表页 news-list