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

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

场景:

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

问题:

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

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

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

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

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • 88250
    订阅者

    你指的是创建新文档 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

  • 88250
    订阅者

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

    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
请输入回帖内容 ...