Back to Siyuan

API.Zh CN

API.zh-CN.md

3.7.0-dev1555.8 KB
Original Source

English | 中文 | 日本語


规范

参数和返回值

  • 端点:http://127.0.0.1:6806

  • 均是 POST 方法

  • 需要带参的接口,参数为 JSON 字符串,放置到 body 里,标头 Content-Type 为 application/json

  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": {}
    }
    
    • code:非 0 为异常情况
    • msg:正常情况下是空字符串,异常情况下会返回错误文案
    • data:可能为 {}[] 或者 NULL,根据不同接口而不同

鉴权

<kbd>设置 - 关于</kbd> 里查看 API token,请求标头:Authorization: Token xxx

笔记本

列出笔记本

  • /api/notebook/lsNotebooks

  • 不带参

  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": {
        "notebooks": [
          {
            "id": "20210817205410-2kvfpfn", 
            "name": "测试笔记本",
            "icon": "1f41b",
            "sort": 0,
            "closed": false
          },
          {
            "id": "20210808180117-czj9bvb",
            "name": "思源笔记用户指南",
            "icon": "1f4d4",
            "sort": 1,
            "closed": false
          }
        ]
      }
    }
    

打开笔记本

  • /api/notebook/openNotebook

  • 参数

    json
    {
      "notebook": "20210831090520-7dvbdv0"
    }
    
    • notebook:笔记本 ID
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }
    

关闭笔记本

  • /api/notebook/closeNotebook

  • 参数

    json
    {
      "notebook": "20210831090520-7dvbdv0"
    }
    
    • notebook:笔记本 ID
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }
    

重命名笔记本

  • /api/notebook/renameNotebook

  • 参数

    json
    {
      "notebook": "20210831090520-7dvbdv0",
      "name": "笔记本的新名称"
    }
    
    • notebook:笔记本 ID
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }
    

创建笔记本

  • /api/notebook/createNotebook

  • 参数

    json
    {
      "name": "笔记本的名称"
    }
    
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": {
        "notebook": {
          "id": "20220126215949-r1wvoch",
          "name": "笔记本的名称",
          "icon": "",
          "sort": 0,
          "closed": false
        }
      }
    }
    

删除笔记本

  • /api/notebook/removeNotebook

  • 参数

    json
    {
      "notebook": "20210831090520-7dvbdv0"
    }
    
    • notebook:笔记本 ID
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }
    

获取笔记本配置

  • /api/notebook/getNotebookConf

  • 参数

    json
    {
      "notebook": "20210817205410-2kvfpfn"
    }
    
    • notebook:笔记本 ID
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": {
        "box": "20210817205410-2kvfpfn",
        "conf": {
          "name": "测试笔记本",
          "closed": false,
          "refCreateSavePath": "",
          "createDocNameTemplate": "",
          "dailyNoteSavePath": "/daily note/{{now | date \"2006/01\"}}/{{now | date \"2006-01-02\"}}",
          "dailyNoteTemplatePath": ""
        },
        "name": "测试笔记本"
      }
    }
    

保存笔记本配置

  • /api/notebook/setNotebookConf

  • 参数

    json
    {
      "notebook": "20210817205410-2kvfpfn",
      "conf": {
          "name": "测试笔记本",
          "closed": false,
          "refCreateSavePath": "",
          "createDocNameTemplate": "",
          "dailyNoteSavePath": "/daily note/{{now | date \"2006/01\"}}/{{now | date \"2006-01-02\"}}",
          "dailyNoteTemplatePath": ""
        }
    }
    
    • notebook:笔记本 ID
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": {
        "name": "测试笔记本",
        "closed": false,
        "refCreateSavePath": "",
        "createDocNameTemplate": "",
        "dailyNoteSavePath": "/daily note/{{now | date \"2006/01\"}}/{{now | date \"2006-01-02\"}}",
        "dailyNoteTemplatePath": ""
      }
    }
    

文档

通过 Markdown 创建文档

  • /api/filetree/createDocWithMd

  • 参数

    json
    {
      "notebook": "20210817205410-2kvfpfn",
      "path": "/foo/bar",
      "markdown": ""
    }
    
    • notebook:笔记本 ID
    • path:文档路径,需要以 / 开头,中间使用 / 分隔层级(这里的 path 对应数据库 hpath 字段)
    • markdown:GFM Markdown 内容
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": "20210914223645-oj2vnx2"
    }
    
    • data:创建好的文档 ID
    • 如果使用同一个 path 重复调用该接口,不会覆盖已有文档

重命名文档

  • /api/filetree/renameDoc

  • 参数

    json
    {
      "notebook": "20210831090520-7dvbdv0",
      "path": "/20210902210113-0avi12f.sy",
      "title": "文档新标题"
    }
    
    • notebook:笔记本 ID
    • path:文档路径
    • title:新标题
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }
    

通过 id 重命名文档:

  • /api/filetree/renameDocByID

  • 参数

    json
    {
      "id": "20210902210113-0avi12f",
      "title": "文档新标题"
    }
    
    • id:文档 ID
    • title:新标题
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }
    

删除文档

  • /api/filetree/removeDoc

  • 参数

    json
    {
      "notebook": "20210831090520-7dvbdv0",
      "path": "/20210902210113-0avi12f.sy"
    }
    
    • notebook:笔记本 ID
    • path:文档路径
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }
    

通过 id 删除文档:

  • /api/filetree/removeDocByID

  • 参数

    json
    {
      "id": "20210902210113-0avi12f"
    }
    
    • id:文档 ID
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }
    

移动文档

  • /api/filetree/moveDocs

  • 参数

    json
    {
      "fromPaths": ["/20210917220056-yxtyl7i.sy"],
      "toNotebook": "20210817205410-2kvfpfn",
      "toPath": "/"
    }
    
    • fromPaths:源路径
    • toNotebook:目标笔记本 ID
    • toPath:目标路径
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }
    

通过 id 移动文档:

  • /api/filetree/moveDocsByID

  • 参数

    json
    {
      "fromIDs": ["20210917220056-yxtyl7i"],
      "toID": "20210817205410-2kvfpfn"
    }
    
    • fromIDs:源文档 ID
    • toID:目标父文档 ID 或笔记本 ID
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }
    

