能否优化一下 /api/filetree/createDocWithMd 接口

本贴最后更新于 1448 天前,其中的信息可能已经物是人非

前两天通过咱的 api 写插件,碰到个问题,这里记录一下,希望 D 大看看如何优化一下。

场景:

我通过/api/filetree/createDocWithMd 接口写入文档,同时需要找到文档内容 blocks 的 ids,保存至 doc 的自定义属性中,以此让两者产生关联。

问题:

通过 api 写入文档后,仅返回了 doc_id,并没有返回任何内容相关的信息,我需要单独通过 sql 接口查,但是呢,可能是因为文档数据和 db 数据同步需要一定时间,马上去查 blocks 就会查不到任何数据,等会再查就没问题。

所以,我的解决方案是延时的循环查询,直到查到数据或超出最大循环次数。

不知道是否有更优的解决方案,或者该 api 接口能否在文档数据和 db 数据全部处理完毕后再返回结果?

可参考相关方法的 143、187 行。

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    28447 引用 • 119791 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 你指的是创建新文档 A 以后,需要把 A 的所有块 ids 查询出来,然后插入到文档 B 的 root 属性中吗?

    2 回复
  • nmtuan
    作者

    我要做的是: 基于 markdown 创建 A 文档,然后把子块的 ids 写入 A 到的 attrs 里。

    我目前的解决方案不是非常好,也仅仅是根据目前 api 和我的能力,想到的一种方案。

    实际场景:

    把浏览器的一个书签以 doc 的方式插入到 siyuan。这是最根本的需求。

    由于 doc 内无法直观的看到 attrs,所以在创建 doc 的时候,把链接地址写入到了文档中,生成了 block。方便浏览文档的时候一键打开网站。

    然后,为了修改浏览器书签的时候,能同时能更新到此 block,我用到的笨办法就是把 blockId 写入到 doc 的 attrs 里。

    这是我目前的实现方式。从头到尾只有一个 doc 和它的一个子 block。

    当然,也还有其它的解决方案,希望 D 大择优考虑。

    方案 1:页面能直观展示 attrs。

    (这样就避免在正文中插入 block 了)

    方案 2:doc 的 title 有 url 属性,就好像有 icon 属性一样,直接在 title 上加超链接。

    (同样不需要在正文插入 block;而且还自带超链接)

    方案 3:能直接为 doc 插入新 block。插入 block 时,可同时写 docId 至 block 的 attrs,从而达到二者关联。

    (另外,希望 1.6.0 的 api/block/insertBlock,不仅可以靠 previousID,也可以靠 docID 作为参数)

    以上是大概的场景,希望对 api 设计有帮助。

    1 回复
    1 操作
    nmtuan 在 2022-01-04 20:29:00 更新了该回帖
  • nmtuan
    作者

    image.png

  • 我大概明白这个扩展的用例了,你提到的三个方案:

    1. 这个估计要靠挂件,比如提供专门的文档属性挂件。但是这样用户需要设置,有点麻烦
    2. 这个不大合适,因为文档 URL 有点语义不清晰,还是靠属性扩展比较好
    3. 后续会提供文档的 prependBlock(在顶部插入)和 appendBlock(在底部插入)API,我觉得这个方案应该比较好。比如可以通过 prepend 来直接插入新块用来保存网址,老的块也不用删除,作为修改历史继续留着,用户如果要删的话就手动删除。这样就不用考虑关联问题了,浏览器扩展那里只记一下 doc ID 就好

    你感觉呢?

    1 回复
  • nmtuan
    作者

    能有 prependBlock 和 appendBlock 是最好了trollface

    那我就等 api 放出了。

    另外,希望 insertBlock prependBlock appendBlock 增加 attrs 参数,在插入文档的时候可以同时写入属性。

    1 回复
  • 88250 1 评论

    这几个接口的 data 字段支持直接设置块属性的,比如 dataTypemarkdown 时,可以通过 kramdown 语法来设置属性,具体语法格式可以通过文档导出模板进行参考。

    明白,感谢!
    nmtuan
请输入回帖内容 ...

推荐标签 标签

  • OneNote
    2 引用 • 5 回帖
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 51 关注
  • etcd

    etcd 是一个分布式、高可用的 key-value 数据存储,专门用于在分布式系统中保存关键数据。

    6 引用 • 26 回帖 • 559 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    188 引用 • 1057 回帖 • 2 关注
  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    文档地址:sillot.db.sc.cn

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    3. ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
    29 引用 • 25 回帖 • 152 关注
  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    17 引用 • 53 回帖 • 158 关注
  • Anytype
    3 引用 • 31 回帖 • 59 关注
  • 禅道

    禅道是一款国产的开源项目管理软件,她的核心管理思想基于敏捷方法 scrum,内置了产品管理和项目管理,同时又根据国内研发现状补充了测试管理、计划管理、发布管理、文档管理、事务管理等功能,在一个软件中就可以将软件研发中的需求、任务、bug、用例、计划、发布等要素有序的跟踪管理起来,完整地覆盖了项目管理的核心流程。

    11 引用 • 15 回帖
  • 京东

    京东是中国最大的自营式电商企业,2015 年第一季度在中国自营式 B2C 电商市场的占有率为 56.3%。2014 年 5 月,京东在美国纳斯达克证券交易所正式挂牌上市(股票代码:JD),是中国第一个成功赴美上市的大型综合型电商平台,与腾讯、百度等中国互联网巨头共同跻身全球前十大互联网公司排行榜。

    14 引用 • 102 回帖 • 260 关注
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    502 引用 • 1397 回帖 • 241 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 405 关注
  • 一些有用的避坑指南。

    69 引用 • 93 回帖
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 120 关注
  • webpack

    webpack 是一个用于前端开发的模块加载器和打包工具,它能把各种资源,例如 JS、CSS(less/sass)、图片等都作为模块来使用和处理。

    43 引用 • 130 回帖 • 259 关注
  • 酷鸟浏览器

    安全 · 稳定 · 快速
    为跨境从业人员提供专业的跨境浏览器

    3 引用 • 59 回帖 • 64 关注
  • ngrok

    ngrok 是一个反向代理,通过在公共的端点和本地运行的 Web 服务器之间建立一个安全的通道。

    7 引用 • 63 回帖 • 668 关注
  • InfluxDB

    InfluxDB 是一个开源的没有外部依赖的时间序列数据库。适用于记录度量,事件及实时分析。

    2 引用 • 123 关注
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    19 引用 • 23 回帖 • 770 关注
  • OnlyOffice
    4 引用 • 41 关注
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 636 关注
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 11 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    29 引用 • 202 回帖 • 53 关注
  • Shell

    Shell 脚本与 Windows/Dos 下的批处理相似,也就是用各类命令预先放入到一个文件中,方便一次性执行的一个程序文件,主要是方便管理员进行设置或者管理用的。但是它比 Windows 下的批处理更强大,比用其他编程程序编辑的程序效率更高,因为它使用了 Linux/Unix 下的命令。

    126 引用 • 83 回帖 • 2 关注
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 724 关注
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 563 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    188 引用 • 319 回帖 • 222 关注
  • OAuth

    OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是 oAuth 的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此 oAuth 是安全的。oAuth 是 Open Authorization 的简写。

    36 引用 • 103 回帖 • 44 关注