Notion应该是通过数据库来进行管理上传的
因为在Notion本地文件上看到了Notion.db文件
然后这边记录了Notion的几个表
Block是Notion的灵魂
里面的表数据是这些类型 这些里面包括了id 还有内容属性等,这些看来是每次更改后 都会记录到这块表当中,然后如果把db的数据发送到服务器的时候 会对里面的数据进行删除操作,从而来保证数据都能正常发送,如果想去开发notion这种软件,可以采用这种思想,唯一感觉Notion可以改进的地方是它可以对db文件进行加密,加密的方式可以类似于每个机器都有一个标识的硬件id,通过对硬件id进行加密的话,可以保证本地数据的安全性,这点是个人觉得Notion可以改进的地方。
同步的思路 个人通过ProxyMan抓包
https://www.notion.so/api/v3/saveTransactions
这边来进行发送数据通过
{
"requestId": "53629627-2463-4cc4-83a5-c1ff4f205e89",
"transactions": [
{
"id": "3c591229-daba-4f29-a3a0-49f14cd2f50b",
"spaceId": "b0bc43d3-a44d-4607-9e96-19947dbd98ec",
"operations": [
{
"pointer": {
"table": "block",
"id": "6ca2641b-b86e-446e-b19d-24067f51805c",
"spaceId": "b0bc43d3-a44d-4607-9e96-19947dbd98ec"
},
"path": [
"properties",
"title"
],
"command": "set",
"args": []
},
{
"pointer": {
"table": "block",
"id": "0aa34079-8902-4de7-9213-25c4404a568b",
"spaceId": "b0bc43d3-a44d-4607-9e96-19947dbd98ec"
},
"path": [
"properties",
"title"
],
"command": "set",
"args": [
[
"火速和毒素"
]
]
},
{
"pointer": {
"table": "block",
"id": "6ca2641b-b86e-446e-b19d-24067f51805c",
"spaceId": "b0bc43d3-a44d-4607-9e96-19947dbd98ec"
},
"path": [],
"command": "update",
"args": {
"alive": false
}
},
{
"pointer": {
"table": "block",
"id": "a46bc86f-1524-4d8b-a3ef-61306c4716bb",
"spaceId": "b0bc43d3-a44d-4607-9e96-19947dbd98ec"
},
"path": [
"content"
],
"command": "listRemove",
"args": {
"id": "6ca2641b-b86e-446e-b19d-24067f51805c"
}
},
{
"pointer": {
"table": "block",
"id": "6ca2641b-b86e-446e-b19d-24067f51805c",
"spaceId": "b0bc43d3-a44d-4607-9e96-19947dbd98ec"
},
"path": [],
"command": "update",
"args": {
"last_edited_time": 1643096280000
}
},
{
"pointer": {
"table": "block",
"id": "a46bc86f-1524-4d8b-a3ef-61306c4716bb",
"spaceId": "b0bc43d3-a44d-4607-9e96-19947dbd98ec"
},
"path": [],
"command": "update",
"args": {
"last_edited_time": 1643096280000
}
},
{
"pointer": {
"table": "block",
"id": "0aa34079-8902-4de7-9213-25c4404a568b",
"spaceId": "b0bc43d3-a44d-4607-9e96-19947dbd98ec"
},
"path": [],
"command": "update",
"args": {
"last_edited_time": 1643096280000
}
}
]
}
]
}
他们的发送时机 是在保存操作的时候会进行发送,正常是一个block 记录到数据库当中。
然后他们也会采集用户信息
https://www.notion.so/api/v3/getClientExperimentsV2
通过这个接口 去采集用户设备的信息
这些采集的数据,应该是通过另外一个进程Notion Helper来进行采集的,从而保护了主进程不会因为网络的问题挂掉这些,通信方式的话,数据方面,通过对Notion.db文件来交互,其余不涉及到数据的问题,通过正常的进程通信就可以了。
这一点可以借鉴到我们日常的客户端的开发,可以参考。
他们开发也是采用内嵌浏览器的开发方式,这种好处就是可以一次开发,多端同时使用,不好的一点就是在于客户端的体积会相对于原生的大,但是鉴于他们是多端同步的管理工具,这也不难理解了。
目前还没研究如何实现多平台数据同步,等下次解析。