根据路径获取人类可读路径

  • /api/filetree/getHPathByPath

  • 参数

    json
    {
      "notebook": "20210831090520-7dvbdv0",
      "path": "/20210917220500-sz588nq/20210917220056-yxtyl7i.sy"
    }
    
    • notebook:笔记本 ID
    • path:路径
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": "/foo/bar"
    }
    

根据 ID 获取人类可读路径

  • /api/filetree/getHPathByID

  • 参数

    json
    {
      "id": "20210917220056-yxtyl7i"
    }
    
    • id:块 ID
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": "/foo/bar"
    }
    

根据 ID 获取存储路径

  • /api/filetree/getPathByID

  • 参数

    json
    {
      "id": "20210808180320-fqgskfj"
    }
    
    • id:块 ID
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": {
      "notebook": "20210808180117-czj9bvb",
      "path": "/20200812220555-lj3enxa/20210808180320-fqgskfj.sy"
      }
    }
    

根据人类可读路径获取 IDs

  • /api/filetree/getIDsByHPath

  • 参数

    json
    {
      "path": "/foo/bar",
      "notebook": "20210808180117-czj9bvb"
    }
    
    • path:人类可读路径
    • notebook:笔记本 ID
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": [
          "20200813004931-q4cu8na"
      ]
    }
    

资源文件

上传资源文件

  • /api/asset/upload

  • 参数为 HTTP Multipart 表单

    • assetsDirPath:资源文件存放的文件夹路径,以 data 文件夹作为根路径,比如:

      • "/assets/":工作空间/data/assets/ 文件夹
      • "/assets/sub/":工作空间/data/assets/sub/ 文件夹

      常规情况下建议用第一种,统一存放到工作空间资源文件夹下,放在子目录有一些副作用,请参考用户指南资源文件章节。

    • file[]:上传的文件列表

  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": {
        "errFiles": [""],
        "succMap": {
          "foo.png": "assets/foo-20210719092549-9j5y79r.png"
        }
      }
    }
    
    • errFiles:处理时遇到错误的文件名
    • succMap:处理成功的文件,key 为上传时的文件名,value 为 assets/foo-id.png,用于将已有 Markdown 内容中的资源文件链接地址替换为上传后的地址

插入块

  • /api/block/insertBlock

  • 参数

    json
    {
      "dataType": "markdown",
      "data": "foo**bar**{: style=\"color: var(--b3-font-color8);\"}baz",
      "nextID": "",
      "previousID": "20211229114650-vrek5x6",
      "parentID": ""
    }
    
    • dataType:待插入数据类型,值可选择 markdown 或者 dom
    • data:待插入的数据
    • nextID:后一个块的 ID,用于锚定插入位置
    • previousID:前一个块的 ID,用于锚定插入位置
    • parentID:父块 ID,用于锚定插入位置

    nextIDpreviousIDparentID 三个参数必须至少存在一个有值,优先级为 nextID > previousID > parentID

  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": [
        {
          "doOperations": [
            {
              "action": "insert",
              "data": "<div data-node-id=\"20211230115020-g02dfx0\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\"><div contenteditable=\"true\" spellcheck=\"false\">foo<strong style=\"color: var(--b3-font-color8);\">bar</strong>baz</div><div class=\"protyle-attr\" contenteditable=\"false\"></div></div>",
              "id": "20211230115020-g02dfx0",
              "parentID": "",
              "previousID": "20211229114650-vrek5x6",
              "retData": null
            }
          ],
          "undoOperations": null
        }
      ]
    }
    
    • action.data:新插入块生成的 DOM
    • action.id:新插入块的 ID

插入前置子块

  • /api/block/prependBlock

  • 参数

    json
    {
      "data": "foo**bar**{: style=\"color: var(--b3-font-color8);\"}baz",
      "dataType": "markdown",
      "parentID": "20220107173950-7f9m1nb"
    }
    
    • dataType:待插入数据类型,值可选择 markdown 或者 dom
    • data:待插入的数据
    • parentID:父块的 ID,用于锚定插入位置
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": [
        {
          "doOperations": [
            {
              "action": "insert",
              "data": "<div data-node-id=\"20220108003710-hm0x9sc\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\"><div contenteditable=\"true\" spellcheck=\"false\">foo<strong style=\"color: var(--b3-font-color8);\">bar</strong>baz</div><div class=\"protyle-attr\" contenteditable=\"false\"></div></div>",
              "id": "20220108003710-hm0x9sc",
              "parentID": "20220107173950-7f9m1nb",
              "previousID": "",
              "retData": null
            }
          ],
          "undoOperations": null
        }
      ]
    }
    
    • action.data:新插入块生成的 DOM
    • action.id:新插入块的 ID

插入后置子块

  • /api/block/appendBlock

  • 参数

    json
    {
      "data": "foo**bar**{: style=\"color: var(--b3-font-color8);\"}baz",
      "dataType": "markdown",
      "parentID": "20220107173950-7f9m1nb"
    }
    
    • dataType:待插入数据类型,值可选择 markdown 或者 dom
    • data:待插入的数据
    • parentID:父块的 ID,用于锚定插入位置
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": [
        {
          "doOperations": [
            {
              "action": "insert",
              "data": "<div data-node-id=\"20220108003642-y2wmpcv\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\"><div contenteditable=\"true\" spellcheck=\"false\">foo<strong style=\"color: var(--b3-font-color8);\">bar</strong>baz</div><div class=\"protyle-attr\" contenteditable=\"false\"></div></div>",
              "id": "20220108003642-y2wmpcv",
              "parentID": "20220107173950-7f9m1nb",
              "previousID": "20220108003615-7rk41t1",
              "retData": null
            }
          ],
          "undoOperations": null
        }
      ]
    }
    
    • action.data:新插入块生成的 DOM
    • action.id:新插入块的 ID

