7.1 KiB
7.1 KiB
代码规范
本篇规范制定了代码风格的相关标准,以确保团队开发时代码间具有较高程度的技术互通性。
定义
大驼峰
: 首字母大写的驼峰式 StudlyCase小驼峰
: 首字母小写的驼峰式 camelCase蛇形
: 下划线链接的小写 snake_case链式
: 短线链接的小写 kebab-case常数式
: 全部大写字母 CONSTENT_CAST标题式
: 每个单词首字母大写 Title Case点式
: 英文.分割 dot.cast分式
: 英文:分割 semicolon:cast
能愿动词
必须 (MUST)
:绝对,严格遵循,请照做,无条件遵守一定不可 (MUST NOT)
:禁令,严令禁止应该 (SHOULD)
:强烈建议这样做,但是不强求不该 (SHOULD NOT)
:强烈不建议这样做,但是不强求可以 (MAY)
和可选 (OPTIONAL)
:选择性高一点,在这个文档内,此词语使用较少
文件夹及文件
- 存放类的文件夹
应该
以大驼峰
的方式命名 - 资源文件夹
应该
以蛇形
的方式命名 - 类的文件命名
必须
以大驼峰
的方式命名,并且文件名和类名一致 - 其他的php文件命名
必须
以蛇形
的方式命名
基础规范
- 每个类
应该
都独立为一个文件,且命名空间必须
符合目录层级 - 类的命名
必须
遵循大驼峰
命名规范 - 类的常量
必须
遵循常数式
命名规范 - 类的属性
应该
遵循小驼峰
命名规范,私有属性应该
使用'_'开始 - 类的方法
必须
遵循小驼峰
命名规范 - 全局函数
必须
遵循蛇形
命名规范 - 变量的命名
应该
遵循小驼峰
命名规范
单数 or 复数?
Route
资源路由路由 URI 必须 使用复数形式,如:
/photos/create
/photos/{photo}
错误的例子如:
/photo/create
/photo/{photo}
Model
- 数据模型类名
必须
为「单数」, 如:App\Models\Photo
- 类文件名
必须
为「单数」,如:app/Models/Photo.php
- 数据库表名字
必须
为「复数」,多个单词情况下使用「Snake Case」 如:photos
,my_photos
- 数据库表迁移名字
必须
为「复数」,如:2014_08_08_234417_create_photos_table.php
- 数据填充文件名
必须
为「复数」,如:PhotosTableSeeder.php
- 数据库字段名
必须
为「Snake Case」,如:view_count
,is_vip
- 数据库表主键
必须
为「id」 - 数据库表外键
必须
为「resource_id」,如:user_id
,post_id
- 数据模型变量
必须
为「resource_id」,如:$user_id
,$post_id
Controller
资源控制器 必须
使用资源的单数形式,如:
- 类名:
PhotoController
- 文件名:
PhotoController.php
错误的例子如:
- 类名:
PhotosController
- 文件名:
PhotosController.php
Service
服务层 必须
使用资源的单数形式,如:
- 类名:
PhotoService
- 文件名:
PhotoService.php
错误的例子如:
- 类名:
PhotosService
- 文件名:
PhotosService.php
Repository
仓库层 必须
使用资源的单数形式,如:
- 类名:
PhotoRepository
- 文件名:
PhotoRepository.php
错误的例子如:
- 类名:
PhotosRepository
- 文件名:
PhotosRepository.php
API接口规范
路由
- 所有API接口
必须
通过路由文件下的api.php
进行定义,其他接口如文件上传、第三方授权登录必须
通过路由文件下web.php
进行定义 - 所有路由的前缀
必须
以Service
的链式
方式定义 - 所有路由
必须
同时兼容GET
和POST
两种请求方式
数据处理
对于API当中的正确和异常的处理,各家公司的方式各有不同。有的将所有返回的HTTP状态码均设为200,错误在json中以全局错误码设定;也有将HTTP状态码作为错误的判断标准。
综合考虑前后端分离的开发方式,以及PHP代码的可读性。本项目采用以HTTP状态码定义请求状态。
返回数据 必须
遵循以下规范:
{
"code" => 0,
"message" => "正确",
"data" => $data
}
- code: 0表示请求成功, 其他均为错误,错误码可自定义
- message: 请求提示
- data: 返回的数据结果
对于请求是否成功,以是否是预期的返回来进行判断。如遇 参数不合法、未找到数据、未登录等都
必须
使用错误的放回形式
所有请求都应该响应HTTP响应码,请仔细阅读以下HTTP状态码含义,或与传统HTTP状态码含义有所不同:
200: 请求成功,前端需要提示 message 信息 201: 请求成功,前端不需要提示 message 信息 202: 请求失败,前端不需要提示错误 message 信息 400及以上的状态码均表示请求失败,且前端需要提示错误 message 信息
以下HTTP状态码均需要前端提示出,错误信息可自定义
- 400: (错误请求) 请求失败,请稍后重试
- 401: (未授权) 用户未登录
- 402: (需要付费) 该资源需要付费获取
- 403: (禁止) 用户没有权限
- 404: (未找到) 未找到数据
- 405: (方法禁用) 请求方法不允许
- 406: (不接受) 服务器返回的数据错误
- 407: (需要代理授权) 授权方没有权限
- 408: (请求超时) 请求其他API接口超时
- 409: (冲突) 请求太快,请休息一下 | 遇到加锁等
- 410: (已删除) 请求的数据已删除
- 411: (参数长度错误) 请求的字段过长
- 412: (未满足前提条件) 请先进行XX操作
- 413: (请求实体过大) 上次的文件过大
- 414: (请求的 URI 过长) 请求的 URI(通常为网址)过长,服务器无法处理。
- 415: (不支持的媒体类型) 文件格式不正确
- 416: (搜索条件有误) 搜索条件有误,如时间不正确等
- 417: (未满足期望值) 请求头部不正确
- 418: (彩蛋) 虽然出错了,但获取到了彩蛋
- 421: (备用)
- 422: (备用)
- 423: (备用)
- 424: (备用)
- 425: (备用)
- 426: (备用)
- 428: (备用)
- 429: (备用)
- 431: (备用)
- 451: (法律不允许) 该访问因法律的要求而被拒绝
- 500+ 500以上错误为服务器错误,将由框架统一输出
可使用全局辅助函数进行正确输出处理:
return res($data = null, $message = '', $status = 200, $headers = [], $options = 256)
可使用全局辅助函数进行错误输出处理:
// 其实不要return也是可以的,但是建议加上表示程序中断
return err($message = null, $code = -1, $data = null, $statusCode = null, $headers = [], $options = 0)
其他规范
- 数据库字段名
必须
遵循蛇形
命名规范 - 缓存的键名
必须
遵循分式
命名规范 - Redis的键名
必须
遵循分式
命名规范
附: 辅助转换全局函数
// 转为大驼峰
studly_case($string);
// 转为小驼峰
camel_case($string);
// 转为蛇形
snake_case($string);
// 转为链式
kebab_case($string);
// 转为常数式
constent_cast($string);
// 转为标题式
title_case($string);
// 转为点式
dot_cast($string);
// 转为分式
semicolon_cast($string);