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

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

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

场景:

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

问题:

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

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

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

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

  • 思源笔记

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

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

    22391 引用 • 89650 回帖

相关帖子

欢迎来到这里!

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

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

    2 回复
  • 其他回帖
  • nmtuan
    作者

    能有 prependBlock 和 appendBlock 是最好了trollface

    那我就等 api 放出了。

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

    1 回复
  • nmtuan
    作者

    image.png

  • 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 更新了该回帖
  • 查看全部回帖

推荐标签 标签

  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    287 引用 • 4484 回帖 • 669 关注
  • Swift

    Swift 是苹果于 2014 年 WWDC(苹果开发者大会)发布的开发语言,可与 Objective-C 共同运行于 Mac OS 和 iOS 平台,用于搭建基于苹果平台的应用程序。

    36 引用 • 37 回帖 • 531 关注
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    21 引用 • 245 回帖 • 241 关注
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖 • 4 关注
  • OpenShift

    红帽提供的 PaaS 云,支持多种编程语言,为开发人员提供了更为灵活的框架、存储选择。

    14 引用 • 20 回帖 • 633 关注
  • 禅道

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

    6 引用 • 15 回帖 • 116 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    179 引用 • 407 回帖 • 490 关注
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 134 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    6 引用 • 63 回帖 • 1 关注
  • Sym

    Sym 是一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)系统平台。

    下一代的社区系统,为未来而构建

    524 引用 • 4601 回帖 • 698 关注
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 709 关注
  • 房星科技

    房星网,我们不和没有钱的程序员谈理想,我们要让程序员又有理想又有钱。我们有雄厚的房地产行业线下资源,遍布昆明全城的 100 家门店、四千地产经纪人是我们坚实的后盾。

    6 引用 • 141 回帖 • 585 关注
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 617 关注
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    176 引用 • 815 回帖
  • 职场

    找到自己的位置,萌新烦恼少。

    127 引用 • 1705 回帖
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    180 引用 • 400 回帖
  • 新人

    让我们欢迎这对新人。哦,不好意思说错了,让我们欢迎这位新人!
    新手上路,请谨慎驾驶!

    52 引用 • 228 回帖
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 362 关注
  • gRpc
    11 引用 • 9 回帖 • 73 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    5 引用 • 7 回帖 • 2 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 75 关注
  • Wide

    Wide 是一款基于 Web 的 Go 语言 IDE。通过浏览器就可以进行 Go 开发,并有代码自动完成、查看表达式、编译反馈、Lint、实时结果输出等功能。

    欢迎访问我们运维的实例: https://wide.b3log.org

    30 引用 • 218 回帖 • 629 关注
  • 创业

    你比 99% 的人都优秀么?

    84 引用 • 1399 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    8136 引用 • 37080 回帖 • 160 关注
  • ReactiveX

    ReactiveX 是一个专注于异步编程与控制可观察数据(或者事件)流的 API。它组合了观察者模式,迭代器模式和函数式编程的优秀思想。

    1 引用 • 2 回帖 • 156 关注