当前位置: 首页 > news >正文

Coze源码分析-资源库-删除工作流-前端源码-核心接口

API层设计与实现

IDL基础类型定义(base.thrift)

文件位置:idl/base.thrift

核心代码:

namespace py base
namespace go base
namespace java com.bytedance.thrift.basestruct TrafficEnv {1: bool   Open = false,2: string Env  = ""   ,
}struct Base {1:          string             LogID      = "",2:          string             Caller     = "",3:          string             Addr       = "",4:          string             Client     = "",5: optional TrafficEnv         TrafficEnv     ,6: optional map<string,string> Extra          ,
}struct BaseResp {1:          string             StatusMessage = "",2:          i32                StatusCode    = 0 ,3: optional map<string,string> Extra             ,
}struct EmptyReq {
}struct EmptyData {}struct EmptyResp {1: i64       code,2: string    msg ,3: EmptyData data,
}struct EmptyRpcReq {255: optional Base Base,
}struct EmptyRpcResp {255: optional BaseResp BaseResp,
}

文件作用:
定义了项目中所有接口的基础数据结构,作为其他IDL文件的依赖基础。

删除工作流-IDL结构体定义(workflow_develop.thrift)

文件路径idl/workflow/workflow_develop.thrift

核心代码:

namespace go workflow
service WorkflowDevelopService {// 删除工作流DelWorkflowResponse DelWorkflow(1: DelWorkflowRequest request)(api.post='/api/workflow_api/del_workflow', api.category="workflow", agw.preserve_base="true")
}// 删除工作流请求结构
struct DelWorkflowRequest {1: optional string workflow_id255: optional base.Base Base
}// 删除工作流响应结构
struct DelWorkflowResponse {1: optional i64 code2: optional string msg255: optional base.BaseResp BaseResp
}// 工作流资源信息结构
struct ResourceInfo {1: optional string res_id (api.body="res_id")2: optional string name (api.body="name")3: optional ResType res_type (api.body="res_type")4: optional list<ActionInfo> actions (api.body="actions")5: optional string creator_id (api.body="creator_id")6: optional i64 create_time (api.body="create_time")7: optional i64 update_time (api.body="update_time")
}// 操作信息结构
struct ActionInfo {1: required ActionKey key (api.body="key")2: required bool enable (api.body="enable")3: optional string reason (api.body="reason")
}// 资源类型枚举
enum ResType {Plugin = 1,Prompt = 2,Workflow = 3,Knowledge = 4
}// 操作类型枚举
enum ActionKey {Edit = 1,Delete = 2,Copy = 3,Publish = 4
}

设计亮点

  • 简洁的请求参数:只需要工作流ID即可执行删除操作
  • JavaScript兼容:通过 api.body="key" 确保前端字符串类型兼容
  • 统一的响应格式:包含状态码和消息的标准响应结构
  • 权限控制:通过 ActionInfo 结构控制操作权限
  • 资源类型:支持多种资源类型的统一管理
  • 操作枚举:标准化的操作类型定义

删除工作流-IDL接口定义(workflow_develop.thrift)

文件路径:idl/workflow/workflow_develop.thrift

核心代码:

include "../base.thrift"namespace go workflowservice WorkflowDevelopService {// 删除工作流DelWorkflowResponse DelWorkflow(1: DelWorkflowRequest request)(api.post='/api/workflow_api/del_workflow', api.category="workflow", agw.preserve_base="true")
}

接口设计说明

  • DelWorkflow:执行工作流删除操作的核心接口
  • RESTful设计:遵循REST API设计规范,使用POST方法调用
  • 服务分类:明确的工作流开发服务分类
  • 基础结构保留:通过 agw.preserve_base="true" 保留基础请求结构

删除工作流-API接口实现(workflow_develop/index.ts)

文件位置:frontend/packages/arch/idl/src/auto-generated/workflow_develop/index.ts

核心代码:

export default class WorkflowDevelopService<T> {private request: any = () => {throw new Error('WorkflowDevelopService.request is undefined');};private baseURL: string | ((path: string) => string) = '';constructor(options?: {baseURL?: string | ((path: string) => string);request?<R>(params: {url: string;method: 'GET' | 'DELETE' | 'POST' | 'PUT' | 'PATCH';data?: any;params?: any;headers?: any;},options?: T,): Promise<R>;}) {this.request = options?.request || this.request;this.baseURL = options?.baseURL || '';}/** POST /api/workflow_api/del_workflow */DelWorkflow(req?: DelWorkflowRequest,options?: T,): Promise<DelWorkflowResponse> {const _req = req || {};const url = this.genBaseURL('/api/workflow_api/del_workflow');const method = 'POST';const data = { workflow_id: _req['workflow_id'], Base: _req['Base'] };return this.request({ url, method, data }, options);}// ... 其他API方法
}

