🚀【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% 重复劳动时间
如夜话,至此。
发表评论: