无尘阁日记

无尘阁日记

🚀【AI协作写接口:小白完整实操教程】
2025-07-10

专用于 Yii2 Restful API + Model + Controller + 实用技巧
适合对接外包开发、内部低成本落地、训练团队小白写增删改查。

🪐 01. 需求明确阶段

❓ 场景

我有一个 完整 SQL 建表文档,需要在 Yii2 中写出标准 RESTful 接口(增删改查),对接前端或提供给第三方对接使用。

🎯 输出目标:

✅ 自动生成 Model(大驼峰)
✅ 写标准增删改查接口(含注释)
✅ 符合 restful 风格,便于前端直调
✅ 支持自动文档生成
✅ 可在本地直接跑通调试
✅ 拆分清晰,方便维护

🪐 02. 前期准备

文件:

上传了完整 SQL:

(广东信德)面向OA系统对接的推送与审核全流程数据库表设计方案.sql

数据库结构核心表:

以 oa_partner_config 为例:

CREATE TABLE `oa_partner_config` (    `id` BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '自增主键',    `tenant_id` BIGINT NOT NULL COMMENT '企业租户ID',    ...) COMMENT='对方系统配置表';

🪐 03. 命名规范

表名 oa_partner_config
➡️ Model名 OaPartnerConfig(数据库名大驼峰写法)
➡️ 控制器名 OaPartnerConfigController
➡️ 路由如:v1/oa-partner-config

这样保持结构一致,避免多人协作时乱套。

🪐 04. AI协作生成 Model

通过 AI,让它生成:

namespace app\models;use Yii;class OaPartnerConfig extends \yii\db\ActiveRecord{    public static function tableName()    {        return 'oa_partner_config';    }    public function rules()    {        return [            [['tenant_id', 'partner_name', 'api_host', 'api_path', 'api_token', 'status'], 'required'],            [['tenant_id', 'max_retry_count', 'retry_interval_seconds', 'status'], 'integer'],            [['partner_name'], 'string', 'max' => 255],            [['api_host', 'api_path'], 'string', 'max' => 500],            [['api_token'], 'string', 'max' => 512],            [['deleted_time', 'create_time', 'update_time'], 'safe'],        ];    }}

👉 也可使用 gii 生成,但 AI协作可以直接带上已排好顺序、注释完整的字段,避免遗漏。

🪐 05. AI协作生成 Controller

在 controllers/OaPartnerConfigController.php 中生成:

  • actionIndex 获取列表

  • actionView 获取单个详情

  • actionCreate 创建

  • actionUpdate 更新

  • actionDelete 软删除(is_deleted = 1)

统一接口注释规范

/** * @route   v1/oa-partner-config * @name    获取配置列表 * @uses    Lists all OaPartnerConfig models. * @parameter string   Authorization 授权码 * @parameter integer   limit  每页数量 * @parameter integer   page   当前页码数 * @parameter string    kw  搜索关键词 * @method  GET,HEAD * @author  J.T * @return  \yii\data\ActiveDataProvider */

✅ 此注释可被 API自动文档生成器(如 APIGen、Yapi 插件)识别提取。

🪐 06. Get-One 接口(获取详情)

单独写:

public function actionView($id){    return $this->findModel($id);}

配合注释:

/** * @route   v1/oa-partner-config/{id} * @name    获取单个配置详情 * @uses    Displays a single OaPartnerConfig model. * @parameter string   Authorization 授权码 * @parameter integer  id 主键ID * @method  GET,HEAD * @author  J.T * @return  OaPartnerConfig */

保证前端直调无障碍。

🪐 07. 处理租户隔离需求

当需要在增删改查时判断表是否含有 tenant_id 并取租户 ID

编写:

protected function getItemTenantId($table, $condition, $params){    if ($this->containTenantId($table) === true) {        $database = Yii::$app->db->createCommand("SELECT DATABASE()")->queryScalar();        $tableName = "`{$database}`.`{$table}`";        static::$tenantId = Yii::$app->db->createCommand("SELECT `tenant_id` FROM {$tableName} WHERE {$condition}")            ->bindValues($params)            ->queryScalar();    }}

保证跨库时表准确查询,并适配多租户项目场景。

🪐 08. 获取指定库下所有表名

当需要获取数据库下所有表名(用于生成 Model 或做巡检):

public function getAllTables($databaseName){    $sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = :dbName";    return Yii::$app->db->createCommand($sql)        ->bindValue(':dbName', $databaseName)        ->queryColumn();}

🪐 09. 实际项目粘贴流程

✅ 将 Model 粘贴到 models/
✅ 将 Controller 粘贴到 controllers/
✅ 确保 urlManager 开启 prettyUrl 和 enableStrictParsing,使用 RESTful 路由规则
✅ 使用 Postman / Apifox 测试,确认增删改查均返回正常
✅ 根据返回结果与前端联调

🪐 10. 完整协作的价值

✅ 避免「不会写增删改查」的低效
✅ 保证命名、风格、注释一致性
✅ 可快速复制到其它表使用,只改 modelClass 即可
✅ 避免重复劳动与遗漏字段
✅ 满足外包/自研团队需求
✅ AI 写完直接粘贴即可跑通,节省至少 70% 重复劳动时间

如夜话,至此。