Onebound技术规范文档


PHP

<p>[TOC]</p> <h3>命名规范</h3> <blockquote> <p>关于:方法名采用首字母小写的驼峰命名规范、变量名都用小驼峰 (对于老项目有指定命名规范的,需要遵循老项目规范,编辑时不要格式化其代码) 因为API部门的代码目前都是下划线的,<a href="https://open.onebound.cn/help/api/">https://open.onebound.cn/help/api/</a> 其他老项目也不统一 。</p> <p>开发规范默认主要适用于onebuy系统开发更严格 ,其他项目作为参考</p> </blockquote> <ul> <li>命名需要有意义</li> </ul> <pre><code class="language-php">// 错误示例 $a = 30; // 正确示例 $age = 30;</code></pre> <ul> <li>命名需要简洁明了,不应过长</li> </ul> <pre><code class="language-php">// 错误示例 $internationalTransshipmentLogistics = []; // 正确示例 $logistics = [];</code></pre> <ul> <li>方法名采用首字母小写的驼峰命名规范,类名采用首字母大写的驼峰命名规范,方法名首词采用动词加驼峰</li> </ul> <pre><code class="language-php">// 错误示例 public function get_total_price() { // method body } // 正确示例 public function getTotalPrice() { // method body } // 错误示例 class bizcode { // class body } // 正确示例 class BizCode { // class body } </code></pre> <ul> <li>变量名都用小驼峰</li> </ul> <pre><code>// 错误示例 $total_price = 0; // 正确示例 $totalPrice = 0;</code></pre> <ul> <li>常量定义大写,单词间以下划线分隔</li> </ul> <pre><code>// 错误示例 define('app_path', __DIR__ . '/../application/'); // 正确示例 define('APP_PATH', __DIR__ . '/../application/');</code></pre> <ul> <li>PHP关键字都小写, 常量 true 、false 和 null 也都小写</li> </ul> <pre><code>// 错误示例 FOREACH ($students AS $student) { } // 正确示例 foreach ($students as $student) { } // 错误示例 IF ($age &gt; 18) { // condition body } ELSE { // condition body } // 正确示例 if ($age &gt; 18) { // condition body } else { // condition body } // 错误示例 public function replaceStr(){ // method body return NULL; } // 正确示例 public function replaceStr(){ // method body return null; } </code></pre> <h3>类(class), 属性(properties), 方法(methods)</h3> <p>namespace以及use声明</p> <ul> <li>namespace 声明后必须插入一个空白行。</li> <li>所有use必须在namespace 后声明。</li> <li>每个类必须要有一个namespace。thinkphp中,统一通过use去引入一个类,不要通过include去引入</li> </ul> <p>extends 和 implements</p> <ul> <li>关键词 extends 和 implements必须写在类名称的同一行。</li> </ul> <pre><code class="language-php">namespace ob/taobao; /** * 获取淘宝商品相关信息类 * @author Cole 2022-03-02 13:37 * @version 1.0.0 */ class TaobaoApi extends ObApi { // class body } </code></pre> <p>属性</p> <ul> <li>类的属性命名必须遵循小写字母开头的驼峰式命名规范 ($camelCase)。</li> <li>必须对所有属性设置访问控制(如,public,protect,private)。</li> <li>一定不可使用关键字 var 声明一个属性。</li> <li>每条语句一定不可定义超过一个属性。</li> <li>定义属性时先常量属性再变量属性,先public 然后 protected,最后private。</li> </ul> <pre><code>namespace ob/taobao; /** * 获取淘宝商品相关信息类 * @author Cole 2022-03-02 13:37 * @version 1.0.0 */ class TaobaoApi extends ObApi { const BASE_URL = 'https://api-1.onebound.cn'; public $tp = 'taobao'; protected $api_key = ''; protected $api_secret = ''; private $api_list = ['get_item','search','upimage']; } </code></pre> <p>方法</p> <ul> <li>方法名称必须符合 camelCase() 式的小写字母开头驼峰命名规范。</li> <li>所有方法都必须设置访问控制(如,public,protect,private)。</li> </ul> <pre><code>namespace ob/taobao; /** * 获取淘宝商品相关信息类 * @author Cole 2022-03-02 13:37 * @version 1.0.0 */ class TaobaoApi extends ObApi { const BASE_URL = 'https://api-1.onebound.cn'; public $tp = 'taobao'; protected $api_key = ''; protected $api_secret = ''; private $api_list = ['get_item','search','upimage']; public function getItem(){ // methods body } public function search(){ // methods body } private function request($url,Array $params = []){ // methods body } } </code></pre> <p>方法参数</p> <ul> <li>方法参数名称必须符合 camelCase 式的小写字母开头驼峰命名规范</li> <li>有默认值的参数,必须放到参数列表的末尾。</li> <li>如果参数类型为对像必须指定参数类型为具体的类名。</li> <li>如果参数类型为array必须指定参数类型为array。如$params。</li> </ul> <pre><code>namespace ob/taobao; /** * 获取淘宝商品相关信息类 * @author Cole 2022-03-02 13:37 * @version 1.0.0 */ class TaobaoApi extends ObApi { private function request($url,array $params = []){ // methods body } } </code></pre> <h3>ThinkPHP/Fastadmin规范</h3> <p>目录和文件</p> <ul> <li>目录使用小写+下划线;</li> <li>类文件采用驼峰法命名(首字母大写),类名与类文件名保持一致,其它文件采用小写+下划线命名</li> <li>目录规范 <ul> <li>公共助手函数 统一放application/common.php</li> <li>公共助手类 统一放extend目录下(参考extend/fast)</li> <li>Queue队列统一放 application/job目录下</li> </ul></li> </ul> <p>变量、函数、类、属性命名</p> <ul> <li>变量命名统一以 首字母小写,驼峰体命名,例如:$total_price应写为:$totalPrice</li> <li>类的命名采用驼峰法(首字母大写),例如 User、UserType,默认不需要添加后缀,例如UserController应该直接命名为User;</li> <li>函数的命名使用小写字母和下划线(小写字母开头)的方式,例如 get_client_ip;</li> <li>方法的命名使用驼峰法(首字母小写),例如 getUserName;</li> <li>属性的命名使用驼峰法(首字母小写),例如 tableName、instance;</li> <li>以双下划线“<strong>”打头的函数或方法作为魔术方法,例如 </strong>call 和 __autoload;</li> </ul> <p>常量和配置</p> <ul> <li>常量以大写字母和下划线命名,例如 APP_PATH和 THINK_PATH;</li> <li>配置参数以小写字母和下划线命名,例如 url_route_on 和url_convert;</li> </ul> <h3>注释相关</h3> <p>在方法、函数前需注释该方法的作者,时间,接收参数,返回值类型、方法作用等</p> <ul> <li>类注释</li> </ul> <pre><code>namespace ob\taobao; /** * 获取淘宝商品相关信息类 * @author Cole 2022-03-02 13:37 * @version 1.0.0 */ class TaobaoApi(){ // class body }</code></pre> <ul> <li>属性注释</li> </ul> <pre><code>namespace ob\taobao; /** * 获取淘宝商品相关信息类 * @author Cole 2022-03-02 13:37 * @version 1.0.0 */ class TaobaoApi(){ /** * APPID,可以在XX申请 * @var string */ public $app_id = ''; }</code></pre> <ul> <li>方法注释</li> </ul> <pre><code>namespace ob\taobao; /** * 获取淘宝商品相关信息类 * @author Cole 2022-03-02 13:37 * @version 1.0.0 */ class TaobaoApi(){ // class body /** * 请求淘宝商品详情接口 * @author Cole 2022-03-02 13:37 * @params $num_iid {String} 淘宝商品ID * @return Object {title: '',num_iid: '', sku: {} ....} * @version 1.0.0 * @example /api/taobao_api/item/num_iid/659585269247 */ public function Item($num_iid){ // todo return [] } }</code></pre> <ul> <li>注释相关参数参考以下表格:</li> </ul> <table> <thead> <tr> <th>注释名</th> <th>语法</th> <th>含义</th> <th>示例</th> </tr> </thead> <tbody> <tr> <td>@author</td> <td>@author 作者信息 [附属信息:如邮箱、日期]</td> <td>描述此函数作者的信息</td> <td>@author Cole 2022-03-02 13:37</td> </tr> <tr> <td>@params</td> <td>@param 参数名 {参数类型} 描述信息</td> <td>描述参数的信息</td> <td>@param name {String} 传入名称</td> </tr> <tr> <td>@return</td> <td>@return {返回类型} 描述信息</td> <td>描述返回值的信息</td> <td>@return {Object} obapi返回的商品详情信息 {title: '',num_iid: '', sku: {} ....}</td> </tr> <tr> <td>@version</td> <td>@version XX.XX.XX</td> <td>描述此函数的版本号</td> <td>@version 1.0.3</td> </tr> <tr> <td>@example</td> <td>@example 示例代码</td> <td>演示函数使用</td> <td>@example requestTaobaoItemApi('659585269247')]</td> </tr> </tbody> </table> <h3>Fastadmin API模块注释规则</h3> <p>开发api模块下的人员写注释时,参考上述规则,并增加下述注释规则,有重复的以以下规则为准,例如@return、@params</p> <ul> <li>控制器注释</li> </ul> <table> <thead> <tr> <th>名称</th> <th>描述</th> <th>示例</th> </tr> </thead> <tbody> <tr> <td>@ApiSector</td> <td>API分组名称</td> <td>(测试分组)</td> </tr> <tr> <td>@ApiRoute</td> <td>API接口URL,此@ApiRoute只是基础URL</td> <td>(/api/test)</td> </tr> <tr> <td>@ApiInternal</td> <td>忽略的控制器,表示此控制将不加入API文档</td> <td>无</td> </tr> <tr> <td>@ApiWeigh</td> <td>API方法的排序,值越大越靠前</td> <td>(99)</td> </tr> </tbody> </table> <ul> <li>控制器方法注释</li> </ul> <table> <thead> <tr> <th>名称</th> <th>描述</th> <th>示例</th> </tr> </thead> <tbody> <tr> <td>@ApiTitle</td> <td>API接口的标题,为空时将自动匹配注释的文本信息</td> <td>(测试标题)</td> </tr> <tr> <td>@ApiSummary</td> <td>API接口描述</td> <td>(测试描述)</td> </tr> <tr> <td>@ApiRoute</td> <td>API接口地址,为空时将自动计算请求地址</td> <td>(/api/test/index)</td> </tr> <tr> <td>@ApiMethod</td> <td>API接口请求方法,默认为GET</td> <td>(POST)</td> </tr> <tr> <td>@ApiSector</td> <td>API分组,默认按钮控制器或控制器的@ApiSector进行分组</td> <td>(测试分组)</td> </tr> <tr> <td>@ApiParams</td> <td>API请求参数,如果在@ApiRoute中有对应的{@参数名},将进行替换</td> <td>(name=&quot;id&quot;, type=&quot;integer&quot;, required=true, description=&quot;会员ID&quot;)</td> </tr> <tr> <td>@ApiHeaders</td> <td>API请求传递的Headers信息</td> <td>(name=token, type=string, required=true, description=&quot;请求的Token&quot;)</td> </tr> <tr> <td>@ApiReturn</td> <td>API返回的结果示例</td> <td>({&quot;code&quot;:1,&quot;msg&quot;:&quot;返回成功&quot;})</td> </tr> <tr> <td>@ApiReturnParams</td> <td>API返回的结果参数介绍</td> <td>(name=&quot;code&quot;, type=&quot;integer&quot;, required=true, sample=&quot;0&quot;)</td> </tr> <tr> <td>@ApiReturnHeaders</td> <td>API返回的Headers信息</td> <td>(name=&quot;token&quot;, type=&quot;integer&quot;, required=true, sample=&quot;123456&quot;)</td> </tr> <tr> <td>@ApiInternal</td> <td>忽略的方法,表示此方法将不加入文档</td> <td>无</td> </tr> <tr> <td>@ApiWeigh</td> <td>API方法的排序,值越大越靠前</td> <td>(99)</td> </tr> </tbody> </table> <p>参考</p> <pre><code>&lt;?php namespace app\api\controller; use app\common\controller\Api; /** * 优惠券 * @version 1.1 * */ class Coupon extends Api { protected $noNeedLogin = ''; protected $noNeedRight = '*'; /** * 优惠券列表 * @author Cole 2022-03-02 13:37 * @version 1.0.3 * @ApiTitle (优惠券列表) * @ApiSummary (获取优惠券列表) * @ApiMethod (GET) * @ApiRoute (/api/Coupon/lists) * @ApiParams (name="page", type="integer", required=true, description="页数") * @ApiParams (name="size", type="integer", required=false, description="每页个数(默认10)") * @ApiParams (name="getway", type="string", required=false, description="获取方式(1.积分兑换,2奖励,3节日活动赠送)") * @ApiParams (name="status", type="string", required=false, description="状态 (默认全部 1未使用 2已使用 3已过期)") * @ApiParams (name="usetype", type="string", required=false, description="用途方式:0任何地方 1订单 2运单 3充值") * @ApiReturnParams (name="code", type="integer", required=true, sample="0") * @ApiReturnParams (name="msg", type="string", required=true, sample="返回成功") * @ApiReturnParams (name="data", type="object", sample="{}", description="优惠劵对象数组集合") * @ApiReturn ({ "code":"1", "msg":'返回成功", "data":{ "lists":[ { "coupon_id": "65", "sn": "20190506165811404", "user_id": "33", "getway": "1", "usetype": "0", "endtime": "1559725091", "createtime": "1557133091", "money": "100", "state": "1", "coupon_rule_id": "0", "type":"1", "name":"100元抵扣券", "total":"", "discount":"1" } ] } }) */ public function lists() { // methods body return $this-&gt;apiReturn($this-&gt;logicCoupon-&gt;getCouponList($where, true, 'createtime desc', $size)); } } </code></pre> <h3>引用文档</h3> <p><a href="https://www.kancloud.cn/thinkphp/thinkphp5-guide/90124">ThinkPHP5命名规范</a> <a href="https://doc.fastadmin.net/doc/163.html">Fastadmin 一键生成API文档</a></p>

页面列表

ITEM_HTML