代码作用

  • DelWorkflow:执行工作流删除操作的核心方法
  • 类型安全:基于 workflow_develop.thrift 自动生成,确保类型安全
  • 简洁参数:只需要工作流ID即可执行删除操作
  • 统一接口:与其他工作流开发API保持一致的调用方式

删除工作流-结构体实现(workflow_develop.ts)

文件路径:frontend/packages/arch/idl/src/auto-generated/workflow_develop/index.ts

// 删除工作流请求接口
export interface DelWorkflowRequest {workflow_id?: string;Base?: base.Base;
}// 删除工作流响应接口
export interface DelWorkflowResponse {code?: Int64;msg?: string;BaseResp?: base.BaseResp;
}// 资源信息接口
export interface ResourceInfo {res_id?: string;name?: string;res_type?: ResType;actions?: ActionInfo[];creator_id?: string;create_time?: Int64;update_time?: Int64;
}// 操作信息接口
export interface ActionInfo {key: ActionKey;enable: boolean;reason?: string;
}// 资源类型枚举
export enum ResType {Plugin = 1,Prompt = 2,Workflow = 3,Knowledge = 4
}// 操作类型枚举
export enum ActionKey {Edit = 1,Delete = 2,Copy = 3,Publish = 4
}

接口设计亮点

  • 类型安全:完整的 TypeScript 类型定义
  • 简洁设计:删除操作只需要工作流ID
  • 权限控制:通过 ActionInfo 实现细粒度权限控制
  • 统一响应:标准的错误码和消息格式
  • 枚举类型:类型安全的资源类型和操作类型定义

删除工作流-前端调用示例

基于实际的 useWorkflowConfig hook 实现:

