[{"data":1,"prerenderedAt":2254},["ShallowReactive",2],{"nav-docs-zh":3,"page-/zh/docs/webspace/api-overview":1157,"surround-/zh/docs/webspace/api-overview":2248,"raw-/zh/docs/webspace/api-overview":2251},[4,67,374,775,903,1075,1085,1110],{"title":5,"tags":6,"slug":6,"path":7,"stem":8,"children":9,"page":66,"sourcePath":7},"SpaceBuilder 入门",null,"/getting-started","00.getting-started",[10,15,20,27,34,39,45,50,55,60],{"title":11,"path":12,"stem":13,"tags":6,"slug":14,"sourcePath":12},"SpaceBuilder 简介","/getting-started/overview","00.getting-started/00.overview","/getting-started/overview/",{"title":16,"path":17,"stem":18,"tags":6,"slug":19,"sourcePath":17},"创建 SetFN 账户","/getting-started/create-setfn-account","00.getting-started/05.create-setfn-account","/getting-started/create-setfn-account/",{"title":21,"path":22,"stem":23,"tags":24,"slug":26,"sourcePath":22},"在 Linux 上安装","/getting-started/install-linux","00.getting-started/10.install-linux",[25],"recommended","/getting-started/install-linux/",{"title":28,"path":29,"stem":30,"tags":31,"slug":33,"sourcePath":29},"使用 Docker 安装","/getting-started/install-docker","00.getting-started/12.install-docker",[32],"preparing","/getting-started/install-docker/",{"title":35,"path":36,"stem":37,"tags":6,"slug":38,"sourcePath":36},"在 Windows 上安装","/getting-started/install-windows","00.getting-started/14.install-windows","/getting-started/install-windows/",{"title":40,"path":41,"stem":42,"tags":43,"slug":44,"sourcePath":41},"在 macOS 上安装","/getting-started/install-macos","00.getting-started/16.install-macos",[32],"/getting-started/install-macos/",{"title":46,"path":47,"stem":48,"tags":6,"slug":49,"sourcePath":47},"初始设置","/getting-started/initial-setup","00.getting-started/20.initial-setup","/getting-started/initial-setup/",{"title":51,"path":52,"stem":53,"tags":6,"slug":54,"sourcePath":52},"许可证激活","/getting-started/license-activation","00.getting-started/30.license-activation","/getting-started/license-activation/",{"title":56,"path":57,"stem":58,"tags":6,"slug":59,"sourcePath":57},"查看访问地址（本地/内网）","/getting-started/access-url","00.getting-started/35.access-url","/getting-started/access-url/",{"title":61,"path":62,"stem":63,"tags":64,"slug":65,"sourcePath":62},"选择外部访问方式","/getting-started/access-domain","00.getting-started/40.access-domain",[25],"/getting-started/access-domain/",false,{"title":68,"tags":6,"slug":6,"path":69,"stem":70,"children":71,"page":66,"sourcePath":69},"管理空间","/admin","10.admin",[72,92,162,197,249,274,289,299,339],{"title":73,"tags":6,"slug":6,"path":74,"stem":75,"children":76,"page":66,"sourcePath":74},"管理员首页","/admin/home","10.admin/00.home",[77,82,87],{"title":78,"path":79,"stem":80,"tags":6,"slug":81,"sourcePath":79},"访问管理员页面","/admin/home/admin-page-access","10.admin/00.home/00.admin-page-access","/admin/home/admin-page-access/",{"title":83,"path":69,"stem":84,"tags":6,"slug":85,"sourcePath":86},"管理员菜单导览","10.admin/00.home/00.overview","/admin/","/admin/home/overview",{"title":88,"path":89,"stem":90,"tags":6,"slug":91,"sourcePath":89},"许可证管理","/admin/home/license","10.admin/00.home/20.license","/admin/home/license/",{"title":93,"tags":6,"slug":6,"path":94,"stem":95,"children":96,"page":66,"sourcePath":94},"用户管理","/admin/user-management","10.admin/10.user-management",[97,102,107,112,117,122,127,132,137,142,147,152,157],{"title":98,"path":99,"stem":100,"tags":6,"slug":101,"sourcePath":99},"设置注册策略和默认权限","/admin/user-management/signup-policy","10.admin/10.user-management/02.signup-policy","/admin/user-management/signup-policy/",{"title":103,"path":104,"stem":105,"tags":6,"slug":106,"sourcePath":104},"登记注册条款","/admin/user-management/signup-terms","10.admin/10.user-management/04.signup-terms","/admin/user-management/signup-terms/",{"title":108,"path":109,"stem":110,"tags":6,"slug":111,"sourcePath":109},"创建用户账户","/admin/user-management/invite-new-member","10.admin/10.user-management/10.invite-new-member","/admin/user-management/invite-new-member/",{"title":113,"path":114,"stem":115,"tags":6,"slug":116,"sourcePath":114},"修改用户账户","/admin/user-management/edit-member","10.admin/10.user-management/11.edit-member","/admin/user-management/edit-member/",{"title":118,"path":119,"stem":120,"tags":6,"slug":121,"sourcePath":119},"添加管理员","/admin/user-management/add-new-admin","10.admin/10.user-management/12.add-new-admin","/admin/user-management/add-new-admin/",{"title":123,"path":124,"stem":125,"tags":6,"slug":126,"sourcePath":124},"团队管理","/admin/user-management/team","10.admin/10.user-management/22.team","/admin/user-management/team/",{"title":128,"path":129,"stem":130,"tags":6,"slug":131,"sourcePath":129},"等级管理","/admin/user-management/level","10.admin/10.user-management/24.level","/admin/user-management/level/",{"title":133,"path":134,"stem":135,"tags":6,"slug":136,"sourcePath":134},"查看访问日志","/admin/user-management/access-log","10.admin/10.user-management/30.access-log","/admin/user-management/access-log/",{"title":138,"path":139,"stem":140,"tags":6,"slug":141,"sourcePath":139},"管理活跃设备","/admin/user-management/active-devices","10.admin/10.user-management/31.active-devices","/admin/user-management/active-devices/",{"title":143,"path":144,"stem":145,"tags":6,"slug":146,"sourcePath":144},"设置账户与安全策略","/admin/user-management/account-security","10.admin/10.user-management/32.account-security","/admin/user-management/account-security/",{"title":148,"path":149,"stem":150,"tags":6,"slug":151,"sourcePath":149},"设置人机验证（CAPTCHA）","/admin/user-management/captcha","10.admin/10.user-management/33.captcha","/admin/user-management/captcha/",{"title":153,"path":154,"stem":155,"tags":6,"slug":156,"sourcePath":154},"设置通知发送","/admin/user-management/notice-settings","10.admin/10.user-management/34.notice-settings","/admin/user-management/notice-settings/",{"title":158,"path":159,"stem":160,"tags":6,"slug":161,"sourcePath":159},"向成员群发通知邮件","/admin/user-management/bulk-mail","10.admin/10.user-management/36.bulk-mail","/admin/user-management/bulk-mail/",{"title":163,"tags":6,"slug":6,"path":164,"stem":165,"children":166,"page":66,"sourcePath":164},"服务配置","/admin/service-config","10.admin/20.service-config",[167,172,177,182,187,192],{"title":168,"path":169,"stem":170,"tags":6,"slug":171,"sourcePath":169},"文件区域设置","/admin/service-config/file-area","10.admin/20.service-config/10.file-area","/admin/service-config/file-area/",{"title":173,"path":174,"stem":175,"tags":6,"slug":176,"sourcePath":174},"Webhook 设置","/admin/service-config/webhook-settings","10.admin/20.service-config/16.webhook-settings","/admin/service-config/webhook-settings/",{"title":178,"path":179,"stem":180,"tags":6,"slug":181,"sourcePath":179},"社区设置","/admin/service-config/community-space","10.admin/20.service-config/22.community-space","/admin/service-config/community-space/",{"title":183,"path":184,"stem":185,"tags":6,"slug":186,"sourcePath":184},"AI 聊天机器人策略设置","/admin/service-config/community-ai-chatbot","10.admin/20.service-config/24.community-ai-chatbot","/admin/service-config/community-ai-chatbot/",{"title":188,"path":189,"stem":190,"tags":6,"slug":191,"sourcePath":189},"邮件设置","/admin/service-config/email-settings","10.admin/20.service-config/30.email-settings","/admin/service-config/email-settings/",{"title":193,"path":194,"stem":195,"tags":6,"slug":196,"sourcePath":194},"品牌设置","/admin/service-config/brand","10.admin/20.service-config/40.brand","/admin/service-config/brand/",{"title":198,"tags":6,"slug":6,"path":199,"stem":200,"children":201,"page":66,"sourcePath":199},"知识服务","/admin/knowledge","10.admin/30.knowledge",[202,207,214,219,224,229,234,239,244],{"title":203,"path":199,"stem":204,"tags":6,"slug":205,"sourcePath":206},"了解知识服务","10.admin/30.knowledge/00.overview","/admin/knowledge/","/admin/knowledge/overview",{"title":208,"path":209,"stem":210,"children":211,"tags":6,"slug":213,"sourcePath":209},"采集与索引","/admin/knowledge/indexing","10.admin/30.knowledge/10.indexing",[212],{"title":208,"path":209,"stem":210,"tags":6,"slug":213,"sourcePath":209},"/admin/knowledge/indexing/",{"title":215,"path":216,"stem":217,"tags":6,"slug":218,"sourcePath":216},"搜索质量与语言","/admin/knowledge/search","10.admin/30.knowledge/20.search","/admin/knowledge/search/",{"title":220,"path":221,"stem":222,"tags":6,"slug":223,"sourcePath":221},"知识存储","/admin/knowledge/storage","10.admin/30.knowledge/30.storage","/admin/knowledge/storage/",{"title":225,"path":226,"stem":227,"tags":6,"slug":228,"sourcePath":226},"知识存储运维","/admin/knowledge/storage-operations","10.admin/30.knowledge/32.storage-operations","/admin/knowledge/storage-operations/",{"title":230,"path":231,"stem":232,"tags":6,"slug":233,"sourcePath":231},"连接 Qdrant","/admin/knowledge/qdrant","10.admin/30.knowledge/34.qdrant","/admin/knowledge/qdrant/",{"title":235,"path":236,"stem":237,"tags":6,"slug":238,"sourcePath":236},"准备 Qdrant 服务器","/admin/knowledge/qdrant-server-setup","10.admin/30.knowledge/35.qdrant-server-setup","/admin/knowledge/qdrant-server-setup/",{"title":240,"path":241,"stem":242,"tags":6,"slug":243,"sourcePath":241},"连接 Milvus","/admin/knowledge/milvus","10.admin/30.knowledge/36.milvus","/admin/knowledge/milvus/",{"title":245,"path":246,"stem":247,"tags":6,"slug":248,"sourcePath":246},"外部搜索与依据","/admin/knowledge/web-search","10.admin/30.knowledge/40.web-search","/admin/knowledge/web-search/",{"title":250,"tags":6,"slug":6,"path":251,"stem":252,"children":253,"page":66,"sourcePath":251},"AI 服务","/admin/ai","10.admin/35.ai",[254,259,264,269],{"title":255,"path":251,"stem":256,"tags":6,"slug":257,"sourcePath":258},"管理 AI 服务","10.admin/35.ai/00.overview","/admin/ai/","/admin/ai/overview",{"title":260,"path":261,"stem":262,"tags":6,"slug":263,"sourcePath":261},"设置模型与运行时","/admin/ai/models","10.admin/35.ai/10.models","/admin/ai/models/",{"title":265,"path":266,"stem":267,"tags":6,"slug":268,"sourcePath":266},"设置工具与集成","/admin/ai/integrations","10.admin/35.ai/20.integrations","/admin/ai/integrations/",{"title":270,"path":271,"stem":272,"tags":6,"slug":273,"sourcePath":271},"管理 MCP 服务器","/admin/ai/mcp","10.admin/35.ai/30.mcp","/admin/ai/mcp/",{"title":275,"tags":6,"slug":6,"path":276,"stem":277,"children":278,"page":66,"sourcePath":276},"插件","/admin/plugin","10.admin/40.plugin",[279,284],{"title":280,"path":281,"stem":282,"tags":6,"slug":283,"sourcePath":281},"管理插件","/admin/plugin/overview","10.admin/40.plugin/00.overview","/admin/plugin/overview/",{"title":285,"path":286,"stem":287,"tags":6,"slug":288,"sourcePath":286},"扩展插件设置","/admin/plugin/settings","10.admin/40.plugin/10.settings","/admin/plugin/settings/",{"title":290,"path":291,"stem":292,"children":293,"page":66,"sourcePath":291},"Operations","/admin/operations","10.admin/45.operations",[294],{"title":295,"path":291,"stem":296,"tags":6,"slug":297,"sourcePath":298},"查看运维与审计记录","10.admin/45.operations/00.overview","/admin/operations/","/admin/operations/overview",{"title":300,"tags":6,"slug":6,"path":301,"stem":302,"children":303,"page":66,"sourcePath":301},"安全管理","/admin/security","10.admin/50.security",[304,309,314,319,324,329,334],{"title":305,"path":306,"stem":307,"tags":6,"slug":308,"sourcePath":306},"安全概览","/admin/security/overview","10.admin/50.security/00.overview","/admin/security/overview/",{"title":310,"path":311,"stem":312,"tags":6,"slug":313,"sourcePath":311},"查看审计日志","/admin/security/audit-log","10.admin/50.security/05.audit-log","/admin/security/audit-log/",{"title":315,"path":316,"stem":317,"tags":6,"slug":318,"sourcePath":316},"屏蔽管理","/admin/security/block-management","10.admin/50.security/10.block-management","/admin/security/block-management/",{"title":320,"path":321,"stem":322,"tags":6,"slug":323,"sourcePath":321},"安全设置","/admin/security/security-setting","10.admin/50.security/12.security-setting","/admin/security/security-setting/",{"title":325,"path":326,"stem":327,"tags":6,"slug":328,"sourcePath":326},"处理待批准设备","/admin/security/device-approvals","10.admin/50.security/14.device-approvals","/admin/security/device-approvals/",{"title":330,"path":331,"stem":332,"tags":6,"slug":333,"sourcePath":331},"IP 访问限制","/admin/security/ip-restriction","10.admin/50.security/16.ip-restriction","/admin/security/ip-restriction/",{"title":335,"path":336,"stem":337,"tags":6,"slug":338,"sourcePath":336},"设置管理员两步验证","/admin/security/two-factor-auth","10.admin/50.security/18.two-factor-auth","/admin/security/two-factor-auth/",{"title":340,"tags":6,"slug":6,"path":341,"stem":342,"children":343,"page":66,"sourcePath":341},"系统管理","/admin/system-admin","10.admin/60.system-admin",[344,349,354,359,364,369],{"title":345,"path":346,"stem":347,"tags":6,"slug":348,"sourcePath":346},"设备信息","/admin/system-admin/device-info","10.admin/60.system-admin/10.device-info","/admin/system-admin/device-info/",{"title":350,"path":351,"stem":352,"tags":6,"slug":353,"sourcePath":351},"服务器重启与系统维护","/admin/system-admin/server-restart","10.admin/60.system-admin/12.server-restart","/admin/system-admin/server-restart/",{"title":355,"path":356,"stem":357,"tags":6,"slug":358,"sourcePath":356},"后台服务","/admin/system-admin/background-service","10.admin/60.system-admin/14.background-service","/admin/system-admin/background-service/",{"title":360,"path":361,"stem":362,"tags":6,"slug":363,"sourcePath":361},"更新 SpaceBuilder","/admin/system-admin/update","10.admin/60.system-admin/16.update","/admin/system-admin/update/",{"title":365,"path":366,"stem":367,"tags":6,"slug":368,"sourcePath":366},"卸载 SpaceBuilder","/admin/system-admin/uninstall","10.admin/60.system-admin/18.uninstall","/admin/system-admin/uninstall/",{"title":370,"path":371,"stem":372,"tags":6,"slug":373,"sourcePath":371},"迁移服务器","/admin/system-admin/server-migration","10.admin/60.system-admin/20.server-migration","/admin/system-admin/server-migration/",{"title":375,"tags":6,"slug":6,"path":376,"stem":377,"children":378,"page":66,"sourcePath":376},"使用工作空间","/workspace","20.workspace",[379,419,439,523,662,718,754],{"title":380,"tags":6,"slug":6,"path":381,"stem":382,"children":383,"page":66,"sourcePath":381},"菜单","/workspace/menu","20.workspace/05.menu",[384,389,394,399,404,409,414],{"title":385,"path":386,"stem":387,"tags":6,"slug":388,"sourcePath":386},"工作空间简介","/workspace/menu/overview","20.workspace/05.menu/00.overview","/workspace/menu/overview/",{"title":390,"path":391,"stem":392,"tags":6,"slug":393,"sourcePath":391},"团队空间","/workspace/menu/team-space","20.workspace/05.menu/05.team-space","/workspace/menu/team-space/",{"title":395,"path":396,"stem":397,"tags":6,"slug":398,"sourcePath":396},"客户端空间","/workspace/menu/client-space","20.workspace/05.menu/06.client-space","/workspace/menu/client-space/",{"title":400,"path":401,"stem":402,"tags":6,"slug":403,"sourcePath":401},"收藏夹","/workspace/menu/favorites","20.workspace/05.menu/10.favorites","/workspace/menu/favorites/",{"title":405,"path":406,"stem":407,"tags":6,"slug":408,"sourcePath":406},"最近文档","/workspace/menu/recent","20.workspace/05.menu/20.recent","/workspace/menu/recent/",{"title":410,"path":411,"stem":412,"tags":6,"slug":413,"sourcePath":411},"外部共享","/workspace/menu/external-share","20.workspace/05.menu/30.external-share","/workspace/menu/external-share/",{"title":415,"path":416,"stem":417,"tags":6,"slug":418,"sourcePath":416},"回收站","/workspace/menu/trash","20.workspace/05.menu/40.trash","/workspace/menu/trash/",{"title":420,"tags":6,"slug":6,"path":421,"stem":422,"children":423,"page":66,"sourcePath":421},"账户","/workspace/account","20.workspace/10.account",[424,429,434],{"title":425,"path":426,"stem":427,"tags":6,"slug":428,"sourcePath":426},"注册与登录","/workspace/account/signup","20.workspace/10.account/10.signup","/workspace/account/signup/",{"title":430,"path":431,"stem":432,"tags":6,"slug":433,"sourcePath":431},"重置密码","/workspace/account/reset-password","20.workspace/10.account/20.reset-password","/workspace/account/reset-password/",{"title":435,"path":436,"stem":437,"tags":6,"slug":438,"sourcePath":436},"账户设置","/workspace/account/account-settings","20.workspace/10.account/30.account-settings","/workspace/account/account-settings/",{"title":440,"tags":6,"slug":6,"path":441,"stem":442,"children":443,"page":66,"sourcePath":441},"文件夹","/workspace/folder","20.workspace/20.folder",[444,449,454,459,464,471,476,481,486,491,496,501,506,511,518],{"title":445,"path":446,"stem":447,"tags":6,"slug":448,"sourcePath":446},"文件夹基本功能","/workspace/folder/basic","20.workspace/20.folder/10.basic","/workspace/folder/basic/",{"title":450,"path":451,"stem":452,"tags":6,"slug":453,"sourcePath":451},"一次创建多个文件夹","/workspace/folder/bulk-folder-creation","20.workspace/20.folder/12.bulk-folder-creation","/workspace/folder/bulk-folder-creation/",{"title":455,"path":456,"stem":457,"tags":6,"slug":458,"sourcePath":456},"筛选","/workspace/folder/filter","20.workspace/20.folder/13.filter","/workspace/folder/filter/",{"title":460,"path":461,"stem":462,"tags":6,"slug":463,"sourcePath":461},"文件夹视图选项设置","/workspace/folder/folder-view-options","20.workspace/20.folder/14.folder-view-options","/workspace/folder/folder-view-options/",{"title":465,"path":466,"stem":467,"tags":468,"slug":470,"sourcePath":466},"将文件夹用作公告板","/workspace/folder/board-view","20.workspace/20.folder/15.board-view",[469],"hot","/workspace/folder/board-view/",{"title":472,"path":473,"stem":474,"tags":6,"slug":475,"sourcePath":473},"文件夹网页视图","/workspace/folder/folder-web-view","20.workspace/20.folder/16.folder-web-view","/workspace/folder/folder-web-view/",{"title":477,"path":478,"stem":479,"tags":6,"slug":480,"sourcePath":478},"整理文件夹","/workspace/folder/folder-organize","20.workspace/20.folder/17.folder-organize","/workspace/folder/folder-organize/",{"title":482,"path":483,"stem":484,"tags":6,"slug":485,"sourcePath":483},"文件夹公告（README）","/workspace/folder/folder-readme","20.workspace/20.folder/18.folder-readme","/workspace/folder/folder-readme/",{"title":487,"path":488,"stem":489,"tags":6,"slug":490,"sourcePath":488},"导出文件夹/文件列表","/workspace/folder/folder-export","20.workspace/20.folder/20.folder-export","/workspace/folder/folder-export/",{"title":492,"path":493,"stem":494,"tags":6,"slug":495,"sourcePath":493},"按等级设置访问权限","/workspace/folder/level-access-permissions","20.workspace/20.folder/24.level-access-permissions","/workspace/folder/level-access-permissions/",{"title":497,"path":498,"stem":499,"tags":6,"slug":500,"sourcePath":498},"按团队设置访问权限","/workspace/folder/team-access-permissions","20.workspace/20.folder/26.team-access-permissions","/workspace/folder/team-access-permissions/",{"title":502,"path":503,"stem":504,"tags":6,"slug":505,"sourcePath":503},"设置文件规则","/workspace/folder/file-rules","20.workspace/20.folder/28.file-rules","/workspace/folder/file-rules/",{"title":507,"path":508,"stem":509,"tags":6,"slug":510,"sourcePath":508},"文件夹 Webhook","/workspace/folder/webhook","20.workspace/20.folder/30.webhook","/workspace/folder/webhook/",{"title":512,"path":513,"stem":514,"children":515,"tags":6,"slug":517,"sourcePath":513},"设置文件夹知识索引","/workspace/folder/knowledge-index","20.workspace/20.folder/32.knowledge-index",[516],{"title":512,"path":513,"stem":514,"tags":6,"slug":517,"sourcePath":513},"/workspace/folder/knowledge-index/",{"title":519,"path":520,"stem":521,"tags":6,"slug":522,"sourcePath":520},"业务自动化文件夹","/workspace/folder/automation","20.workspace/20.folder/40.automation","/workspace/folder/automation/",{"title":524,"tags":6,"slug":6,"path":525,"stem":526,"children":527,"page":66,"sourcePath":525},"文件","/workspace/file","20.workspace/30.file",[528,533,538,543,548,553,558,563,568,573,578,583,588,593,598,603,608,613,618,623,628,633,637,642,647,652,657],{"title":529,"path":530,"stem":531,"tags":6,"slug":532,"sourcePath":530},"文件管理基本功能","/workspace/file/overview","20.workspace/30.file/00.overview","/workspace/file/overview/",{"title":534,"path":535,"stem":536,"tags":6,"slug":537,"sourcePath":535},"边看文件边查看列表","/workspace/file/list-in-file","20.workspace/30.file/05.list-in-file","/workspace/file/list-in-file/",{"title":539,"path":540,"stem":541,"tags":6,"slug":542,"sourcePath":540},"查看和编辑 Markdown、文本文件","/workspace/file/text-file-viewer","20.workspace/30.file/10.text-file-viewer","/workspace/file/text-file-viewer/",{"title":544,"path":545,"stem":546,"tags":6,"slug":547,"sourcePath":545},"查看 HTML 文件","/workspace/file/html-viewer","20.workspace/30.file/11.html-viewer","/workspace/file/html-viewer/",{"title":549,"path":550,"stem":551,"tags":6,"slug":552,"sourcePath":550},"查看和编辑 CSV 文件","/workspace/file/csv-viewer","20.workspace/30.file/12.csv-viewer","/workspace/file/csv-viewer/",{"title":554,"path":555,"stem":556,"tags":6,"slug":557,"sourcePath":555},"查看图片/视频文件","/workspace/file/image-file-viewer","20.workspace/30.file/13.image-file-viewer","/workspace/file/image-file-viewer/",{"title":559,"path":560,"stem":561,"tags":6,"slug":562,"sourcePath":560},"查看 Office/PDF 文件","/workspace/file/office-viewer","20.workspace/30.file/14.office-viewer","/workspace/file/office-viewer/",{"title":564,"path":565,"stem":566,"tags":6,"slug":567,"sourcePath":565},"粘贴网页 (HTML)","/workspace/file/paste-html","20.workspace/30.file/20.paste-html","/workspace/file/paste-html/",{"title":569,"path":570,"stem":571,"tags":6,"slug":572,"sourcePath":570},"粘贴截图","/workspace/file/paste-screenshot","20.workspace/30.file/21.paste-screenshot","/workspace/file/paste-screenshot/",{"title":574,"path":575,"stem":576,"tags":6,"slug":577,"sourcePath":575},"粘贴 Markdown (MD)","/workspace/file/paste-md","20.workspace/30.file/22.paste-md","/workspace/file/paste-md/",{"title":579,"path":580,"stem":581,"tags":6,"slug":582,"sourcePath":580},"屏幕录制","/workspace/file/screen-recording","20.workspace/30.file/23.screen-recording","/workspace/file/screen-recording/",{"title":584,"path":585,"stem":586,"tags":6,"slug":587,"sourcePath":585},"快捷笔记","/workspace/file/quick-note","20.workspace/30.file/24.quick-note","/workspace/file/quick-note/",{"title":589,"path":590,"stem":591,"tags":6,"slug":592,"sourcePath":590},"文件标签","/workspace/file/file-tag","20.workspace/30.file/33.file-tag","/workspace/file/file-tag/",{"title":594,"path":595,"stem":596,"tags":6,"slug":597,"sourcePath":595},"批量重命名文件","/workspace/file/bulk-name-revise","20.workspace/30.file/34.bulk-name-revise","/workspace/file/bulk-name-revise/",{"title":599,"path":600,"stem":601,"tags":6,"slug":602,"sourcePath":600},"文件转换","/workspace/file/file-convert-overview","20.workspace/30.file/40.file-convert-overview","/workspace/file/file-convert-overview/",{"title":604,"path":605,"stem":606,"tags":6,"slug":607,"sourcePath":605},"模板文件","/workspace/file/templates","20.workspace/30.file/41.templates","/workspace/file/templates/",{"title":609,"path":610,"stem":611,"tags":6,"slug":612,"sourcePath":610},"待办列表 (Todo)","/workspace/file/template-todo","20.workspace/30.file/42.template-todo","/workspace/file/template-todo/",{"title":614,"path":615,"stem":616,"tags":6,"slug":617,"sourcePath":615},"审批表单","/workspace/file/template-approval","20.workspace/30.file/43.template-approval","/workspace/file/template-approval/",{"title":619,"path":620,"stem":621,"tags":6,"slug":622,"sourcePath":620},"看板 (Kanban)","/workspace/file/template-kanban","20.workspace/30.file/44.template-kanban","/workspace/file/template-kanban/",{"title":624,"path":625,"stem":626,"tags":6,"slug":627,"sourcePath":625},"时间线","/workspace/file/template-timeline","20.workspace/30.file/45.template-timeline","/workspace/file/template-timeline/",{"title":629,"path":630,"stem":631,"tags":6,"slug":632,"sourcePath":630},"记事本","/workspace/file/template-memo","20.workspace/30.file/46.template-memo","/workspace/file/template-memo/",{"title":634,"path":635,"stem":636,"tags":6,"slug":635,"sourcePath":635},"AI 聊天文件","/workspace/file/ai-chat-file","20.workspace/30.file/47.ai-chat-file",{"title":638,"path":639,"stem":640,"tags":6,"slug":641,"sourcePath":639},"查看文件更改记录","/workspace/file/audit-trail","20.workspace/30.file/50.audit-trail","/workspace/file/audit-trail/",{"title":643,"path":644,"stem":645,"tags":6,"slug":646,"sourcePath":644},"文件版本管理","/workspace/file/version-trail","20.workspace/30.file/51.version-trail","/workspace/file/version-trail/",{"title":648,"path":649,"stem":650,"tags":6,"slug":651,"sourcePath":649},"编辑锁定","/workspace/file/file-lock","20.workspace/30.file/52.file-lock","/workspace/file/file-lock/",{"title":653,"path":654,"stem":655,"tags":6,"slug":656,"sourcePath":654},"文件加密","/workspace/file/file-encrypt","20.workspace/30.file/53.file-encrypt","/workspace/file/file-encrypt/",{"title":658,"path":659,"stem":660,"tags":6,"slug":661,"sourcePath":659},"注册磁盘文件","/workspace/file/disk-file-registration","20.workspace/30.file/60.disk-file-registration","/workspace/file/disk-file-registration/",{"title":663,"tags":6,"slug":6,"path":664,"stem":665,"children":666,"page":66,"sourcePath":664},"协作","/workspace/cooperation","20.workspace/35.cooperation",[667,672,677,682,687,692,697,702,707,713],{"title":668,"path":669,"stem":670,"tags":6,"slug":671,"sourcePath":669},"文件与文件夹评论","/workspace/cooperation/file-comments","20.workspace/35.cooperation/00.file-comments","/workspace/cooperation/file-comments/",{"title":673,"path":674,"stem":675,"tags":6,"slug":676,"sourcePath":674},"聊天","/workspace/cooperation/chat","20.workspace/35.cooperation/10.chat","/workspace/cooperation/chat/",{"title":678,"path":679,"stem":680,"tags":6,"slug":681,"sourcePath":679},"协作聊天与编辑锁定","/workspace/cooperation/collaboration-chat","20.workspace/35.cooperation/11.collaboration-chat","/workspace/cooperation/collaboration-chat/",{"title":683,"path":684,"stem":685,"tags":6,"slug":686,"sourcePath":684},"跟随团队成员的工作位置","/workspace/cooperation/follow-team-location","20.workspace/35.cooperation/12.follow-team-location","/workspace/cooperation/follow-team-location/",{"title":688,"path":689,"stem":690,"tags":6,"slug":691,"sourcePath":689},"提及","/workspace/cooperation/mention","20.workspace/35.cooperation/14.mention","/workspace/cooperation/mention/",{"title":693,"path":694,"stem":695,"tags":6,"slug":696,"sourcePath":694},"私信","/workspace/cooperation/dm","20.workspace/35.cooperation/16.dm","/workspace/cooperation/dm/",{"title":698,"path":699,"stem":700,"tags":6,"slug":701,"sourcePath":699},"通知存档","/workspace/cooperation/notification-inbox","20.workspace/35.cooperation/18.notification-inbox","/workspace/cooperation/notification-inbox/",{"title":703,"path":704,"stem":705,"tags":6,"slug":706,"sourcePath":704},"查看团队动态","/workspace/cooperation/file-activity","20.workspace/35.cooperation/30.file-activity","/workspace/cooperation/file-activity/",{"title":708,"path":709,"stem":710,"tags":711,"slug":712,"sourcePath":709},"创建外部共享链接","/workspace/cooperation/share-link-creation","20.workspace/35.cooperation/40.share-link-creation",[469],"/workspace/cooperation/share-link-creation/",{"title":714,"path":715,"stem":716,"tags":6,"slug":717,"sourcePath":715},"通过电子邮件发送外部共享链接","/workspace/cooperation/share-link-email","20.workspace/35.cooperation/42.share-link-email","/workspace/cooperation/share-link-email/",{"title":719,"tags":6,"slug":6,"path":720,"stem":721,"children":722,"page":66,"sourcePath":720},"搜索","/workspace/search","20.workspace/40.search",[723,728,734,739,744,749],{"title":724,"path":725,"stem":726,"tags":6,"slug":727,"sourcePath":725},"文件搜索","/workspace/search/search","20.workspace/40.search/00.search","/workspace/search/search/",{"title":729,"path":730,"stem":731,"tags":732,"slug":733,"sourcePath":730},"上下文搜索（AI 搜索）","/workspace/search/context-search","20.workspace/40.search/10.context-search",[469],"/workspace/search/context-search/",{"title":735,"path":736,"stem":737,"tags":6,"slug":738,"sourcePath":736},"图片搜索","/workspace/search/image-search","20.workspace/40.search/20.image-search","/workspace/search/image-search/",{"title":740,"path":741,"stem":742,"tags":6,"slug":743,"sourcePath":741},"聊天搜索","/workspace/search/chat-search","20.workspace/40.search/30.chat-search","/workspace/search/chat-search/",{"title":745,"path":746,"stem":747,"tags":6,"slug":748,"sourcePath":746},"评论搜索","/workspace/search/comment-search","20.workspace/40.search/40.comment-search","/workspace/search/comment-search/",{"title":750,"path":751,"stem":752,"tags":6,"slug":753,"sourcePath":751},"同义词搜索","/workspace/search/synonym-search","20.workspace/40.search/50.synonym-search","/workspace/search/synonym-search/",{"title":755,"tags":6,"slug":6,"path":756,"stem":757,"children":758,"page":66,"sourcePath":756},"AI","/workspace/ai","20.workspace/50.ai",[759,764,770],{"title":760,"path":761,"stem":762,"tags":6,"slug":763,"sourcePath":761},"AI 功能概览","/workspace/ai/overview","20.workspace/50.ai/00.overview","/workspace/ai/overview/",{"title":765,"path":766,"stem":767,"tags":768,"slug":769,"sourcePath":766},"向本地 AI 委托工作","/workspace/ai/ai-work","20.workspace/50.ai/10.ai-work",[469],"/workspace/ai/ai-work/",{"title":771,"path":772,"stem":773,"tags":6,"slug":774,"sourcePath":772},"使用外部 AI","/workspace/ai/external-ai","20.workspace/50.ai/20.external-ai","/workspace/ai/external-ai/",{"title":776,"tags":6,"slug":6,"path":777,"stem":778,"children":779,"page":66,"sourcePath":777},"Webspace","/webspace","40.webspace",[780,785,790,795,800,805,811,816,821,826,831,866],{"title":781,"path":782,"stem":783,"tags":6,"slug":784,"sourcePath":782},"什么是 Webspace？","/webspace/overview","40.webspace/00.overview","/webspace/overview/",{"title":786,"path":787,"stem":788,"tags":6,"slug":789,"sourcePath":787},"部署网站","/webspace/website-release","40.webspace/10.website-release","/webspace/website-release/",{"title":791,"path":792,"stem":793,"tags":6,"slug":794,"sourcePath":792},"创建架构文件（.sfn）","/webspace/create-database","40.webspace/20.create-database","/webspace/create-database/",{"title":796,"path":797,"stem":798,"tags":6,"slug":799,"sourcePath":797},"构建 API 并部署数据库","/webspace/api-overview","40.webspace/24.api-overview","/webspace/api-overview/",{"title":801,"path":802,"stem":803,"tags":6,"slug":804,"sourcePath":802},"查看前端示例","/webspace/frontend-example","40.webspace/26.frontend-example","/webspace/frontend-example/",{"title":806,"path":807,"stem":808,"tags":809,"slug":810,"sourcePath":807},"创建团队内部 Web 服务","/webspace/internal-webservice","40.webspace/32.internal-webservice",[469],"/webspace/internal-webservice/",{"title":812,"path":813,"stem":814,"tags":6,"slug":815,"sourcePath":813},"创建对外公开的 Web 服务","/webspace/external-webservice","40.webspace/34.external-webservice","/webspace/external-webservice/",{"title":817,"path":818,"stem":819,"tags":6,"slug":820,"sourcePath":818},"SQL 导入与导出","/webspace/sql-converter","40.webspace/42.sql-converter","/webspace/sql-converter/",{"title":822,"path":823,"stem":824,"tags":6,"slug":825,"sourcePath":823},"将架构转换为代码","/webspace/code-converter","40.webspace/44.code-converter","/webspace/code-converter/",{"title":827,"path":828,"stem":829,"tags":6,"slug":830,"sourcePath":828},"性能与扩展","/webspace/performance","40.webspace/48.performance","/webspace/performance/",{"title":832,"tags":6,"slug":6,"path":833,"stem":834,"children":835,"page":66,"sourcePath":833},"Webspace 管理","/webspace/admin","40.webspace/50.admin",[836,841,846,851,856,861],{"title":837,"path":838,"stem":839,"tags":6,"slug":840,"sourcePath":838},"开始使用 Webspace 管理","/webspace/admin/overview","40.webspace/50.admin/00.overview","/webspace/admin/overview/",{"title":842,"path":843,"stem":844,"tags":6,"slug":845,"sourcePath":843},"运营概览","/webspace/admin/operations","40.webspace/50.admin/10.operations","/webspace/admin/operations/",{"title":847,"path":848,"stem":849,"tags":6,"slug":850,"sourcePath":848},"工作空间访问","/webspace/admin/workspace-access","40.webspace/50.admin/20.workspace-access","/webspace/admin/workspace-access/",{"title":852,"path":853,"stem":854,"tags":6,"slug":855,"sourcePath":853},"API · 站点安全","/webspace/admin/api-site-security","40.webspace/50.admin/30.api-site-security","/webspace/admin/api-site-security/",{"title":857,"path":858,"stem":859,"tags":6,"slug":860,"sourcePath":858},"服务与容量","/webspace/admin/service-capacity","40.webspace/50.admin/40.service-capacity","/webspace/admin/service-capacity/",{"title":862,"path":863,"stem":864,"tags":6,"slug":865,"sourcePath":863},"部署管理与前端发布","/webspace/admin/deployments","40.webspace/50.admin/50.deployments","/webspace/admin/deployments/",{"title":867,"tags":868,"slug":6,"path":869,"stem":870,"children":871,"page":66,"sourcePath":869},"Webspace 实操教程",[469],"/webspace/examples","40.webspace/60.examples",[872,877,882,888,893,898],{"title":873,"path":869,"stem":874,"tags":6,"slug":875,"sourcePath":876},"Webspace 应用篇","40.webspace/60.examples/00.overview","/webspace/examples/","/webspace/examples/overview",{"title":878,"path":879,"stem":880,"tags":6,"slug":881,"sourcePath":879},"打造自己的业务系统","/webspace/examples/my-own-system","40.webspace/60.examples/10.my-own-system","/webspace/examples/my-own-system/",{"title":883,"path":884,"stem":885,"tags":886,"slug":887,"sourcePath":884},"制作实时五子棋游戏","/webspace/examples/realtime-gomoku","40.webspace/60.examples/20.realtime-gomoku",[469],"/webspace/examples/realtime-gomoku/",{"title":889,"path":890,"stem":891,"tags":6,"slug":892,"sourcePath":890},"用文件夹文件搭建资料公告板","/webspace/examples/folder-board","40.webspace/60.examples/30.folder-board","/webspace/examples/folder-board/",{"title":894,"path":895,"stem":896,"tags":6,"slug":897,"sourcePath":895},"搭建多人协同怪物讨伐","/webspace/examples/monster-raid","40.webspace/60.examples/40.monster-raid","/webspace/examples/monster-raid/",{"title":899,"path":900,"stem":901,"tags":6,"slug":902,"sourcePath":900},"部署 AI 咨询聊天示例","/webspace/examples/ai-support-chat","40.webspace/60.examples/50.ai-support-chat","/webspace/examples/ai-support-chat/",{"title":904,"tags":6,"slug":6,"path":905,"stem":906,"children":907,"page":66,"sourcePath":905},"使用插件","/plugin","50.plugin",[908,913,933,994,1015,1050],{"title":909,"path":910,"stem":911,"tags":6,"slug":912,"sourcePath":910},"插件概述","/plugin/overview","50.plugin/00.overview","/plugin/overview/",{"title":914,"tags":6,"slug":6,"path":915,"stem":916,"children":917,"page":66,"sourcePath":915},"日历","/plugin/calendar","50.plugin/10.calendar",[918,923,928],{"title":919,"path":920,"stem":921,"tags":6,"slug":922,"sourcePath":920},"日历介绍","/plugin/calendar/overview","50.plugin/10.calendar/00.overview","/plugin/calendar/overview/",{"title":924,"path":925,"stem":926,"tags":6,"slug":927,"sourcePath":925},"创建、修改和删除日程","/plugin/calendar/create-event","50.plugin/10.calendar/10.create-event","/plugin/calendar/create-event/",{"title":929,"path":930,"stem":931,"tags":6,"slug":932,"sourcePath":930},"查看活动记录","/plugin/calendar/file-activity","50.plugin/10.calendar/40.file-activity","/plugin/calendar/file-activity/",{"title":934,"tags":6,"slug":6,"path":935,"stem":936,"children":937,"page":66,"sourcePath":935},"电子邮件","/plugin/email","50.plugin/20.email",[938,943,948,953,958,964,969,974,979,984,989],{"title":939,"path":940,"stem":941,"tags":6,"slug":942,"sourcePath":940},"电子邮件介绍","/plugin/email/overview","50.plugin/20.email/00.overview","/plugin/email/overview/",{"title":944,"path":945,"stem":946,"tags":6,"slug":947,"sourcePath":945},"电子邮件设置","/plugin/email/setfn-email-setting","50.plugin/20.email/05.setfn-email-setting","/plugin/email/setfn-email-setting/",{"title":949,"path":950,"stem":951,"tags":6,"slug":952,"sourcePath":950},"连接外部电子邮件","/plugin/email/external-email","50.plugin/20.email/07.external-email","/plugin/email/external-email/",{"title":954,"path":955,"stem":956,"tags":6,"slug":957,"sourcePath":955},"电子邮件基本功能","/plugin/email/email-basic","50.plugin/20.email/10.email-basic","/plugin/email/email-basic/",{"title":959,"path":960,"stem":961,"tags":6,"slug":962,"sourcePath":963},"使用邮件 AI 助手","/plugin/email/ai-assistant","50.plugin/20.email/15.email-ai-assistant","/plugin/email/ai-assistant/","/plugin/email/email-ai-assistant",{"title":965,"path":966,"stem":967,"tags":6,"slug":968,"sourcePath":966},"撰写和发送电子邮件","/plugin/email/email-compose","50.plugin/20.email/20.email-compose","/plugin/email/email-compose/",{"title":970,"path":971,"stem":972,"tags":6,"slug":973,"sourcePath":971},"附加文件","/plugin/email/email-attachment","50.plugin/20.email/30.email-attachment","/plugin/email/email-attachment/",{"title":975,"path":976,"stem":977,"tags":6,"slug":978,"sourcePath":976},"电子邮件文件夹管理","/plugin/email/email-folders","50.plugin/20.email/40.email-folders","/plugin/email/email-folders/",{"title":980,"path":981,"stem":982,"tags":6,"slug":983,"sourcePath":981},"自动分类电子邮件","/plugin/email/email-auto-classify","50.plugin/20.email/50.email-auto-classify","/plugin/email/email-auto-classify/",{"title":985,"path":986,"stem":987,"tags":6,"slug":988,"sourcePath":986},"电子邮件文件的保管与共享","/plugin/email/email-open-in-space","50.plugin/20.email/60.email-open-in-space","/plugin/email/email-open-in-space/",{"title":990,"path":991,"stem":992,"tags":6,"slug":993,"sourcePath":991},"电子邮件安全","/plugin/email/email-security","50.plugin/20.email/70.email-security","/plugin/email/email-security/",{"title":995,"tags":6,"slug":6,"path":996,"stem":997,"children":998,"page":66,"sourcePath":996},"工作流（业务自动化）","/plugin/workflow","50.plugin/30.workflow",[999,1004,1010],{"title":1000,"path":1001,"stem":1002,"tags":6,"slug":1003,"sourcePath":1001},"工作流简介","/plugin/workflow/overview","50.plugin/30.workflow/00.overview","/plugin/workflow/overview/",{"title":1005,"path":1006,"stem":1007,"tags":1008,"slug":1009,"sourcePath":1006},"创建新工作流","/plugin/workflow/new-workflow","50.plugin/30.workflow/10.new-workflow",[469],"/plugin/workflow/new-workflow/",{"title":1011,"path":1012,"stem":1013,"tags":6,"slug":1014,"sourcePath":1012},"查看执行记录","/plugin/workflow/execution-history","50.plugin/30.workflow/20.execution-history","/plugin/workflow/execution-history/",{"title":1016,"tags":6,"slug":6,"path":1017,"stem":1018,"children":1019,"page":66,"sourcePath":1017},"微调（AI 训练）","/plugin/fine-tuning","50.plugin/40.fine-tuning",[1020,1025,1030,1035,1040,1045],{"title":1021,"path":1022,"stem":1023,"tags":6,"slug":1024,"sourcePath":1022},"微调简介","/plugin/fine-tuning/overview","50.plugin/40.fine-tuning/00.overview","/plugin/fine-tuning/overview/",{"title":1026,"path":1027,"stem":1028,"tags":6,"slug":1029,"sourcePath":1027},"训练数据预处理","/plugin/fine-tuning/pre-processing","50.plugin/40.fine-tuning/10.pre-processing","/plugin/fine-tuning/pre-processing/",{"title":1031,"path":1032,"stem":1033,"tags":6,"slug":1034,"sourcePath":1032},"训练","/plugin/fine-tuning/training","50.plugin/40.fine-tuning/20.training","/plugin/fine-tuning/training/",{"title":1036,"path":1037,"stem":1038,"tags":6,"slug":1039,"sourcePath":1037},"评估","/plugin/fine-tuning/evaluation","50.plugin/40.fine-tuning/30.evaluation","/plugin/fine-tuning/evaluation/",{"title":1041,"path":1042,"stem":1043,"tags":6,"slug":1044,"sourcePath":1042},"聊天测试","/plugin/fine-tuning/chat-test","50.plugin/40.fine-tuning/40.chat-test","/plugin/fine-tuning/chat-test/",{"title":1046,"path":1047,"stem":1048,"tags":6,"slug":1049,"sourcePath":1047},"导出","/plugin/fine-tuning/export","50.plugin/40.fine-tuning/50.export","/plugin/fine-tuning/export/",{"title":1051,"tags":6,"slug":6,"path":1052,"stem":1053,"children":1054,"page":66,"sourcePath":1052},"EDC（数据收集）","/plugin/edc","50.plugin/50.edc",[1055,1060,1065,1070],{"title":1056,"path":1057,"stem":1058,"tags":6,"slug":1059,"sourcePath":1057},"EDC 简介","/plugin/edc/overview","50.plugin/50.edc/00.overview","/plugin/edc/overview/",{"title":1061,"path":1062,"stem":1063,"tags":6,"slug":1064,"sourcePath":1062},"数据录入、Audit Trail","/plugin/edc/data-entry","50.plugin/50.edc/10.data-entry","/plugin/edc/data-entry/",{"title":1066,"path":1067,"stem":1068,"tags":6,"slug":1069,"sourcePath":1067},"构建器","/plugin/edc/builder","50.plugin/50.edc/20.builder","/plugin/edc/builder/",{"title":1071,"path":1072,"stem":1073,"tags":6,"slug":1074,"sourcePath":1072},"用户/机构设置","/plugin/edc/account","50.plugin/50.edc/30.account","/plugin/edc/account/",{"title":1076,"tags":6,"slug":6,"path":1077,"stem":1078,"children":1079,"page":66,"sourcePath":1077},"命令行工具","/cli","90.cli",[1080],{"title":1081,"path":1082,"stem":1083,"tags":6,"slug":1084,"sourcePath":1082},"使用命令管理服务器","/cli/commands","90.cli/10.commands","/cli/commands/",{"title":1086,"tags":6,"slug":6,"path":1087,"stem":1088,"children":1089,"page":66,"sourcePath":1087},"安全更新","/security-updates","95.security-updates",[1090,1095,1100,1105],{"title":1091,"path":1092,"stem":1093,"tags":6,"slug":1094,"sourcePath":1092},"了解安全检查与更新方式","/security-updates/overview","95.security-updates/00.overview","/security-updates/overview/",{"title":1096,"path":1097,"stem":1098,"tags":6,"slug":1099,"sourcePath":1097},"安全检查记录","/security-updates/review-log","95.security-updates/10.review-log","/security-updates/review-log/",{"title":1101,"path":1102,"stem":1103,"tags":6,"slug":1104,"sourcePath":1102},"主要漏洞检查状态","/security-updates/vulnerability-status","95.security-updates/20.vulnerability-status","/security-updates/vulnerability-status/",{"title":1106,"path":1107,"stem":1108,"tags":6,"slug":1109,"sourcePath":1107},"检查服务器安全更新","/security-updates/server-checklist","95.security-updates/30.server-checklist","/security-updates/server-checklist/",{"title":1111,"tags":6,"slug":6,"path":1112,"stem":1113,"children":1114,"page":66,"sourcePath":1112},"FAQ","/faq","99.FAQ",[1115,1121,1127,1133,1139,1145,1151],{"title":1116,"path":1117,"stem":1118,"tags":6,"slug":1119,"sourcePath":1120},"SetFN 与云服务对比","/FAQ/comparison-cloud","99.FAQ/10.comparison-cloud","/FAQ/comparison-cloud/","/faq/comparison-cloud",{"title":1122,"path":1123,"stem":1124,"tags":6,"slug":1125,"sourcePath":1126},"SetFN 与 NAS 对比","/FAQ/comparison-nas","99.FAQ/20.comparison-nas","/FAQ/comparison-nas/","/faq/comparison-nas",{"title":1128,"path":1129,"stem":1130,"tags":6,"slug":1131,"sourcePath":1132},"安全政策","/FAQ/security-policy","99.FAQ/30.security-policy","/FAQ/security-policy/","/faq/security-policy",{"title":1134,"path":1135,"stem":1136,"tags":6,"slug":1137,"sourcePath":1138},"SetFN 为什么这么快","/FAQ/why-fast","99.FAQ/40.why-fast","/FAQ/why-fast/","/faq/why-fast",{"title":1140,"path":1141,"stem":1142,"tags":6,"slug":1143,"sourcePath":1144},"许可证 FAQ","/FAQ/license-faq","99.FAQ/50.license-faq","/FAQ/license-faq/","/faq/license-faq",{"title":1146,"path":1147,"stem":1148,"tags":6,"slug":1149,"sourcePath":1150},"AI 功能 FAQ","/FAQ/ai-faq","99.FAQ/60.ai-faq","/FAQ/ai-faq/","/faq/ai-faq",{"title":1152,"path":1153,"stem":1154,"tags":6,"slug":1155,"sourcePath":1156},"问题排查指南","/FAQ/troubleshooting","99.FAQ/70.troubleshooting","/FAQ/troubleshooting/","/faq/troubleshooting",{"id":1158,"title":796,"body":1159,"cover":6,"description":2234,"extension":2235,"image":6,"meta":2236,"navigation":2237,"path":797,"reviewSummary":6,"reviewedAt":6,"seo":2238,"slug":799,"stem":798,"tags":6,"thumbnail":6,"thumbnailPosition":6,"thumbnailScale":6,"__hash__":2247},"docs_zh/40.webspace/24.api-overview.md",{"type":1160,"value":1161,"toc":2211},"minimal",[1162,1166,1175,1178,1181,1185,1201,1205,1211,1217,1222,1225,1302,1313,1322,1326,1393,1408,1414,1417,1423,1427,1434,1470,1477,1483,1487,1510,1516,1519,1525,1569,1591,1595,1598,1604,1610,1615,1619,1636,1642,1653,1658,1661,1664,1688,1708,1711,1717,1723,1851,1862,1865,1868,1904,1906,1909,1932,1970,1982,1986,1993,2003,2006,2012,2015,2028,2035,2038,2100,2103,2150,2153,2156,2159,2179,2182,2207],[1163,1164,796],"h1",{"id":1165},"构建-api-并部署数据库",[1167,1168,1169,1170,1174],"p",{},"创建好架构文件（.sfn）后，接下来就该把设计变成实际的服务了。打开 ",[1171,1172,1173],"code",{},"API 构建","，每个表的创建、查询、修改、删除 API 都会准备就绪，还能在同一个界面中确认每个地址可以由谁使用。",[1167,1176,1177],{},"如有需要，还可以将自己编写的查询 API、静态文件 API 和实时事件连接到同一个服务。",[1179,1180],"hr",{},[1182,1183,1184],"h2",{"id":1184},"开始之前",[1186,1187,1188,1192],"ul",{},[1189,1190,1191],"li",{},"所需权限：已被授予数据库使用权限的用户",[1189,1193,1194,1195,1200],{},"事先准备：需要先创建",[1196,1197,1199],"a",{"href":1198},"./create-database","架构文件（.sfn）","。",[1182,1202,1204],{"id":1203},"打开-api-构建","打开 API 构建",[1167,1206,1207,1208,1210],{},"选择架构界面上方的 ",[1171,1209,1173],{}," 选项卡，即可查看按表自动生成的 API 列表。",[1167,1212,1213],{},[1214,1215],"img",{"alt":1173,"src":1216},"./_screenshots/schema-api-build_zh.png",[1218,1219,1221],"h3",{"id":1220},"自动生成的-api","自动生成的 API",[1167,1223,1224],{},"每个表默认会自动生成以下 5 个 API。如有需要，也可以手动添加新的 API。",[1226,1227,1228,1244],"table",{},[1229,1230,1231],"thead",{},[1232,1233,1234,1238,1241],"tr",{},[1235,1236,1237],"th",{},"方法",[1235,1239,1240],{},"端点",[1235,1242,1243],{},"说明",[1245,1246,1247,1259,1269,1280,1291],"tbody",{},[1232,1248,1249,1253,1256],{},[1250,1251,1252],"td",{},"GET",[1250,1254,1255],{},".../list",[1250,1257,1258],{},"查询列表",[1232,1260,1261,1263,1266],{},[1250,1262,1252],{},[1250,1264,1265],{},".../view/:id",[1250,1267,1268],{},"查询单条",[1232,1270,1271,1274,1277],{},[1250,1272,1273],{},"POST",[1250,1275,1276],{},".../create",[1250,1278,1279],{},"创建",[1232,1281,1282,1285,1288],{},[1250,1283,1284],{},"PUT",[1250,1286,1287],{},".../update/:id",[1250,1289,1290],{},"修改",[1232,1292,1293,1296,1299],{},[1250,1294,1295],{},"DELETE",[1250,1297,1298],{},".../delete/:id",[1250,1300,1301],{},"删除",[1167,1303,1304,1305,1308,1309,1312],{},"在 ",[1171,1306,1307],{},"添加新 API（Custom Endpoint）"," 中，可以添加自定义了所需查询和响应形式的 API。使用 ",[1171,1310,1311],{},"添加静态文件 API","，可以按文件格式提供工作空间中的 JSON、XML、HTML、图片和二进制文件。",[1314,1315,1316],"note",{},[1167,1317,1318,1319,1200],{},"将文件夹指定为源时，可以以 JSON 形式获取文件列表并提供所选文件的内容。配置方法请参阅",[1196,1320,889],{"href":1321},"./examples/folder-board",[1218,1323,1325],{"id":1324},"通过-api-提供静态文件或文件夹","通过 API 提供静态文件或文件夹",[1327,1328,1329,1334,1346,1365,1376,1390],"ol",{},[1189,1330,1331,1332,1200],{},"选择 ",[1171,1333,1311],{},[1189,1335,1304,1336,1339,1340,1342,1343,1200],{},[1171,1337,1338],{},"存储空间"," 中选择 ",[1171,1341,390],{}," 或 ",[1171,1344,1345],{},"个人空间",[1189,1347,1304,1348,1339,1351,1342,1354,1357,1358,1342,1361,1364],{},[1171,1349,1350],{},"公开对象",[1171,1352,1353],{},"单个文件",[1171,1355,1356],{},"文件夹列表 · 文件内容","，然后通过 ",[1171,1359,1360],{},"选择文件",[1171,1362,1363],{},"选择文件夹"," 指定源。",[1189,1366,1367,1368,1371,1372,1375],{},"如果选择了文件夹，请设置 ",[1171,1369,1370],{},"允许的扩展名"," 和 ",[1171,1373,1374],{},"包含子文件夹","。扩展名留空时，所有格式都将成为对象。",[1189,1377,1304,1378,1381,1382,1385,1386,1389],{},[1171,1379,1380],{},"响应方式"," 中选择是在浏览器中显示内容（",[1171,1383,1384],{},"在浏览器中直接显示","），还是以文件形式接收（",[1171,1387,1388],{},"下载","）。",[1189,1391,1392],{},"确认端点权限后部署架构。",[1167,1394,1395,1396,1399,1400,1402,1403,1342,1405,1200],{},"单个文件会在设置的端点上响应其内容。文件夹则会同时生成文件列表 JSON 和通过列表项的 ",[1171,1397,1398],{},"id"," 读取内容的地址。重命名或移动文件时，基于路径生成的 ",[1171,1401,1398],{}," 也会改变，因此客户端应使用从列表中获取的最新 ",[1171,1404,1398],{},[1171,1406,1407],{},"viewUrl",[1409,1410,1411],"warning",{},[1167,1412,1413],{},"在浏览器中直接显示 HTML 或 SVG 等可执行文件时，请只选择可信的文件作为源。服务器会应用安全标头，但同时也应限制 API 的访问权限。",[1167,1415,1416],{},"在功能端点中，可以设置实时套接字、文件和图片上传、AI 回复等整个服务通用功能的权限。",[1167,1418,1419],{},[1214,1420],{"alt":1421,"src":1422},"静态文件夹 API 的存储空间和文件查看设置","./_screenshots/webspace-static-folder-api_en.png",[1218,1424,1426],{"id":1425},"导入实时事件与-rest-捆绑包","导入实时事件与 REST 捆绑包",[1167,1428,1429,1430,1433],{},"在实时套接字的 ",[1171,1431,1432],{},"事件定义"," 中，可以只编写事件，也可以导入包含事件所需的表和 REST 设置的 JSON 或 YAML 捆绑包。",[1327,1435,1436,1442,1452,1458,1464],{},[1189,1437,1331,1438,1441],{},[1171,1439,1440],{},"粘贴 AI 回答"," 并粘贴捆绑包。自行准备的捆绑包也可以按相同格式粘贴。",[1189,1443,1444,1445,1448,1449,1200],{},"要保留现有事件，选择 ",[1171,1446,1447],{},"按名称合并","；要替换当前全部事件，选择 ",[1171,1450,1451],{},"全部替换",[1189,1453,1304,1454,1457],{},[1171,1455,1456],{},"应用预览"," 中确认将要添加、更改、删除的事件，以及将要添加的表、列和 REST 数量。",[1189,1459,1460,1461,1200],{},"确认与现有 REST 冲突或格式被自动整理、排除的项目。仅在需要更改现有 REST 时才选择 ",[1171,1462,1463],{},"覆盖冲突的 REST 设置",[1189,1465,1466,1467,1200],{},"确认服务器检查结果并修正错误后，选择 ",[1171,1468,1469],{},"应用",[1167,1471,1472,1473,1476],{},"导入会更改当前正在编辑的架构。只有完成 ",[1171,1474,1475],{},"部署"," 后才会反映到实际服务。即使在导入界面中已应用，部署时服务器仍会重新检查事件和 REST 规则，未通过时不会部署。",[1167,1478,1479],{},[1214,1480],{"alt":1481,"src":1482},"实时事件与 REST 捆绑包导入预览","./_screenshots/webspace-realtime-import-preview_en.png",[1182,1484,1486],{"id":1485},"用自定义端点创建-crud-之外的-api","用自定义端点创建 CRUD 之外的 API",[1167,1488,1489,1490,1493,1494,1493,1497,1493,1500,1493,1503,1506,1507,1509],{},"当自动生成的 5 个 API（",[1171,1491,1492],{},"list","/",[1171,1495,1496],{},"view",[1171,1498,1499],{},"create",[1171,1501,1502],{},"update",[1171,1504,1505],{},"delete","）不够用时，点击 ",[1171,1508,1307],{}," 可以更加精细地定义行为。",[1167,1511,1512],{},[1214,1513],{"alt":1514,"src":1515},"通过添加新 API 创建的自定义端点的基本设置界面。指定 API 类型、操作种类、目标范围和路径","./_screenshots/webspace-customapi-basic_en.png",[1218,1517,1518],{"id":1518},"操作种类",[1167,1520,1521,1522,1524],{},"除基本的 5 个 CRUD 操作外，",[1171,1523,1518],{}," 下拉菜单中还有以下选项。",[1226,1526,1527,1536],{},[1229,1528,1529],{},[1232,1530,1531,1533],{},[1235,1532,1518],{},[1235,1534,1535],{},"含义",[1245,1537,1538,1546,1554,1562],{},[1232,1539,1540,1543],{},[1250,1541,1542],{},"执行操作",[1250,1544,1545],{},"适用于不完全符合 CRUD、以命令方式处理的端点",[1232,1547,1548,1551],{},[1250,1549,1550],{},"查询统计",[1250,1552,1553],{},"返回计数、合计、聚合等统计性结果",[1232,1555,1556,1559],{},[1250,1557,1558],{},"批量处理",[1250,1560,1561],{},"一次处理多条记录",[1232,1563,1564,1566],{},[1250,1565,1046],{},[1250,1567,1568],{},"以文件形式下载查询结果",[1167,1570,1571,1574,1575,1578,1579,1582,1583,1586,1587,1590],{},[1171,1572,1573],{},"目标范围"," 可从 ",[1171,1576,1577],{},"集合","（针对整个表或多条记录，通常是不带 ",[1171,1580,1581],{},":id"," 的路径）、",[1171,1584,1585],{},"单个项目","（特定的一条记录）、",[1171,1588,1589],{},"命令","（不符合 CRUD 的自定义命令式端点）中选择。",[1218,1592,1594],{"id":1593},"权限与-rest-api-相同分为-3-级","权限与 REST API 相同，分为 3 级",[1167,1596,1597],{},"自定义端点的权限设置方式与自动生成的 API 相同。界面上有直接的说明，不会造成混淆。",[1167,1599,1600],{},[1214,1601],{"alt":1602,"src":1603},"自定义端点的权限选择面板。显示仅成员 / 成员 + 附加条件（等级、团队、管理员、本人）/ 所有人三种选项及其说明","./_screenshots/webspace-customapi-permission_en.png",[1167,1605,1331,1606,1609],{},[1171,1607,1608],{},"成员 + 附加条件"," 后，可以组合应用等级、所属团队、是否为管理员、本人（owner）等条件。例如，“仅限等级 2 以上”、“仅限销售团队成员”之类的条件，可以用与 REST API 自动生成端点完全相同的方式应用到自定义端点上。",[1314,1611,1612],{},[1167,1613,1614],{},"这些条件（等级/团队/管理员/本人）用于判断“谁可以调用此端点”。这里没有“每天最多 3 次”之类的次数限制条件——如有需要，必须在下面的 SQL 编辑器中自行实现。",[1218,1616,1618],{"id":1617},"直接编写-sql","直接编写 SQL",[1167,1620,1621,1624,1625,1628,1629,1631,1632,1635],{},[1171,1622,1623],{},"处理流程"," 选项卡的 ",[1171,1626,1627],{},"基础查询"," 中有一个编辑器，可直接编写此端点要执行的 SQL。在自动生成的 API 中，将 ",[1171,1630,1627],{}," 切换为 ",[1171,1633,1634],{},"手写 SQL"," 即可打开相同的编辑器。",[1167,1637,1638],{},[1214,1639],{"alt":1640,"src":1641},"处理流程选项卡中基础查询的 SQL 编辑器。默认填入了 SELECT * FROM leave_balances WHERE 1=1;","./_screenshots/webspace-customapi-sql_en.png",[1167,1643,1644,1645,1648,1649,1652],{},"REST API 列表的 ",[1171,1646,1647],{},"处理"," 列中也会显示此端点使用手写查询的标记（",[1171,1650,1651],{},"SQL"," 徽章）。自动生成的 API 无法表达的条件——例如“如果该成员今天已创建 3 行以上则拒绝”这类基于聚合的条件——只能通过此 SQL 编辑器实现。",[1654,1655,1657],"h4",{"id":1656},"检查-sql-和参数","检查 SQL 和参数",[1167,1659,1660],{},"输入 SQL 后，浏览器会检查语法以及当前架构中的表和列。如果错误或待确认项显示了行号和列号，选择该项即可跳转到编辑器中的相应位置。也可以从部署区域打开存在错误的 SQL。",[1167,1662,1663],{},"这项检查不会在实际数据库中执行查询。部署后，请调用 API，确认数据库特有函数、访问权限以及实际数据下的结果。",[1167,1665,1666,1667,1670,1671,1673,1674,1673,1677,1371,1680,1683,1684,1687],{},"参数列表显示 SQL 中使用的 ",[1171,1668,1669],{},":name"," 形式的参数。",[1171,1672,1581],{},"、",[1171,1675,1676],{},":user_id",[1171,1678,1679],{},":nick",[1171,1681,1682],{},":now"," 是由服务器填充的保留值。其他值在读取请求中来自查询字符串，在写入请求中来自输入处理后的请求正文。缺少的值按 ",[1171,1685,1686],{},"NULL"," 处理。",[1409,1689,1690],{},[1167,1691,1692,1693,1696,1697,1700,1701,1703,1704,1707],{},"直接编写的写入 SQL 不会自动添加所有者条件或",[1171,1694,1695],{},"条件","函数的筛选条件。如果只能修改当前用户的数据，请在 ",[1171,1698,1699],{},"WHERE"," 中自行添加所有者列与 ",[1171,1702,1676],{}," 的比较条件。查询单个条目时，",[1171,1705,1706],{},"SELECT"," 结果必须包含主键列；仅查询本人数据时，还需包含所有者列。",[1218,1709,1710],{"id":1710},"通过处理流程改变请求处理方式",[1167,1712,1713,1714,1716],{},"即使不直接编写 SQL，也可以在 ",[1171,1715,1623],{}," 选项卡中按顺序添加预先准备好的函数，来改变请求的处理流程。函数分为输入处理、DB 处理、输出处理三个阶段。",[1167,1718,1719],{},[1214,1720],{"alt":1721,"src":1722},"可添加到处理流程的 11 个函数列表。分为输入处理（输入验证、填入会话值、默认值、移动键）、DB 处理（条件、页面大小、排序）、输出处理（隐藏字段、重命名键、添加聚合、Webhook）","./_screenshots/webspace-customapi-pipeline_en.png",[1226,1724,1725,1737],{},[1229,1726,1727],{},[1232,1728,1729,1732,1735],{},[1235,1730,1731],{},"分类",[1235,1733,1734],{},"函数",[1235,1736,1243],{},[1245,1738,1739,1750,1760,1770,1780,1790,1800,1810,1821,1831,1841],{},[1232,1740,1741,1744,1747],{},[1250,1742,1743],{},"输入处理",[1250,1745,1746],{},"输入验证",[1250,1748,1749],{},"验证字段必填和格式，失败时返回 400",[1232,1751,1752,1754,1757],{},[1250,1753,1743],{},[1250,1755,1756],{},"填入会话值",[1250,1758,1759],{},"将登录会话值（user_id 等）自动设置到字段",[1232,1761,1762,1764,1767],{},[1250,1763,1743],{},[1250,1765,1766],{},"默认值",[1250,1768,1769],{},"为空字段填入默认值",[1232,1771,1772,1774,1777],{},[1250,1773,1743],{},[1250,1775,1776],{},"移动键",[1250,1778,1779],{},"将请求正文的键名移动为表的列名",[1232,1781,1782,1785,1787],{},[1250,1783,1784],{},"DB 处理",[1250,1786,1695],{},[1250,1788,1789],{},"添加 WHERE 条件",[1232,1791,1792,1794,1797],{},[1250,1793,1784],{},[1250,1795,1796],{},"页面大小",[1250,1798,1799],{},"自动处理 limit/offset",[1232,1801,1802,1804,1807],{},[1250,1803,1784],{},[1250,1805,1806],{},"排序",[1250,1808,1809],{},"设置 ORDER BY 依据",[1232,1811,1812,1815,1818],{},[1250,1813,1814],{},"输出处理",[1250,1816,1817],{},"隐藏字段",[1250,1819,1820],{},"从响应中移除特定列",[1232,1822,1823,1825,1828],{},[1250,1824,1814],{},[1250,1826,1827],{},"重命名键",[1250,1829,1830],{},"更改响应 JSON 的键",[1232,1832,1833,1835,1838],{},[1250,1834,1814],{},[1250,1836,1837],{},"添加聚合",[1250,1839,1840],{},"将 COUNT/SUM 等聚合值添加到响应",[1232,1842,1843,1845,1848],{},[1250,1844,1814],{},[1250,1846,1847],{},"Webhook",[1250,1849,1850],{},"向外部 URL 发送事件",[1409,1852,1853],{},[1167,1854,1855,1857,1858,1861],{},[1171,1856,1695],{},"函数通过列、运算符和一个固定值创建简单比较（如 ",[1171,1859,1860],{},"WHERE column = value","）。如果条件需要聚合，例如统计该成员今天创建的行数，请在上面的 SQL 编辑器中编写子查询。",[1218,1863,1864],{"id":1864},"权限设置",[1167,1866,1867],{},"可以为每个 API 单独设置访问权限。这里所说的成员就是工作空间的成员账户。无需另外构建登录和认证系统，工作空间中已有的成员、等级、团队体系会直接与 API 权限联动。",[1226,1869,1870,1879],{},[1229,1871,1872],{},[1232,1873,1874,1877],{},[1235,1875,1876],{},"权限",[1235,1878,1243],{},[1245,1880,1881,1889,1896],{},[1232,1882,1883,1886],{},[1250,1884,1885],{},"仅成员",[1250,1887,1888],{},"只要是已登录的成员，任何人都可以调用",[1232,1890,1891,1893],{},[1250,1892,1608],{},[1250,1894,1895],{},"必须是成员，且满足等级、所属团队、是否为管理员等附加条件才能调用",[1232,1897,1898,1901],{},[1250,1899,1900],{},"所有人",[1250,1902,1903],{},"无需登录即可调用，但不允许创建、修改、删除等写入请求",[1182,1905,1475],{"id":1475},[1167,1907,1908],{},"按以下步骤输入部署信息。",[1327,1910,1911,1917,1923],{},[1189,1912,1913,1916],{},[1171,1914,1915],{},"数据库标识符","：用英文输入部署服务器上要使用的 DB 的逻辑名称。",[1189,1918,1919,1922],{},[1171,1920,1921],{},"存储引擎模式","：从 SQLite3、PostgreSQL、MySQL 或 MariaDB 中选择。外部 DB 还需额外输入 host、port、DB 名称、用户和密码。MySQL 和 MariaDB 使用基于 InnoDB 的配置。",[1189,1924,1304,1925,1371,1928,1931],{},[1171,1926,1927],{},"基本设置",[1171,1929,1930],{},"高级设置"," 中确认以下项目。",[1226,1933,1934,1943],{},[1229,1935,1936],{},[1232,1937,1938,1941],{},[1235,1939,1940],{},"项目",[1235,1942,1243],{},[1245,1944,1945,1958],{},[1232,1946,1947,1952],{},[1250,1948,1949],{},[1171,1950,1951],{},"客户端部署路径",[1250,1953,1954,1955,1957],{},"位于 ",[1171,1956,1927],{}," 中。选择生成示例前端产物（index.html、test.html、README 等）的路径",[1232,1959,1960,1965],{},[1250,1961,1962],{},[1171,1963,1964],{},"IP 限制",[1250,1966,1954,1967,1969],{},[1171,1968,1930],{}," 中。以白名单方式指定允许访问 API 的 IP",[1167,1971,1972,1973,1975,1976,1978,1979,1200],{},"在 API 列表下方的部署区域中选择 ",[1171,1974,1475],{},"，设置项会展开。部署区域固定在编辑界面的最底部，即使滚动 API 列表也始终可见。仅第一次选择不会执行部署。确认设置后再次选择 ",[1171,1977,1475],{},"，数据库和 API 就会准备就绪。如果指定了客户端部署路径，还会一并生成可用于测试 API 的示例界面。更改界面的方法请继续参阅",[1196,1980,801],{"href":1981},"./frontend-example",[1182,1983,1985],{"id":1984},"api-调用示例","API 调用示例",[1167,1987,1988,1989,1992],{},"已部署的 API 按以下形式调用。（以表名 ",[1171,1990,1991],{},"user_profile"," 为例）",[1994,1995,2000],"pre",{"className":1996,"code":1998,"language":1999},[1997],"language-text","GET  /api/web/{dbName}/user_profile/list\nGET  /api/web/{dbName}/user_profile/view/{id}\nPOST /api/web/{dbName}/user_profile/create\nPUT  /api/web/{dbName}/user_profile/update/{id}\nDELETE /api/web/{dbName}/user_profile/delete/{id}\n","text",[1171,2001,1998],{"__ignoreMap":2002},"",[1167,2004,2005],{},"创建（POST）请求示例：",[1994,2007,2010],{"className":2008,"code":2009,"language":1999},[1997],"POST /api/web/{dbName}/user_profile/create\nContent-Type: application/json\n\n{\n  \"email\": \"user@example.com\",\n  \"is_active\": true\n}\n",[1171,2011,2009],{"__ignoreMap":2002},[1182,2013,2014],{"id":2014},"读取错误响应",[1167,2016,2017,2018,1342,2020,2023,2024,2027],{},"如果请求失败，请同时确认 HTTP 状态和 ",[1171,2019,1171],{},[1171,2021,2022],{},"errorCode","。错误代码不会因语言而改变，因此登录请求、重试等操作应根据代码判断，而 ",[1171,2025,2026],{},"message"," 用于在界面上显示。",[1167,2029,2030,2031,2034],{},"Webspace 的默认错误提示支持韩语、英语、日语、简体中文和德语。优先使用已登录成员的语言设置；如果没有设置或是不支持的语言，则参考请求的 ",[1171,2032,2033],{},"Accept-Language","。两者都不匹配时，以英语提示。在外部 API 集成中，请勿直接比较显示文字本身。",[1167,2036,2037],{},"例如，需要登录的请求会返回以下信息。",[1994,2039,2043],{"className":2040,"code":2041,"language":2042,"meta":2002,"style":2002},"language-json shiki shiki-themes github-light github-dark monokai","{\n  \"code\": \"WEBSPACE_LOGIN_REQUIRED\",\n  \"errorCode\": \"WEBSPACE_LOGIN_REQUIRED\",\n  \"message\": \"需要登录。\"\n}\n","json",[1171,2044,2045,2054,2071,2083,2094],{"__ignoreMap":2002},[2046,2047,2050],"span",{"class":2048,"line":2049},"line",1,[2046,2051,2053],{"class":2052},"sMOD_","{\n",[2046,2055,2057,2061,2064,2068],{"class":2048,"line":2056},2,[2046,2058,2060],{"class":2059},"s-m8C","  \"code\"",[2046,2062,2063],{"class":2052},": ",[2046,2065,2067],{"class":2066},"sCZoN","\"WEBSPACE_LOGIN_REQUIRED\"",[2046,2069,2070],{"class":2052},",\n",[2046,2072,2074,2077,2079,2081],{"class":2048,"line":2073},3,[2046,2075,2076],{"class":2059},"  \"errorCode\"",[2046,2078,2063],{"class":2052},[2046,2080,2067],{"class":2066},[2046,2082,2070],{"class":2052},[2046,2084,2086,2089,2091],{"class":2048,"line":2085},4,[2046,2087,2088],{"class":2059},"  \"message\"",[2046,2090,2063],{"class":2052},[2046,2092,2093],{"class":2066},"\"需要登录。\"\n",[2046,2095,2097],{"class":2048,"line":2096},5,[2046,2098,2099],{"class":2052},"}\n",[1167,2101,2102],{},"这些是错误响应中需要确认的核心字段。完整的响应格式可能因 REST API、静态文件、管理 API 而有所不同。",[1186,2104,2105,2127,2147],{},[1189,2106,2107,2108,1371,2111,2114,2115,2118,2119,1673,2122,1673,2124,2126],{},"输入值验证响应使用现有格式 ",[1171,2109,2110],{},"ok: false",[1171,2112,2113],{},"errors"," 列表。即使 HTTP 状态为 200 也请确认 ",[1171,2116,2117],{},"ok","，并通过各项的 ",[1171,2120,2121],{},"field",[1171,2123,1171],{},[1171,2125,2026],{}," 提示问题。",[1189,2128,2129,2130,2133,2134,2137,2138,2141,2142,1371,2144,2146],{},"WebSocket 错误在 ",[1171,2131,2132],{},"type: \"error\""," 消息的 ",[1171,2135,2136],{},"data"," 中确认。现有的分类用 ",[1171,2139,2140],{},"key"," 会保留，",[1171,2143,1171],{},[1171,2145,2022],{}," 用于区分错误原因。",[1189,2148,2149],{},"服务器的实际文件路径、SQL 和内部错误原文不会返回给用户。如果是需要运营者查看服务器日志的错误，请一并提供发生时间、请求路径、HTTP 状态和错误代码。",[1182,2151,2152],{"id":2152},"部署与覆盖",[1167,2154,2155],{},"覆盖已有数据的架构的操作遵循服务器的部署策略。根据组织策略，可以禁止该操作，或限制为仅管理员或指定的部署管理人员可以执行。更改结构之前，请确认受影响的列和 API，以及备份与恢复流程。",[1182,2157,2158],{"id":2158},"注意事项",[1186,2160,2161,2167,2170,2173,2176],{},[1189,2162,2163,2164,2166],{},"API 基于 SetFN 登录会话进行认证。未认证的请求会被拒绝。（但权限设置为 ",[1171,2165,1900],{}," 的 API 除外。）",[1189,2168,2169],{},"更改架构结构时，API 端点也会随之更新，请确认现有集成代码的兼容性。",[1189,2171,2172],{},"SQLite3 数据保存在该服务器的 WebSpace 存储中，外部引擎数据保存在管理员设置的 DB 中。",[1189,2174,2175],{},"列表的筛选、排序和页面大小在服务器允许的查询范围内使用。",[1189,2177,2178],{},"如果从外部站点调用，请同时确认管理员的允许 Origin 和 CSP 设置。",[1182,2180,2181],{"id":2181},"相关文档",[1186,2183,2184,2188,2193,2197,2202],{},[1189,2185,2186],{},[1196,2187,791],{"href":1198},[1189,2189,2190],{},[1196,2191,883],{"href":2192},"./examples/realtime-gomoku",[1189,2194,2195],{},[1196,2196,801],{"href":1981},[1189,2198,2199],{},[1196,2200,827],{"href":2201},"./performance",[1189,2203,2204],{},[1196,2205,837],{"href":2206},"./admin/overview",[2208,2209,2210],"style",{},"html pre.shiki code .sMOD_, html code.shiki .sMOD_{--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .s-m8C, html code.shiki .s-m8C{--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .sCZoN, html code.shiki .sCZoN{--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#CFCFC2}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}",{"title":2002,"searchDepth":2056,"depth":2073,"links":2212},[2213,2214,2219,2228,2229,2230,2231,2232,2233],{"id":1184,"depth":2056,"text":1184},{"id":1203,"depth":2056,"text":1204,"children":2215},[2216,2217,2218],{"id":1220,"depth":2073,"text":1221},{"id":1324,"depth":2073,"text":1325},{"id":1425,"depth":2073,"text":1426},{"id":1485,"depth":2056,"text":1486,"children":2220},[2221,2222,2223,2226,2227],{"id":1518,"depth":2073,"text":1518},{"id":1593,"depth":2073,"text":1594},{"id":1617,"depth":2073,"text":1618,"children":2224},[2225],{"id":1656,"depth":2085,"text":1657},{"id":1710,"depth":2073,"text":1710},{"id":1864,"depth":2073,"text":1864},{"id":1475,"depth":2056,"text":1475},{"id":1984,"depth":2056,"text":1985},{"id":2014,"depth":2056,"text":2014},{"id":2152,"depth":2056,"text":2152},{"id":2158,"depth":2056,"text":2158},{"id":2181,"depth":2056,"text":2181},"介绍如何将架构文件（.sfn）部署为实际的数据库和 API，并确认权限和功能。","md",{},true,{"title":2239,"description":2240,"ogType":2241,"twitterCard":2242,"keywords":2243},"构建 API 并部署数据库 | Webspace Docs","将架构文件连接到 SQLite3、PostgreSQL、MySQL 或 MariaDB，并部署为 WebSpace API。","article","summary_large_image",[796,2244,1651,2245,2246,1204,1475],"API","README","DB","QX_wJi95PIhFWs7vn6kVXv0-OlXEu1zLTwXzr0zNX8A",[2249,2250],{"title":791,"path":792,"stem":793,"slug":794,"children":-1},{"title":801,"path":802,"stem":803,"slug":804,"children":-1},{"title":796,"filename":2252,"content":2253},"api-overview","# 构建 API 并部署数据库\n\n创建好架构文件（.sfn）后，接下来就该把设计变成实际的服务了。打开 `API 构建`，每个表的创建、查询、修改、删除 API 都会准备就绪，还能在同一个界面中确认每个地址可以由谁使用。\n\n如有需要，还可以将自己编写的查询 API、静态文件 API 和实时事件连接到同一个服务。\n\n---\n\n## 开始之前\n\n- 所需权限：已被授予数据库使用权限的用户\n- 事先准备：需要先创建[架构文件（.sfn）](./20.create-database.md)。\n\n## 打开 API 构建\n\n选择架构界面上方的 `API 构建` 选项卡，即可查看按表自动生成的 API 列表。\n\n![API 构建](./_screenshots/schema-api-build_zh.png)\n\n### 自动生成的 API\n\n每个表默认会自动生成以下 5 个 API。如有需要，也可以手动添加新的 API。\n\n| 方法   | 端点           | 说明      |\n| ------ | -------------- | --------- |\n| GET    | .../list       | 查询列表  |\n| GET    | .../view/:id   | 查询单条  |\n| POST   | .../create     | 创建      |\n| PUT    | .../update/:id | 修改      |\n| DELETE | .../delete/:id | 删除      |\n\n在 `添加新 API（Custom Endpoint）` 中，可以添加自定义了所需查询和响应形式的 API。使用 `添加静态文件 API`，可以按文件格式提供工作空间中的 JSON、XML、HTML、图片和二进制文件。\n\n::note\n将文件夹指定为源时，可以以 JSON 形式获取文件列表并提供所选文件的内容。配置方法请参阅[用文件夹文件搭建资料公告板](./60.examples/30.folder-board.md)。\n::\n\n### 通过 API 提供静态文件或文件夹\n\n1. 选择 `添加静态文件 API`。\n2. 在 `存储空间` 中选择 `团队空间` 或 `个人空间`。\n3. 在 `公开对象` 中选择 `单个文件` 或 `文件夹列表 · 文件内容`，然后通过 `选择文件` 或 `选择文件夹` 指定源。\n4. 如果选择了文件夹，请设置 `允许的扩展名` 和 `包含子文件夹`。扩展名留空时，所有格式都将成为对象。\n5. 在 `响应方式` 中选择是在浏览器中显示内容（`在浏览器中直接显示`），还是以文件形式接收（`下载`）。\n6. 确认端点权限后部署架构。\n\n单个文件会在设置的端点上响应其内容。文件夹则会同时生成文件列表 JSON 和通过列表项的 `id` 读取内容的地址。重命名或移动文件时，基于路径生成的 `id` 也会改变，因此客户端应使用从列表中获取的最新 `id` 或 `viewUrl`。\n\n::warning\n在浏览器中直接显示 HTML 或 SVG 等可执行文件时，请只选择可信的文件作为源。服务器会应用安全标头，但同时也应限制 API 的访问权限。\n::\n\n在功能端点中，可以设置实时套接字、文件和图片上传、AI 回复等整个服务通用功能的权限。\n\n![静态文件夹 API 的存储空间和文件查看设置](./_screenshots/webspace-static-folder-api_en.png)\n\n### 导入实时事件与 REST 捆绑包\n\n在实时套接字的 `事件定义` 中，可以只编写事件，也可以导入包含事件所需的表和 REST 设置的 JSON 或 YAML 捆绑包。\n\n1. 选择 `粘贴 AI 回答` 并粘贴捆绑包。自行准备的捆绑包也可以按相同格式粘贴。\n2. 要保留现有事件，选择 `按名称合并`；要替换当前全部事件，选择 `全部替换`。\n3. 在 `应用预览` 中确认将要添加、更改、删除的事件，以及将要添加的表、列和 REST 数量。\n4. 确认与现有 REST 冲突或格式被自动整理、排除的项目。仅在需要更改现有 REST 时才选择 `覆盖冲突的 REST 设置`。\n5. 确认服务器检查结果并修正错误后，选择 `应用`。\n\n导入会更改当前正在编辑的架构。只有完成 `部署` 后才会反映到实际服务。即使在导入界面中已应用，部署时服务器仍会重新检查事件和 REST 规则，未通过时不会部署。\n\n![实时事件与 REST 捆绑包导入预览](./_screenshots/webspace-realtime-import-preview_en.png)\n\n## 用自定义端点创建 CRUD 之外的 API\n\n当自动生成的 5 个 API（`list`/`view`/`create`/`update`/`delete`）不够用时，点击 `添加新 API（Custom Endpoint）` 可以更加精细地定义行为。\n\n![通过添加新 API 创建的自定义端点的基本设置界面。指定 API 类型、操作种类、目标范围和路径](./_screenshots/webspace-customapi-basic_en.png)\n\n### 操作种类\n\n除基本的 5 个 CRUD 操作外，`操作种类` 下拉菜单中还有以下选项。\n\n| 操作种类 | 含义 |\n|---|---|\n| 执行操作 | 适用于不完全符合 CRUD、以命令方式处理的端点 |\n| 查询统计 | 返回计数、合计、聚合等统计性结果 |\n| 批量处理 | 一次处理多条记录 |\n| 导出 | 以文件形式下载查询结果 |\n\n`目标范围` 可从 `集合`（针对整个表或多条记录，通常是不带 `:id` 的路径）、`单个项目`（特定的一条记录）、`命令`（不符合 CRUD 的自定义命令式端点）中选择。\n\n### 权限与 REST API 相同，分为 3 级\n\n自定义端点的权限设置方式与自动生成的 API 相同。界面上有直接的说明，不会造成混淆。\n\n![自定义端点的权限选择面板。显示仅成员 / 成员 + 附加条件（等级、团队、管理员、本人）/ 所有人三种选项及其说明](./_screenshots/webspace-customapi-permission_en.png)\n\n选择 `成员 + 附加条件` 后，可以组合应用等级、所属团队、是否为管理员、本人（owner）等条件。例如，“仅限等级 2 以上”、“仅限销售团队成员”之类的条件，可以用与 REST API 自动生成端点完全相同的方式应用到自定义端点上。\n\n::note\n这些条件（等级/团队/管理员/本人）用于判断“谁可以调用此端点”。这里没有“每天最多 3 次”之类的次数限制条件——如有需要，必须在下面的 SQL 编辑器中自行实现。\n::\n\n### 直接编写 SQL\n\n`处理流程` 选项卡的 `基础查询` 中有一个编辑器，可直接编写此端点要执行的 SQL。在自动生成的 API 中，将 `基础查询` 切换为 `手写 SQL` 即可打开相同的编辑器。\n\n![处理流程选项卡中基础查询的 SQL 编辑器。默认填入了 SELECT * FROM leave_balances WHERE 1=1;](./_screenshots/webspace-customapi-sql_en.png)\n\nREST API 列表的 `处理` 列中也会显示此端点使用手写查询的标记（`SQL` 徽章）。自动生成的 API 无法表达的条件——例如“如果该成员今天已创建 3 行以上则拒绝”这类基于聚合的条件——只能通过此 SQL 编辑器实现。\n\n#### 检查 SQL 和参数\n\n输入 SQL 后，浏览器会检查语法以及当前架构中的表和列。如果错误或待确认项显示了行号和列号，选择该项即可跳转到编辑器中的相应位置。也可以从部署区域打开存在错误的 SQL。\n\n这项检查不会在实际数据库中执行查询。部署后，请调用 API，确认数据库特有函数、访问权限以及实际数据下的结果。\n\n参数列表显示 SQL 中使用的 `:name` 形式的参数。`:id`、`:user_id`、`:nick` 和 `:now` 是由服务器填充的保留值。其他值在读取请求中来自查询字符串，在写入请求中来自输入处理后的请求正文。缺少的值按 `NULL` 处理。\n\n::warning\n直接编写的写入 SQL 不会自动添加所有者条件或`条件`函数的筛选条件。如果只能修改当前用户的数据，请在 `WHERE` 中自行添加所有者列与 `:user_id` 的比较条件。查询单个条目时，`SELECT` 结果必须包含主键列；仅查询本人数据时，还需包含所有者列。\n::\n\n### 通过处理流程改变请求处理方式\n\n即使不直接编写 SQL，也可以在 `处理流程` 选项卡中按顺序添加预先准备好的函数，来改变请求的处理流程。函数分为输入处理、DB 处理、输出处理三个阶段。\n\n![可添加到处理流程的 11 个函数列表。分为输入处理（输入验证、填入会话值、默认值、移动键）、DB 处理（条件、页面大小、排序）、输出处理（隐藏字段、重命名键、添加聚合、Webhook）](./_screenshots/webspace-customapi-pipeline_en.png)\n\n| 分类 | 函数 | 说明 |\n|---|---|---|\n| 输入处理 | 输入验证 | 验证字段必填和格式，失败时返回 400 |\n| 输入处理 | 填入会话值 | 将登录会话值（user_id 等）自动设置到字段 |\n| 输入处理 | 默认值 | 为空字段填入默认值 |\n| 输入处理 | 移动键 | 将请求正文的键名移动为表的列名 |\n| DB 处理 | 条件 | 添加 WHERE 条件 |\n| DB 处理 | 页面大小 | 自动处理 limit/offset |\n| DB 处理 | 排序 | 设置 ORDER BY 依据 |\n| 输出处理 | 隐藏字段 | 从响应中移除特定列 |\n| 输出处理 | 重命名键 | 更改响应 JSON 的键 |\n| 输出处理 | 添加聚合 | 将 COUNT/SUM 等聚合值添加到响应 |\n| 输出处理 | Webhook | 向外部 URL 发送事件 |\n\n::warning\n`条件`函数通过列、运算符和一个固定值创建简单比较（如 `WHERE column = value`）。如果条件需要聚合，例如统计该成员今天创建的行数，请在上面的 SQL 编辑器中编写子查询。\n::\n\n### 权限设置\n\n可以为每个 API 单独设置访问权限。这里所说的成员就是工作空间的成员账户。无需另外构建登录和认证系统，工作空间中已有的成员、等级、团队体系会直接与 API 权限联动。\n\n| 权限               | 说明                                                                              |\n| ------------------ | --------------------------------------------------------------------------------- |\n| 仅成员             | 只要是已登录的成员，任何人都可以调用                                              |\n| 成员 + 附加条件    | 必须是成员，且满足等级、所属团队、是否为管理员等附加条件才能调用                  |\n| 所有人             | 无需登录即可调用，但不允许创建、修改、删除等写入请求                              |\n\n## 部署\n\n按以下步骤输入部署信息。\n\n1. `数据库标识符`：用英文输入部署服务器上要使用的 DB 的逻辑名称。\n2. `存储引擎模式`：从 SQLite3、PostgreSQL、MySQL 或 MariaDB 中选择。外部 DB 还需额外输入 host、port、DB 名称、用户和密码。MySQL 和 MariaDB 使用基于 InnoDB 的配置。\n3. 在 `基本设置` 和 `高级设置` 中确认以下项目。\n\n| 项目                 | 说明                                                                                  |\n| -------------------- | ------------------------------------------------------------------------------------- |\n| `客户端部署路径`     | 位于 `基本设置` 中。选择生成示例前端产物（index.html、test.html、README 等）的路径 |\n| `IP 限制`            | 位于 `高级设置` 中。以白名单方式指定允许访问 API 的 IP |\n\n在 API 列表下方的部署区域中选择 `部署`，设置项会展开。部署区域固定在编辑界面的最底部，即使滚动 API 列表也始终可见。仅第一次选择不会执行部署。确认设置后再次选择 `部署`，数据库和 API 就会准备就绪。如果指定了客户端部署路径，还会一并生成可用于测试 API 的示例界面。更改界面的方法请继续参阅[查看前端示例](./26.frontend-example.md)。\n\n## API 调用示例\n\n已部署的 API 按以下形式调用。（以表名 `user_profile` 为例）\n\n```\nGET  /api/web/{dbName}/user_profile/list\nGET  /api/web/{dbName}/user_profile/view/{id}\nPOST /api/web/{dbName}/user_profile/create\nPUT  /api/web/{dbName}/user_profile/update/{id}\nDELETE /api/web/{dbName}/user_profile/delete/{id}\n```\n\n创建（POST）请求示例：\n\n```\nPOST /api/web/{dbName}/user_profile/create\nContent-Type: application/json\n\n{\n  \"email\": \"user@example.com\",\n  \"is_active\": true\n}\n```\n\n## 读取错误响应\n\n如果请求失败，请同时确认 HTTP 状态和 `code` 或 `errorCode`。错误代码不会因语言而改变，因此登录请求、重试等操作应根据代码判断，而 `message` 用于在界面上显示。\n\nWebspace 的默认错误提示支持韩语、英语、日语、简体中文和德语。优先使用已登录成员的语言设置；如果没有设置或是不支持的语言，则参考请求的 `Accept-Language`。两者都不匹配时，以英语提示。在外部 API 集成中，请勿直接比较显示文字本身。\n\n例如，需要登录的请求会返回以下信息。\n\n```json\n{\n  \"code\": \"WEBSPACE_LOGIN_REQUIRED\",\n  \"errorCode\": \"WEBSPACE_LOGIN_REQUIRED\",\n  \"message\": \"需要登录。\"\n}\n```\n\n这些是错误响应中需要确认的核心字段。完整的响应格式可能因 REST API、静态文件、管理 API 而有所不同。\n\n- 输入值验证响应使用现有格式 `ok: false` 和 `errors` 列表。即使 HTTP 状态为 200 也请确认 `ok`，并通过各项的 `field`、`code`、`message` 提示问题。\n- WebSocket 错误在 `type: \"error\"` 消息的 `data` 中确认。现有的分类用 `key` 会保留，`code` 和 `errorCode` 用于区分错误原因。\n- 服务器的实际文件路径、SQL 和内部错误原文不会返回给用户。如果是需要运营者查看服务器日志的错误，请一并提供发生时间、请求路径、HTTP 状态和错误代码。\n\n## 部署与覆盖\n\n覆盖已有数据的架构的操作遵循服务器的部署策略。根据组织策略，可以禁止该操作，或限制为仅管理员或指定的部署管理人员可以执行。更改结构之前，请确认受影响的列和 API，以及备份与恢复流程。\n\n## 注意事项\n\n- API 基于 SetFN 登录会话进行认证。未认证的请求会被拒绝。（但权限设置为 `所有人` 的 API 除外。）\n- 更改架构结构时，API 端点也会随之更新，请确认现有集成代码的兼容性。\n- SQLite3 数据保存在该服务器的 WebSpace 存储中，外部引擎数据保存在管理员设置的 DB 中。\n- 列表的筛选、排序和页面大小在服务器允许的查询范围内使用。\n- 如果从外部站点调用，请同时确认管理员的允许 Origin 和 CSP 设置。\n\n## 相关文档\n\n- [创建架构文件（.sfn）](./20.create-database.md)\n- [制作实时五子棋游戏](./60.examples/20.realtime-gomoku.md)\n- [查看前端示例](./26.frontend-example.md)\n- [性能与扩展](./48.performance.md)\n- [开始使用 Webspace 管理](./50.admin/00.overview.md)\n",1793056635188]