更新块

  • /api/block/updateBlock

  • 参数

    json
    {
      "dataType": "markdown",
      "data": "foobarbaz",
      "id": "20211230161520-querkps"
    }
    
    • dataType:待更新数据类型,值可选择 markdown 或者 dom
    • data:待更新的数据
    • id:待更新块的 ID
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": [
        {
          "doOperations": [
            {
              "action": "update",
              "data": "<div data-node-id=\"20211230161520-querkps\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\"><div contenteditable=\"true\" spellcheck=\"false\">foo<strong>bar</strong>baz</div><div class=\"protyle-attr\" contenteditable=\"false\"></div></div>",
              "id": "20211230161520-querkps",
              "parentID": "",
              "previousID": "",
              "retData": null
              }
            ],
          "undoOperations": null
        }
      ]
    }
    
    • action.data:更新块生成的 DOM

删除块

  • /api/block/deleteBlock

  • 参数

    json
    {
      "id": "20211230161520-querkps"
    }
    
    • id:待删除块的 ID
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": [
        {
          "doOperations": [
            {
              "action": "delete",
              "data": null,
              "id": "20211230162439-vtm09qo",
              "parentID": "",
              "previousID": "",
              "retData": null
            }
          ],
         "undoOperations": null
        }
      ]
    }
    

移动块

  • /api/block/moveBlock

  • 参数

    json
    {
      "id": "20230406180530-3o1rqkc",
      "previousID": "20230406152734-if5kyx6",
      "parentID": "20230404183855-woe52ko"
    }
    
    • id:待移动块 ID
    • previousID:前一个块的 ID,用于锚定插入位置
    • parentID:父块的 ID,用于锚定插入位置,previousIDparentID 不能同时为空,同时存在的话优先使用 previousID
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": [
          {
              "doOperations": [
                  {
                      "action": "move",
                      "data": null,
                      "id": "20230406180530-3o1rqkc",
                      "parentID": "20230404183855-woe52ko",
                      "previousID": "20230406152734-if5kyx6",
                      "nextID": "",
                      "retData": null,
                      "srcIDs": null,
                      "name": "",
                      "type": ""
                  }
              ],
              "undoOperations": null
          }
      ]
    }
    

折叠块

  • /api/block/foldBlock

  • 参数

    json
    {
      "id": "20231224160424-2f5680o"
    }
    
    • id:待折叠块的 ID
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }
    

展开块

  • /api/block/unfoldBlock

  • 参数

    json
    {
      "id": "20231224160424-2f5680o"
    }
    
    • id:待展开块的 ID
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }
    

获取块 kramdown 源码

  • /api/block/getBlockKramdown

  • 参数

    json
    {
      "id": "20201225220955-l154bn4"
    }
    
    • id:待获取块的 ID
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": {
        "id": "20201225220955-l154bn4",
        "kramdown": "* {: id=\"20201225220955-2nn1mns\"}新建笔记本,在笔记本下新建文档\n  {: id=\"20210131155408-3t627wc\"}\n* {: id=\"20201225220955-uwhqnug\"}在编辑器中输入 <kbd>/</kbd> 触发功能菜单\n  {: id=\"20210131155408-btnfw88\"}\n* {: id=\"20201225220955-04ymi2j\"}((20200813131152-0wk5akh \"在内容块中遨游\"))、((20200822191536-rm6hwid \"窗口和页签\"))\n  {: id=\"20210131155408-hh1z442\"}"
      }
    }
    

获取子块

  • /api/block/getChildBlocks

  • 参数

    json
    {
      "id": "20230506212712-vt9ajwj"
    }
    
    • id:父块 ID
    • 标题下方块也算作子块
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": [
        {
          "id": "20230512083858-mjdwkbn",
          "type": "h",
          "subType": "h1"
        },
        {
          "id": "20230513213727-thswvfd",
          "type": "s"
        },
        {
          "id": "20230513213633-9lsj4ew",
          "type": "l",
          "subType": "u"
        }
      ]
    }
    

转移块引用

  • /api/block/transferBlockRef

  • 参数

    json
    {
      "fromID": "20230612160235-mv6rrh1",
      "toID": "20230613093045-uwcomng",
      "refIDs": ["20230613092230-cpyimmd"]
    }
    
    • fromID:定义块 ID
    • toID:目标块 ID
    • refIDs:指向定义块 ID 的引用所在块 ID,可选,如果不指定,所有指向定义块 ID 的块引用 ID 都会被转移
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }
    

属性

设置块属性

  • /api/attr/setBlockAttrs

  • 参数

    json
    {
      "id": "20210912214605-uhi5gco",
      "attrs": {
        "custom-attr1": "line1\nline2"
      }
    }
    
    • id:块 ID
    • attrs:块属性,自定义属性必须以 custom- 作为前缀
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }
    

获取块属性

  • /api/attr/getBlockAttrs

  • 参数

    json
    {
      "id": "20210912214605-uhi5gco"
    }
    
    • id:块 ID
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": {
        "custom-attr1": "line1\nline2",
        "id": "20210912214605-uhi5gco",
        "title": "PDF 标注双链演示",
        "type": "doc",
        "updated": "20210916120715"
      }
    }
    

SQL

执行 SQL 查询

  • /api/query/sql

  • 参数

    json
    {
      "stmt": "SELECT * FROM blocks WHERE content LIKE'%content%' LIMIT 7"
    }
    
    • stmt:SQL 脚本
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": [
        { "列": "值" }
      ]
    }
    

注意:为保证数据安全,发布模式下禁止访问该接口。

提交事务

  • /api/sqlite/flushTransaction

  • 不带参

  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }
    

模板

渲染模板

  • /api/template/render

  • 参数

    json
    {
      "id": "20220724223548-j6g0o87",
      "path": "F:\\SiYuan\\data\\templates\\foo.md"
    }
    
    • id:调用渲染所在的文档 ID
    • path:模板文件绝对路径
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": {
        "content": "<div data-node-id=\"20220729234848-dlgsah7\" data-node-index=\"1\" data-type=\"NodeParagraph\" class=\"p\" updated=\"20220729234840\"><div contenteditable=\"true\" spellcheck=\"false\">foo</div><div class=\"protyle-attr\" contenteditable=\"false\">​</div></div>",
        "path": "F:\\SiYuan\\data\\templates\\foo.md"
      }
    }
    

