# 基于dify自动mock数据
# 背景
当前版本存在的痛点之一就是一些手写的ts类型,没法很方便的mock出直接可用的数据,比较影响开发效率。
那么有什么办法可以快速解决吗?
# 方案
之前部门推出的vscode插件:FEX-AIGC,支持接入dify平台的工作流,具体实现:
# dify
在dify中新建一个对话工作流,选择大模型为gpt-4o-mini,并配置好提示词:
ts类型:
{{#sys.query#}}
根据上面给定的ts类型生成相应的mock数据。请遵循以下指导原则:
1. **数据类型**:使用网络行业的专业术语来表达,并使用中文返回。参考类型注释和字段含义,生成符合实际的数据(如手机号、邮箱等),并且需要重复考虑各字段的组合效果(特别是数组结构的,需mock出各种场景)。
2. **顺序一致**:按照ts类型的顺序生成mock数据,不要增加或删除接口,请保证所有接口都能mock到。
3. **类型换行**:在import语句中,每个response类型应单独换行,并带上英文逗号。
4. **mockData**:mockData内容为:严格按照ts的类型生成的mock数据。mock后填充到data后面就行了,不要做别的操作。如果ts类型中已包含success,则将mock出来的数据做为return的值,且response函数的类型不需要用Result包裹。
5. **response函数类型**: 在第4点中,如果ts类型中已包含success,则直接使用该ts类型,否则为Result<response的类型>
6. **eslint**:根据eslint规范,每行多要带上符号,如逗号、分号等。使用两个空格进行缩进。
7. **枚举值**:不能直接使用枚举的key,需取其实际等于的value
mock数据生成后,严格按照以下模板填充:
import { Result } from '@/utils/axios/types';
export default [
{
url: '/index.php/xx',
method: 'post',
response: (): 函数类型 => {
return {
success: true,
data: {
// mockData
}
};
},
},
];
作用就是让gpt能生成符合mock.js格式的假数据,我们复制后就能直接使用。
调试完成后发布,得到使用的秘钥
{
"name": "ts类型mock",
"description": "根据传入的ts类型,生成专业的mock数据",
"aiToken": ""
}
# FEX-AIGC
在插件右上角自定义指令,复制上刚才得到的秘钥。
找到需要mock的ts类型文件,选中需要的类型,ctrl+L,即可跳转到插件中
再输入/,找到我们配的ts类型mock,回车后即可生成mock数据
# yapi-to-typescript
之前根据接口文档自动生成mock数据的逻辑是写死在该插件中,其提示词、gpt模型都是写死在代码中,后续要升级的话不方便修改,这次也顺便将mock的逻辑移植到了dify平台。
后续gpt再更新的话只需在dify上切换一下就行了。
# 总结
通过dify+FEX-AIGC,将mock数据流程化、简单化,节省开发时间。