常见后端开发规范(PHP)

今天主管要求我们每个人都上交一份代码开发规范,我百度了一下,很多说的都不是特别好,要么就太基础,不符合实际的开发过程,所以下面结合我这几年的开发感悟,写一点,如有错误,请指正,一定虚心接受:

代码:

  1. 变量定义:小写,采用蛇形命名法,简明达意,避开系统关键词
  2. 方法名:小写,采用蛇形命名法,简明达意,避开系统函数
  3. 类名:首字母大写,采用蛇形命名法(或命名空间),避开系统类名
  4. Oop编程,少堆无脑传参func, 多写注释,避免过度优化和冗余
  5. 编码基本规则遵循psr1~4即可
  6. 遵循基本设计模式,逻辑向上(历史)兼容性
  7. 工具类统一封装,如curl,excel,qrcode等,方便他人
  8. 数据库常量定义:区分类型(sql,nosql),主从,读写,缓存,使用类型等
  9. 尽量使用composer管理包文件
  10. Web请求禁止循环查询,禁止无法命中主要索引的大表关联查询,禁止使用sql处理主要代码逻辑
  11. 注意安全性问题,如注入,提权,流量攻击等
  12. 数据结构
    1. 对外接口
      1. 基本输出格式json:【‘data’,‘msg’,‘code’】
      2. 文档:定义必要请求字段,类型及说明,请求头header,请求方式post/get,返回字段,类型,说明
      3. 可能需要定义:版本号,加密方式(jwt),签名等
    2. 对内部数据提供
      1. 语言内,框架内:方法调用
      2. 跨语言/框架:rpc调用(如使用hprose)
      3. 所有请求走内网,禁止数据公网裸奔
  13. 命令行脚本查询需评估查询sql效率与资源占用,酌情考虑执行时间,单次查询命中数据过多需分页处理
  14. 注意缓存,异步,队列等中间件的使用,提高系统健壮性
  15. 使用git,切分支协作开发和版本管理
  16. 开发需注意上线时依次考虑: 合并分支,解决冲突,生产建表/增改字段,常量增/改,脚本执行,依赖安装,常驻服务(重新)启动,最后才能发布新代码
  17. 尽量保持一致的开发风格,让任何人都能快速接手,定位,处理其他人的代码

数据库设计:

  1. 库名:小写,项目名_db结尾,如shop_db
  2. 表名:小写,tb_表名(蛇形命名),如tb_user_guest
  3. 字段名:小写,尽量两个单词组合使用(蛇形命名),避开系统关键字,函数
  4. 除主键,添加/更新时间等常用字段外,其余字段必须设置注释(comment)
  5. 单表字段尽量不超过30个,并根据业务给予适当的类型和长度
  6. 唯一性高,常用查询字段(=)需设置索引(一般单表设置不超过5个索引),联合索引遵循最左原则
  7. 部分危险操作前需备份数据库/表(如脚本,sql批量刷新数据库/表内容)
  8. Nosql,空间换时间,搜索服务处理mysql无法处理的问题
  9. 隔离权限,禁止生产和测试环境数据服务器可互访问,避免产生脏数据

服务器:

  1. 主机名:遵循 功能-区域-编号 命名规则
    1. 功能:app-线上环境,dev-开发环境,qa-测试环境,beta-预发布环境,cache-缓存,bi-服务数据,cdn-内容分发,vpn-代理网关,db-数据,lb-负载均衡,dns-域名解析等
    2. 区域:上海-01,北京-02,杭州-03等
    3. 编号:一号机-001,二号机-002
    4. 示例:app-03-001代表:生产环境-杭州-一号机,vpn-02-005,代表:代理服务器-北京-五号机
  2. 域名、二级域名设计
    1. 简明达意,参考1-1如业务型shop.shuidi.cn,系统型bi.shuidi.cn
    2. 区分公/内网,如公网shop.shuidi.cn,内网shop.i.shuidi.cn 多了一个i,内部请求走内网域名
    3. 区分功能,如shop.dev.shuidi.cn, 同理qa-测试,beta-预发,生产环境一般不做特别声明
  3. 规范软件安装目录,版本,用户,权限(755,644或特别提出需要的权限足以,一般不给777和root)
  4. 谨慎处理服务器版本/软件版本升级,防止出现兼容性问题
  5. 开启服务器定期自动备份
  6. 定期清除非必要的垃圾日志,文件,缓存内容
  7. 开发需通过vpn才能访问服务器,设置复杂密码
  8. 公网端口按需开放,不需要的禁用
  9. 离职人员回收权限

Bug/log track:

  1. 规范服务器日志输出目录,日志结构,保存时长
  2. 规范业务日志的基本输出内容,如ip,from,keyword,type,content等
  3. Bug report 影响级别:b0,b1,b2 ,响应级别:p0,p1,p2
  4. 软件开发,测试,发布流程,版本和周期