渲染 Sprig

  • /api/template/renderSprig

  • 参数

    json
    {
      "template": "/daily note/{{now | date \"2006/01\"}}/{{now | date \"2006-01-02\"}}"
    }
    
    • template:模板内容
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": "/daily note/2023/03/2023-03-24"
    }
    

文件

获取文件

  • /api/file/getFile

  • 参数

    json
    {
      "path": "/data/20210808180117-6v0mkxr/20200923234011-ieuun1p.sy"
    }
    
    • path:工作空间路径下的文件路径
  • 返回值

    • 响应状态码 200: 文件内容

    • 响应状态码 202: 异常信息

      json
      {
        "code": 404,
        "msg": "",
        "data": null
      }
      
      • code: 非零的异常值

        • -1: 参数解析错误
        • 403: 无访问权限 (文件不在工作空间下)
        • 404: 未找到 (文件不存在)
        • 405: 方法不被允许 (这是一个目录)
        • 500: 服务器错误 (文件查询失败 / 文件读取失败)
      • msg: 一段描述错误的文本

写入文件

  • /api/file/putFile

  • 参数为 HTTP Multipart 表单

    • path:工作空间路径下的文件路径
    • isDir:是否为创建文件夹,为 true 时仅创建文件夹,忽略 file
    • modTime:最近访问和修改时间,Unix time
    • file:上传的文件
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }
    

删除文件

  • /api/file/removeFile

  • 参数

    json
    {
      "path": "/data/20210808180117-6v0mkxr/20200923234011-ieuun1p.sy"
    }
    
    • path:工作空间路径下的文件路径
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }
    

重命名文件

  • /api/file/renameFile

  • 参数

    json
    {
      "path": "/data/assets/image-20230523085812-k3o9t32.png",
      "newPath": "/data/assets/test-20230523085812-k3o9t32.png"
    }
    
    • path:工作空间路径下的文件路径
    • newPath:新的文件路径
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }
    

列出文件

  • /api/file/readDir

  • 参数

    json
    {
      "path": "/data/20210808180117-6v0mkxr/20200923234011-ieuun1p"
    }
    
    • path:工作空间路径下的文件夹路径
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": [
        {
          "isDir": true,
          "isSymlink": false,
          "name": "20210808180303-6yi0dv5",
          "updated": 1691467624
        },
        {
          "isDir": false,
          "isSymlink": false,
          "name": "20210808180303-6yi0dv5.sy",
          "updated": 1663298365
        }
      ]
    }
    

导出

导出 Markdown 文本

  • /api/export/exportMdContent

  • 参数

    json
    {
      "id": ""
    }
    
    • id:要导出的文档块 ID
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": {
        "hPath": "/0 请从这里开始",
        "content": "## 🍫 内容块\n\n在思源中,唯一重要的核心概念是..."
      }
    }
    
    • hPath:人类可读的路径
    • content:Markdown 内容

导出文件与目录

  • /api/export/exportResources

  • 参数

    json
    {
      "paths": [
        "/conf/appearance/boot",
        "/conf/appearance/langs",
        "/conf/appearance/emojis/conf.json",
        "/conf/appearance/icons/index.html"
      ],
      "name": "zip-file-name"
    }
    
    • paths:要导出的文件或文件夹路径列表,相同名称的文件/文件夹会被覆盖
    • name:(可选)导出的文件名,未设置时默认为 export-YYYY-MM-DD_hh-mm-ss.zip
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": {
        "path": "temp/export/zip-file-name.zip"
      }
    }
    
    • path:创建的 *.zip 文件路径
      • zip-file-name.zip 中的目录结构如下所示:
        • zip-file-name
          • boot
          • langs
          • conf.json
          • index.html

转换

Pandoc

  • /api/convert/pandoc

  • 工作目录

    • 执行调用 pandoc 命令时工作目录会被设置在 工作空间/temp/convert/pandoc/${test}
    • 可先通过 API 写入文件 将待转换文件写入该目录
    • 然后再调用该 API 进行转换,转换后的文件也会被写入该目录
    • 最后调用 API 获取文件 获取转换后的文件内容
  • 参数

    json
    {
      "dir": "test",
      "args": [
        "--to", "markdown_strict-raw_html",
        "foo.epub",
        "-o", "foo.md"
     ]
    }
    
    • args:Pandoc 命令行参数
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": {
         "path": "/temp/convert/pandoc/test"
      }
    }
    
    • path:工作空间下的路径

通知

推送消息

  • /api/notification/pushMsg

  • 参数

    json
    {
      "msg": "test",
      "timeout": 7000
    }
    
    • timeout:消息持续显示时间,单位为毫秒。可以不传入该字段,默认为 7000 毫秒
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": {
          "id": "62jtmqi"
      }
    }
    
    • id:消息 ID

推送报错消息

  • /api/notification/pushErrMsg

  • 参数

    json
    {
      "msg": "test",
      "timeout": 7000
    }
    
    • timeout:消息持续显示时间,单位为毫秒。可以不传入该字段,默认为 7000 毫秒
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": {
          "id": "qc9znut"
      }
    }
    
    • id:消息 ID

网络

正向代理

  • /api/network/forwardProxy

  • 参数

    json
    {
      "url": "https://b3log.org/siyuan/",
      "method": "GET",
      "timeout": 7000,
      "contentType": "text/html",
      "headers": [
          {
              "Cookie": ""
          }
      ],
      "payload": {},
      "payloadEncoding": "text",
      "responseEncoding": "text"
    }
    
    • url:转发的 URL

    • method:HTTP 方法,默认为 GET

    • timeout:超时时间,单位为毫秒,默认为 7000 毫秒

    • contentType:HTTP Content-Type,默认为 application/json

    • headers:HTTP 请求标头

    • payload:HTTP 请求体,对象或者是字符串

    • payloadEncodingpyaload 所使用的编码方案,默认为 text,可选值如下所示

      • text
      • base64 | base64-std
      • base64-url
      • base32 | base32-std
      • base32-hex
      • hex
    • responseEncoding:响应数据中 body 字段所使用的编码方案,默认为 text,可选值如下所示

      • text
      • base64 | base64-std
      • base64-url
      • base32 | base32-std
      • base32-hex
      • hex
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": {
        "body": "",
        "bodyEncoding": "text",
        "contentType": "text/html",
        "elapsed": 1976,
        "headers": {
        },
        "status": 200,
        "url": "https://b3log.org/siyuan"
      }
    }
    
    • bodyEncodingbody 所使用的编码方案,与请求中 responseEncoding 字段一致,默认为 text,可能的值如下所示

      • text
      • base64 | base64-std
      • base64-url
      • base32 | base32-std
      • base32-hex
      • hex

