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

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

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

场景:

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

问题:

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

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

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

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

  • 思源笔记

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

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

    20777 引用 • 81302 回帖

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • 我大概明白这个扩展的用例了,你提到的三个方案:

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

    你感觉呢?

    1 回复
  • 其他回帖
  • 你指的是创建新文档 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
    作者

    能有 prependBlock 和 appendBlock 是最好了trollface

    那我就等 api 放出了。

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

    1 回复
  • 查看全部回帖

推荐标签 标签

  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖 • 1 关注
  • 安全

    安全永远都不是一个小问题。

    197 引用 • 813 回帖 • 2 关注
  • Wide

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

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

    30 引用 • 218 回帖 • 614 关注
  • VirtualBox

    VirtualBox 是一款开源虚拟机软件,最早由德国 Innotek 公司开发,由 Sun Microsystems 公司出品的软件,使用 Qt 编写,在 Sun 被 Oracle 收购后正式更名成 Oracle VM VirtualBox。

    10 引用 • 2 回帖 • 14 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖 • 1 关注
  • Scala

    Scala 是一门多范式的编程语言,集成面向对象编程和函数式编程的各种特性。

    13 引用 • 11 回帖 • 114 关注
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 332 关注
  • Laravel

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

    20 引用 • 23 回帖 • 715 关注
  • OnlyOffice
    4 引用 • 10 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 268 回帖 • 95 关注
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    263 引用 • 664 回帖
  • PHP

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

    177 引用 • 407 回帖 • 501 关注
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖 • 135 关注
  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    238 引用 • 224 回帖
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    247 引用 • 1347 回帖
  • 区块链

    区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。所谓共识机制是区块链系统中实现不同节点之间建立信任、获取权益的数学算法 。

    91 引用 • 751 回帖 • 1 关注
  • Oracle

    Oracle(甲骨文)公司,全称甲骨文股份有限公司(甲骨文软件系统有限公司),是全球最大的企业级软件公司,总部位于美国加利福尼亚州的红木滩。1989 年正式进入中国市场。2013 年,甲骨文已超越 IBM,成为继 Microsoft 后全球第二大软件公司。

    104 引用 • 126 回帖 • 434 关注
  • 反馈

    Communication channel for makers and users.

    123 引用 • 910 回帖 • 220 关注
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    12 引用 • 54 回帖 • 147 关注
  • Vim

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

    28 引用 • 66 回帖 • 4 关注
  • Redis

    Redis 是一个开源的使用 ANSI C 语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API。从 2010 年 3 月 15 日起,Redis 的开发工作由 VMware 主持。从 2013 年 5 月开始,Redis 的开发由 Pivotal 赞助。

    285 引用 • 248 回帖 • 105 关注
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖
  • 安装

    你若安好,便是晴天。

    131 引用 • 1184 回帖
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 468 关注
  • 博客

    记录并分享人生的经历。

    272 引用 • 2386 回帖
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 616 关注
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