// 在 useWorkflowConfig hook 中的删除逻辑
const { run: delWorkflow } = useRequest((workflowId: string) =>WorkflowDevelopApi.DelWorkflow({workflow_id: workflowId,}),{manual: true,onSuccess: () => {reloadList(); // 删除成功后刷新列表Toast.success(I18n.t('Delete_success')); // 显示成功提示},onError: (error) => {Toast.error(I18n.t('Delete_failed')); // 显示失败提示console.error('删除工作流失败:', error);},},
);// 在 TableAction 组件中的使用
<TableActiondeleteProps={{disabled: !libraryResource.actions?.find(action => action.key === ActionKey.Delete,)?.enable,deleteDesc: I18n.t('workflow_resource_delete_describ'),handler: () => {delWorkflow(libraryResource.res_id || '');},}}
/>

实际调用流程

  1. 权限检查:通过 libraryResource.actions 检查删除权限
  2. 用户确认:TableAction 组件内置确认弹窗
  3. 执行删除:调用 delWorkflow 函数
  4. API请求:使用 WorkflowDevelopApi.DelWorkflow 发送删除请求
  5. 结果处理:成功后刷新列表并显示提示,失败时显示错误信息

工具概述

删除工作流功能的实现依赖于Coze Studio完整的前端开发工具链,这些工具确保了从IDL定义到前端组件的无缝集成。

核心开发工具

1. IDL到TypeScript转换工具

工具名称@coze-arch/idl2ts-cli
项目路径frontend/infra/idl/idl2ts-cli/

在删除工作流功能中的作用

  • workflow_develop.thrift中的DelWorkflowRequestDelWorkflowResponse结构转换为TypeScript类型
  • 生成WorkflowDevelopApi.DelWorkflow接口的类型定义
  • 确保前端调用删除API时的类型安全
// 生成的删除工作流API类型定义
export interface DelWorkflowRequest {workflow_id: string;Base?: Base;
}export interface DelWorkflowResponse {code: Int64;msg: string;BaseResp?: BaseResp;
}
2. API客户端生成工具

工具名称@coze-arch/bot-api
功能描述:基于IDL文件自动生成API客户端代码

在删除工作流功能中的应用

// 自动生成的删除工作流API调用方法
import { WorkflowDevelopApi } from '@coze-arch/bot-api';// 在useWorkflowConfig中使用
const { run: delWorkflow } = useRequest((workflowId: string) =>WorkflowDevelopApi.DelWorkflow({workflow_id: workflowId,}),{manual: true,onSuccess: () => {reloadList();Toast.success(I18n.t('Delete_success'));},onError: (error) => {Toast.error(error.message || I18n.t('Delete_failed'));},},
);
3. 组件设计系统工具

工具名称@coze-arch/coze-design
功能描述:提供统一的UI组件库

删除工作流功能相关组件

  • Table.TableAction:表格操作菜单组件
  • Modal.confirm:删除确认弹窗
  • Toast:操作结果提示
  • Popconfirm:删除确认气泡
// TableAction组件在删除工作流中的使用
<TableActiondeleteProps={{disabled: !libraryResource.actions?.find(action => action.key === ActionKey.Delete,)?.enable,popconfirm: {title: I18n.t('delete_title'),content: I18n.t('workflow_delete_confirm_desc'),okType: 'danger',},handler: () => delWorkflow(libraryResource.res_id || ''),}}
/>
4. 状态管理工具

工具名称ahooks
功能描述:React Hooks工具库

在删除工作流功能中的应用

  • useRequest:管理删除API的异步状态
  • 提供loading、error、success状态管理
  • 支持手动触发和自动重试机制
5. 国际化工具

工具名称@coze-arch/i18n
功能描述:多语言支持工具

删除工作流相关的国际化配置

// 删除工作流相关的多语言文案
const deleteMessages = {'delete_title': '删除工作流','workflow_delete_confirm_desc': '确认删除该工作流?删除后无法恢复。','Delete_success': '删除成功','Delete_failed': '删除失败','confirm': '确认','cancel': '取消'
};

工具链集成优势

  1. 类型安全:从IDL到前端的完整类型链路保证
  2. 代码生成:减少手动编写API调用代码的工作量
  3. 组件复用:统一的删除操作组件提高开发效率
  4. 状态管理:标准化的异步操作状态处理
  5. 用户体验:一致的交互模式和视觉反馈

这些工具共同构成了删除工作流功能的技术基础,确保了代码质量、开发效率和用户体验的统一性。

结语

Coze Studio的删除工作流功能是企业级前端应用中安全操作设计的典型范例,它不仅体现了对数据安全的严格把控,更展现了对用户体验的精心设计。通过对其源码的深入分析,我们可以学习到:

删除功能的技术总结和架构优势

1. 安全优先的架构设计
  • 多层权限验证:从前端UI状态到后端API调用的全链路权限控制
  • 确认机制完善:通过Modal.confirm组件防止误删操作
  • 策略模式应用:支持灵活的删除策略配置
  • 事务性操作:确保删除操作的原子性和一致性
2. 组件化设计优势
// 高度复用的删除操作组件
const { TableAction } = Table;
<TableActiondeleteProps={{disabled: !canDelete,onConfirm: () => handleDelete(record.id),title: "确认删除工作流?",description: "删除后无法恢复,请谨慎操作"}}
/>
3. 状态管理的最佳实践
  • useRequest集成:统一的异步状态管理
  • 乐观更新策略:删除成功后立即更新UI状态
  • 错误回滚机制:删除失败时恢复原始状态

删除操作的用户体验设计要点

1. 渐进式操作引导
// 三步式删除流程设计
用户点击"..."按钮 → 显示操作菜单 → 点击删除 → 确认弹窗 → 执行删除
2. 即时反馈机制
// 删除成功的即时反馈
Toast.success({content: "工作流删除成功",duration: 3000
});// 删除失败的错误提示
Toast.error({content: "删除失败,请稍后重试",duration: 5000
});
3. 视觉状态指示
  • 加载状态:删除过程中的loading指示器
  • 禁用状态:无权限时的按钮禁用样式
  • 危险操作标识:删除按钮的红色警告色彩

安全性和权限控制的实现

1. 前端权限控制
// 基于用户权限的UI状态控制
const canDelete = useMemo(() => {return hasPermission('workflow:delete') && record.creatorId === currentUser.id;
}, [record, currentUser]);<UITableActiondeleteProps={{disabled: !canDelete,tooltip: !canDelete ? "无删除权限" : undefined}}
/>
2. API层安全验证
// 删除请求的安全参数
const deleteRequest = {workflow_id: record.id,deleteReason: "用户主动删除",confirmToken: generateConfirmToken()
};
3. 操作审计日志
  • 操作记录:记录删除操作的用户、时间、原因
  • 数据备份:删除前的数据快照保存
  • 恢复机制:支持管理员级别的数据恢复

错误处理和异常情况的处理策略

1. 分层错误处理
// 网络错误处理
const handleDeleteError = (error: any) => {if (error.code === 'NETWORK_ERROR') {Toast.error('网络连接异常,请检查网络后重试');} else if (error.code === 'PERMISSION_DENIED') {Toast.error('权限不足,无法删除该工作流');} else if (error.code === 'RESOURCE_NOT_FOUND') {Toast.error('工作流不存在或已被删除');refreshList(); // 刷新列表状态} else {Toast.error('删除失败,请稍后重试');}
};
2. 异常状态恢复
// 删除失败后的状态恢复
const handleDeleteFailure = () => {setDeleting(false);setSelectedItems(prevItems => [...prevItems, failedItem]);refreshList();
};
3. 用户友好的错误提示
  • 具体错误信息:明确告知用户错误原因
  • 操作建议:提供解决问题的具体步骤
  • 重试机制:支持用户重新尝试删除操作

性能优化和最佳实践

1. 批量删除优化
// 批量删除的性能优化
const handleBatchDelete = async (selectedIds: string[]) => {const batchSize = 10;const batches = chunk(selectedIds, batchSize);for (const batch of batches) {await Promise.all(batch.map(id => WorkflowDevelopApi.DelWorkflow({ workflow_id: id })));}
};
2. 内存管理优化
// 组件卸载时清理定时器和事件监听
useEffect(() => {return () => {clearTimeout(deleteTimeoutRef.current);abortControllerRef.current?.abort();};
}, []);
3. 缓存策略优化
  • 乐观更新:删除操作立即更新UI,减少用户等待
  • 智能刷新:只刷新受影响的数据,避免全量重新加载
  • 预加载策略:预先加载可能需要的删除确认信息

删除功能的技术栈和工具使用

核心技术栈
  • 前端框架:React 18 + TypeScript 4.9+
  • 状态管理:Zustand + useRequest
  • UI组件库:自研组件库 + Ant Design
  • API通信:Axios + RESTful API
  • 权限管理:RBAC权限模型
  • 错误监控:Sentry + 自定义错误上报
开发工具链
  • 构建工具:Vite + ESBuild
  • 代码质量:ESLint + Prettier + Husky
  • 测试框架:Jest + React Testing Library
  • API文档:基于Thrift IDL自动生成
http://www.dtcms.com/a/392291.html

相关文章:

  • 安踏集团 X OB Cloud:新零售创新如何有“底”和有“数”
  • Web3艺术品交易应用方案
  • Spring 事务管理详解:保障数据一致性的实践指南
  • 软考中级-软件设计师 答题解题思路
  • Java IDEA学习之路:第二周课程笔记归纳
  • SQL语句一文通
  • Ubuntu22.04 双显卡系统使用集显 DRM 渲染的完整流程记录
  • Coze源码分析-资源库-删除工作流-后端源码-IDL/API/应用/领域
  • MySQL库和表的操作语句
  • python、类
  • NumPy高级技巧:向量化、广播与einsum的高效使用
  • GD32VW553-IOT 基于 vscode 的 msdk 移植(基于Cmake)
  • Filter 过滤器详解与使用指南
  • 养成合成小游戏抖音快手微信小程序看广告流量主开源
  • 在 Ubuntu 系统下安装 Conda
  • ac8257 android 9 SYSTEM_LAST_KMSG
  • ARM 架构与嵌入式系统
  • ARM(14) - LCD(1)清屏和画图形
  • Linux第十九讲:传输层协议UDP
  • 计算机网络学习(四、网络层)
  • 开启科学计算之旅:《MATLAB程序设计》课程导览
  • MATLAB | 数学模型 | 传染病 SIR 模型的参数确定
  • MATLAB基本运算(2)
  • 小红书数据分析面试题及参考答案
  • SpringCloudStream:消息驱动组件
  • ret2text-CTFHub技能树
  • VirtualBox 7 虚拟机的硬盘如何扩大?
  • React新闻发布系统 权限列表开发
  • 23种设计模式之【策略模式】-核心原理与 Java 实践
  • 前端实战从零构建响应式井字棋游戏