系统

获取启动进度

  • /api/system/bootProgress

  • 不带参

  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": {
        "details": "Finishing boot...",
        "progress": 100
      }
    }
    

获取系统版本

  • /api/system/version

  • 不带参

  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": "1.3.5"
    }
    

获取系统当前时间

  • /api/system/currentTime

  • 不带参

  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": 1631850968131
    }
    
    • data: 精度为毫秒

数据库

数据库(内核中为“属性视图”)以字段(列)和条目(行)的形式存储结构化数据。每个数据库由 avID 标识,可通过一个或多个数据库块(blockID)嵌入到文档中。一个数据库可包含多个不同布局类型的视图(viewID):table(表格)、gallery(卡片)和 kanban(看板)。

字段类型(keyType)如下:

取值说明
block主键(绑定的块)
text文本
number数字
date日期
select单选
mSelect多选
urlURL
email邮箱
phone电话
mAsset资源
template模板
created创建时间
updated更新时间
checkbox复选框
relation关联
rollup汇总
lineNumber行号

渲染

  • /api/av/renderAttributeView

  • 参数

    json
    {
      "id": "20240118120204-kwyzf77",
      "blockID": "20240118120201-kldj15t",
      "viewID": "",
      "page": 1,
      "pageSize": 50,
      "query": "",
      "groupPaging": {},
      "createIfNotExist": true
    }
    
    • id: 数据库 ID
    • blockID: 嵌入该数据库的数据库块,用于解析当前视图和发布权限。渲染独立数据库时可省略
    • viewID: 要渲染的视图。省略时使用当前视图(viewID 字段)
    • page: 页码,从 1 开始。默认为 1
    • pageSize: 每页条目数。-1 或省略表示使用视图默认值(50
    • query: 可选的主键值全文过滤关键字
    • groupPaging: 分组(看板)视图的可选分页配置
    • createIfNotExist: 为 true(默认)时,若数据库不存在视图则创建默认视图
  • 返回值(真实响应,表格布局,展示一行):

    json
    {
      "code": 0,
      "msg": "",
      "data": {
        "name": "API 测试",
        "id": "20240118120204-kwyzf77",
        "viewType": "table",
        "viewID": "20240118120204-7rnmyc1",
        "isMirror": false,
        "views": [
          {
            "id": "20240118120204-7rnmyc1",
            "icon": "",
            "name": "表格",
            "desc": "",
            "hideAttrViewName": false,
            "type": "table",
            "pageSize": 50
          }
        ],
        "view": {
          "id": "20240118120204-7rnmyc1",
          "icon": "",
          "name": "表格",
          "desc": "",
          "hideAttrViewName": false,
          "filters": [],
          "sorts": [],
          "group": null,
          "pageSize": 50,
          "showIcon": true,
          "wrapField": false,
          "groupFolded": false,
          "groupHidden": 0,
          "columns": [
            {
              "id": "20240118120204-w6cggab",
              "name": "主键",
              "type": "block",
              "icon": "",
              "wrap": false,
              "hidden": false,
              "desc": "",
              "calc": null,
              "numberFormat": "",
              "template": "",
              "pin": false,
              "width": ""
            }
          ],
          "rows": [
            {
              "id": "20240118203831-fkfvvtx",
              "cells": [
                {
                  "id": "20240118203911-xrg9obl",
                  "value": {
                    "id": "20240118203911-xrg9obl",
                    "keyID": "20240118120204-w6cggab",
                    "blockID": "20240118203831-fkfvvtx",
                    "type": "block",
                    "createdAt": 1706843791000,
                    "updatedAt": 1706843791000,
                    "block": {
                      "id": "20240118203831-fkfvvtx",
                      "content": "3",
                      "created": 1706843791000,
                      "updated": 1706843791000
                    }
                  },
                  "valueType": "block",
                  "color": "",
                  "bgColor": ""
                }
              ]
            }
          ],
          "rowCount": 5
        }
      }
    }
    
    • data.view: 渲染后的视图实例。结构随 viewType 而变——table 返回 columns/rows/rowCountgallery 返回 columns/rowskanban 返回 columns/groups(每个分组本身也是视图实例,含 groupKey/groupValue)。view 还包含 filters/sorts/group/showIcon/wrapField/groupFolded/groupHidden。注意:启用的过滤/分组可能使 rows 为空,即使 rowCount > 0
    • data.view.columns[]: 每列含 id/name/type/icon/wrap/hidden/desc/calc/numberFormat/template/pin/widthselect/mSelect 列还额外包含 options
    • data.view.rows[].id: 行 ID(一个条目 ID)。对于绑定行,它等于绑定的块 ID;对于独立行,它是生成的条目 ID,与任何块都不同
    • data.view.rows[].cells[].value: 一个 Value 对象——所有 value 形态见 设置单元格值createdAt/updatedAt 为 int64 毫秒时间戳
    • data.views: 所有视图的元数据(不含行数据)
    • data.isMirror: 当数据库块为数据库的镜像(只读副本)时为 true

获取

  • /api/av/getAttributeView

  • 参数

    json
    {
      "id": "20240118120204-kwyzf77"
    }
    
    • id: 数据库 ID
  • 返回值(真实响应,已裁剪——keyValues/views 数组做了截断):

    json
    {
      "code": 0,
      "msg": "",
      "data": {
        "av": {
          "spec": 4,
          "id": "20240118120204-kwyzf77",
          "name": "API 测试",
          "keyValues": [
            {
              "key": {
                "id": "20240118120204-w6cggab",
                "name": "主键",
                "type": "block",
                "icon": "",
                "desc": "",
                "numberFormat": "",
                "template": ""
              },
              "values": [
                {
                  "id": "20240118203911-xrg9obl",
                  "keyID": "20240118120204-w6cggab",
                  "blockID": "20240118203831-fkfvvtx",
                  "type": "block",
                  "createdAt": 1706843791000,
                  "updatedAt": 1706843791000,
                  "block": {
                    "id": "20240118203831-fkfvvtx",
                    "content": "3",
                    "created": 1706843791000,
                    "updated": 1706843791000
                  }
                }
              ]
            }
          ],
          "keyIDs": null,
          "viewID": "20240118120204-7rnmyc1",
          "views": [
            {
              "id": "20240118120204-7rnmyc1",
              "icon": "",
              "name": "表格",
              "hideAttrViewName": false,
              "desc": "",
              "pageSize": 50,
              "type": "table",
              "table": {
                "spec": 0,
                "id": "20240118120204-grokgmm",
                "showIcon": true,
                "wrapField": false,
                "columns": [
                  {
                    "id": "20240118120204-w6cggab",
                    "wrap": false,
                    "hidden": false,
                    "pin": false,
                    "width": ""
                  }
                ],
                "rowIds": null
              },
              "itemIds": ["20240118203818-ct041hj", "20240118203855-sqzbja0", "20240118203831-fkfvvtx", "20240118203842-kc31ovy", "20240531235026-uiap07y"],
              "groupCreated": 0,
              "groupItemIds": null,
              "groupFolded": false,
              "groupHidden": 0,
              "groupSort": 0
            }
          ]
        }
      }
    }
    
    • data.av: 完整的 AttributeView 定义——字段(keyValues)、字段顺序(keyIDs,可能为 null)、当前视图(viewID)、以及所有视图的原始布局配置(table/gallery/kanban)和条目顺序(itemIds)。返回原始定义(不含渲染后的行或分页);需要计算后的行数据请使用 渲染

获取主键值

  • /api/av/getAttributeViewPrimaryKeyValues

  • 参数

    json
    {
      "id": "20240118120204-kwyzf77",
      "keyword": "",
      "page": 1,
      "pageSize": 16
    }
    
    • id: 数据库 ID
    • keyword: 可选的主键文本子串过滤(不区分大小写)
    • page: 页码,从 1 开始。默认为 1
    • pageSize: 每页条目数。-1 或省略表示 16。结果按 block.updated 倒序排序
  • 返回值(真实响应,展示一个值):

    json
    {
      "code": 0,
      "msg": "",
      "data": {
        "name": "API 测试",
        "blockIDs": ["20240118120201-kldj15t"],
        "rows": {
          "key": {
            "id": "20240118120204-w6cggab",
            "name": "主键",
            "type": "block",
            "icon": "",
            "desc": "",
            "numberFormat": "",
            "template": ""
          },
          "values": [
            {
              "id": "20240118203911-xrg9obl",
              "keyID": "20240118120204-w6cggab",
              "blockID": "20240118203831-fkfvvtx",
              "type": "block",
              "createdAt": 1706843791000,
              "updatedAt": 1706843791000,
              "block": {
                "id": "20240118203831-fkfvvtx",
                "content": "3",
                "created": 1706843791000,
                "updated": 1706843791000
              }
            }
          ]
        }
      }
    }
    
    • data.rows: 一个 KeyValues 对象,包含主键(block)字段及其分页后的值
    • data.blockIDs: 引用该数据库的所有数据库块(镜像)ID

搜索

  • /api/av/searchAttributeView

  • 参数

    json
    {
      "keyword": "API",
      "excludes": []
    }
    
    • keyword: 搜索关键字(匹配数据库名称)
    • excludes: 可选,需从结果中排除的数据库 ID 列表
  • 返回值(真实响应):

    json
    {
      "code": 0,
      "msg": "",
      "data": {
        "results": [
          {
            "avID": "20240118120204-kwyzf77",
            "avName": "API 测试",
            "viewName": "",
            "viewID": "",
            "viewLayout": "",
            "blockID": "20240118120201-kldj15t",
            "hPath": "正在跟进的问题/数据库/API",
            "children": [
              {
                "avID": "20240118120204-kwyzf77",
                "avName": "API 测试",
                "viewName": "表格",
                "viewID": "20240118120204-7rnmyc1",
                "viewLayout": "table",
                "blockID": "20240118120201-kldj15t",
                "hPath": "正在跟进的问题/数据库/API"
              }
            ]
          }
        ]
      }
    }
    
    • data.results[]: 每个顶层结果按 avID 聚合一个数据库;其 children[] 列出该数据库的各个视图(viewName/viewID/viewLayout

设置单元格值

更新单个单元格(某一行的某个字段)。这是单元格值的主要写入接口。请求中的 value 是一个部分 Value 对象,其结构取决于字段的 keyType。常见 value 结构如下:

keyTypevalue 结构
block{"block": {"content": "第一行", "id": "<绑定块ID>"}, "isDetached": false}
text{"text": {"content": "文本"}}
number{"number": {"content": 42, "isNotEmpty": true}}(清空用 {"isNotEmpty": false}
date{"date": {"content": 1676042451000, "isNotEmpty": true}}(毫秒时间戳)
select{"mSelect": [{"content": "已完成", "color": "1"}]}(至多一个选项)
mSelect{"mSelect": [{"content": "A", "color": "1"}, {"content": "B", "color": "2"}]}
url{"url": {"content": "https://siyuan.com"}}
email{"email": {"content": "[email protected]"}}
phone{"phone": {"content": "1234567890"}}
checkbox{"checkbox": {"checked": true}}

⚠️ itemID行 ID渲染 返回的 rows[].id)。对于绑定行,行 ID 等于绑定的块 ID;对于独立行,它是生成的条目 ID。传入错误的 ID 会把值存为孤儿数据,不会出现在渲染后的单元格中。

  • /api/av/setAttributeViewBlockAttr

  • 参数

    json
    {
      "avID": "20240118120204-kwyzf77",
      "keyID": "20240531232156-ahsyx8l",
      "itemID": "20240118203831-fkfvvtx",
      "value": {
        "type": "number",
        "number": {
          "content": 42,
          "isNotEmpty": true
        }
      }
    }
    
    • avID: 数据库 ID
    • keyID: 字段 ID(被更新的列)
    • itemID: 行 ID渲染 返回的 rows[].id)。旧参数 rowID 已弃用,将于 2026-12-01 后删除,请改用 itemID
    • value: 部分 Value 对象(见上表)。未知或不支持的键会被忽略
  • 返回值(真实响应,数字值):

    json
    {
      "code": 0,
      "msg": "",
      "data": {
        "value": {
          "id": "20240531235048-4zisj1p",
          "keyID": "20240531232156-ahsyx8l",
          "blockID": "20240118203831-fkfvvtx",
          "type": "number",
          "createdAt": 1717170648596,
          "updatedAt": 1781610266432,
          "number": {
            "content": 42,
            "isNotEmpty": true,
            "format": "",
            "formattedContent": "42"
          }
        }
      }
    }
    
    • data.value: 更新后规范化完成的值(含 number.formattedContent 等计算字段)。请使用该返回值刷新 UI,无需重新发送请求体

添加条目

添加一个或多个条目(行)。每个来源既可绑定已有块(isDetached: false),也可创建仅存在于视图内的独立行(isDetached: true)。

  • /api/av/addAttributeViewBlocks

  • 参数

    json
    {
      "avID": "20240118120204-kwyzf77",
      "blockID": "20240118120201-kldj15t",
      "viewID": "",
      "groupID": "",
      "previousID": "",
      "srcs": [
        {
          "id": "20240118120201-kldj15t",
          "isDetached": false,
          "content": "新行"
        }
      ],
      "ignoreDefaultFill": false
    }
    
    • avID: 数据库 ID
    • blockID: 拥有该数据库的数据库块(用于解析目标视图/分组)
    • viewID: 目标视图。省略时使用当前视图
    • groupID: 看板视图的目标分组 ID。表格/卡片视图可省略
    • previousID: 在此条目 ID 之后插入。为空表示追加到末尾
    • srcs[].id: 绑定块时(isDetached: false)为要绑定的块 ID,需符合节点 ID 格式
    • srcs[].isDetached: true 创建独立行;false 绑定已有块
    • srcs[].content: 主键的显示文本(isDetached: true 时使用,或覆盖绑定块的内容)
    • srcs[].itemID: 可选,显式指定条目 ID。省略时自动生成
    • ignoreDefaultFill: 为 true 时,跳过向过滤/分组字段自动填充默认值
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }
    
    • 该接口返回 null;成功后请调用 渲染 获取更新后的行(含更新单元格所需的新行 ID)

移除条目

移除一个或多个条目(行)。独立行会被删除;绑定块会解绑(不会删除底层文档块)。

  • /api/av/removeAttributeViewBlocks

  • 参数

    json
    {
      "avID": "20240118120204-kwyzf77",
      "srcIDs": ["20240118203831-fkfvvtx"]
    }
    
    • avID: 数据库 ID
    • srcIDs: 要移除的行 ID(渲染 返回的 rows[].id)列表
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }
    

切换布局

table(表格)、gallery(卡片)和 kanban(看板)之间切换当前视图的布局类型。成功时服务端会重新渲染并返回视图(结构与 渲染 相同)。

  • /api/av/changeAttrViewLayout

  • 参数

    json
    {
      "avID": "20240118120204-kwyzf77",
      "blockID": "20240118120201-kldj15t",
      "layoutType": "kanban"
    }
    
    • avID: 数据库 ID
    • blockID: 拥有该视图的数据库块
    • layoutType: 目标布局——tablegallerykanban 之一
  • 返回值:与 渲染 返回结构相同。当切换到 kanban 且已配置分组时,data.view 携带 groups[] 数组;每个分组是视图实例,含 groupKeygroupValue,以及看板特有字段(coverFromcardAspectRatiocardSizefitImagedisplayFieldNamefillColBackgroundColorfields

设置分组

为看板视图设置或清除分组规则。当 group.field 为空时移除分组。成功时服务端会重新渲染并返回视图。

  • /api/av/setAttrViewGroup

  • 参数

    json
    {
      "avID": "20240118120204-kwyzf77",
      "blockID": "20240118120201-kldj15t",
      "group": {
        "field": "20240118203822-io6ofxb",
        "method": 0,
        "order": 0,
        "hideEmpty": false
      }
    }
    
    • avID: 数据库 ID
    • blockID: 拥有该视图的数据库块
    • group: 分组规则
    • group.field: 用于分组的字段(列)ID。为空字符串表示移除分组
    • group.method: 分组方式——0 按值、1 按数字范围、2 按相对日期、3 按天、4 按周、5 按月、6 按年
    • group.range: 可选。method1(数字范围)时必填:{ "numStart": 0, "numEnd": 100, "numStep": 10 }
    • group.order: 分组排序——0 升序、1 降序、2 手动、3 按选项顺序
    • group.hideEmpty: 是否隐藏空分组
  • 返回值:与 渲染 返回结构相同

获取过滤与排序

返回绑定到数据库块的视图当前的过滤和排序规则。

  • /api/av/getAttributeViewFilterSort

  • 参数

    json
    {
      "id": "20240118120204-kwyzf77",
      "blockID": "20240118120201-kldj15t"
    }
    
    • id: 数据库 ID
    • blockID: 拥有该视图的数据库块
  • 返回值(真实响应,未配置过滤/排序):

    json
    {
      "code": 0,
      "msg": "",
      "data": {
        "filters": [],
        "sorts": []
      }
    }
    

    配置后(真实抓取的响应),过滤与排序形如:

    json
    {
      "code": 0,
      "msg": "",
      "data": {
        "filters": [
          {
            "column": "20240118203822-io6ofxb",
            "operator": "=",
            "value": {
              "type": "select",
              "mSelect": [
                { "content": "已完成", "color": "1" }
              ]
            }
          }
        ],
        "sorts": [
          {
            "column": "20240118120204-w6cggab",
            "order": "DESC"
          }
        ]
      }
    }
    
    • data.filters: ViewFilter 数组。顶层为单个根组节点 { "combination": "and"|"or", "filters": [...] },数组元素既可以是叶子过滤条件,也可以是嵌套的分组节点,支持递归的且/或组合
    • data.filters[].column: 过滤规则作用的字段(列)ID(仅叶子节点)
    • data.filters[].operator: 过滤操作符(见下方操作符表;仅叶子节点)
    • data.filters[].value: 过滤值,一个 Value 对象(结构见 设置单元格值;仅叶子节点)
    • data.filters[].relativeDate: 可选,日期过滤使用的相对时间描述({ "count": 7, "unit": 0, "direction": -1 }unit0 天、1 周、2 月、3 年;direction-1 前、0 当前、1 后;仅叶子节点)
    • data.filters[].combination: 分组组合方式,"and""or"(仅分组节点)
    • data.filters[].filters: 子过滤节点,递归的 ViewFilter(仅分组节点)
    • data.sorts: ViewSort 数组
    • data.sorts[].column: 排序规则作用的字段(列)ID
    • data.sorts[].order: ASCDESC

    过滤操作符:

    取值说明
    =等于
    !=不等于
    >大于
    >=大于等于
    <小于
    <=小于等于
    Contains包含
    Does not contains不包含
    Is empty为空
    Is not empty不为空
    Starts with以...开头
    Ends with以...结尾
    Is between介于之间
    Is true为真(复选框)
    Is false为假(复选框)

设置过滤

  • /api/av/setAttrViewFilters

  • 参数

    json
    {
      "avID": "20240118120204-kwyzf77",
      "blockID": "20240118120201-kldj15t",
      "data": [
        {
          "column": "20240118203822-io6ofxb",
          "operator": "=",
          "value": {
            "type": "select",
            "mSelect": [
              { "content": "已完成", "color": "1" }
            ]
          }
        }
      ]
    }
    
    • avID: 数据库 ID
    • blockID: 拥有该视图的数据库块
    • data: 完整的 ViewFilter 新数组,将整体替换视图现有过滤规则(结构见 获取过滤与排序)。传 [] 可清空全部过滤规则。顶层为单个根组节点 { "combination": "and"|"or", "filters": [...] },数组元素既可以是叶子过滤条件,也可以是嵌套的分组节点,支持递归的且/或组合
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }
    

设置排序

  • /api/av/setAttrViewSorts

  • 参数

    json
    {
      "avID": "20240118120204-kwyzf77",
      "blockID": "20240118120201-kldj15t",
      "data": [
        {
          "column": "20240118120204-w6cggab",
          "order": "DESC"
        }
      ]
    }
    
    • avID: 数据库 ID
    • blockID: 拥有该视图的数据库块
    • data: 完整的 ViewSort 新数组,将整体替换视图现有排序规则(结构见 获取过滤与排序)。传 [] 可清空全部排序规则
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }
    

添加字段

添加新字段(列)。该字段会被添加到每个视图(表格/卡片/看板)中 previousKeyID 之后的位置(为空时使用默认位置)。

  • /api/av/addAttributeViewKey

  • 参数

    json
    {
      "avID": "20240118120204-kwyzf77",
      "keyID": "20240118120204-7k9wzbp",
      "keyName": "状态",
      "keyType": "select",
      "keyIcon": "",
      "previousKeyID": "20240118120204-w6cggab"
    }
    
    • avID: 数据库 ID
    • keyID: 新字段 ID。需为 Lute.NewNodeID() 生成的合法节点 ID(14 位时间戳 + - + 7 位随机字母数字,如 20240118120204-abc1234
    • keyName: 字段显示名
    • keyType: 字段类型——textnumberdateselectmSelecturlemailphonemAssettemplatecreatedupdatedcheckboxrelationrolluplineNumber 之一。block(主键)不能通过该接口添加
    • keyIcon: 可选字段图标(emoji 或空字符串)
    • previousKeyID: 在此字段 ID 之后插入新列。为空字符串时使用布局默认位置(表格插入到首位,卡片/看板插入到末尾)
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }
    

移除字段

移除字段(列)及其所有值。若 keyID 不存在,返回 code: -1msg: "key not found"

  • /api/av/removeAttributeViewKey

  • 参数

    json
    {
      "avID": "20240118120204-kwyzf77",
      "keyID": "20240118120204-7k9wzbp",
      "removeRelationDest": false
    }
    
    • avID: 数据库 ID
    • keyID: 要移除的字段 ID
    • removeRelationDest: 为 true 且字段为关联类型时,同时移除目标数据库中对应的反向关联字段。默认为 false
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }
    

设置全局字段排序

全局重排字段(列)——将 keyID 移动到字段顺序中 previousKeyID 之后的位置,影响所有视图。

  • /api/av/sortAttributeViewKey

  • 参数

    json
    {
      "avID": "20240118120204-kwyzf77",
      "keyID": "20240118203822-io6ofxb",
      "previousKeyID": "20240118120204-w6cggab"
    }
    
    • avID: 数据库 ID
    • keyID: 要移动的字段 ID
    • previousKeyID: keyID 应置于其后的字段 ID。为空字符串表示移动到首位
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }
    

设置视图内字段排序

在单个视图的布局内重排列(例如表格的列顺序),不改变全局字段顺序。

  • /api/av/sortAttributeViewViewKey

  • 参数

    json
    {
      "avID": "20240118120204-kwyzf77",
      "viewID": "20240118120204-7rnmyc1",
      "keyID": "20240118203822-io6ofxb",
      "previousKeyID": "20240118120204-w6cggab"
    }
    
    • avID: 数据库 ID
    • viewID: 目标视图。为空时使用当前视图
    • keyID: 要移动的字段 ID
    • previousKeyID: keyID 应置于其后的字段 ID。为空字符串表示移动到首位
  • 返回值

    json
    {
      "code": 0,
      "msg": "",
      "data": null
    }