主题
开放接口
申请开通
登录妙花笔记APP,点击【设置】-【开放接口】即可获取专属密钥(Token),用于下列开放接口 请注意:重置专属密钥(Token)会导致旧密钥失效。
创建笔记
POST https://api.memoreka.com/open/create
请求头(Header)
Content-Type: application/json
Token: 专属密钥
说明
该接口用于创建笔记,正文支持Markdown
如果要插入本地多媒体,需要先通过 https://api.memoreka.com/open/upload 上传获取 name(详见下文上传文件章节),并以 ![](name)
形式插入
请求 (Request)
json
{
"title": "笔记标题(如果不需要,传输空字符串)",
"content": "笔记内容(不能为空)",
"book": "笔记本名称(不能为空,且必须为已存在的,未关闭的笔记本)",
"category": "笔记模式(note = 备忘录;todo = 待办;如果输入错误参数将默认为 todo 模式)",
}
回复(Response)
如果创建成功会收到 Status Code = 200
如果失败则会进行对应报错
示例代码
js
fetch('https://api.memoreka.com/open/create', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Token': '你的专属密钥'
},
body: JSON.stringify({
'title': '这是标题',
'content': '这是内容',
'book': '测试',
'category': 'note'
})
})
上传文件
POST https://api.memoreka.com/open/upload
请求头(Header)
Content-Type: multipart/form-data; boundary=<calculated when request is sent>
Token: 专属密钥
Offset:分片偏移量(已上传的Byte数)
Size:文件总大小
注意 Content-Type 通常为程序自动设置,这样可以确保boundary设置正确
说明
为了防止文件过大耗时过长或失败,上传文件接口需要根据文件大小做特殊处理
如果文件大小 <= 4MB,则可以一次性上传,该情况请求头(Header)的 Offset = 0,Size = 0
如果文件大小 > 4MB,需要进行分片上传。
即按照顺序,将文件切割为 <= 4MB 的切片,
按照顺序,从第一个切片开始循环上传,直到全部上传完成。
每次上传需要在请求头(Header)中附带Offset和Size信息。
Offset为已上传Byte大小,Size为文件的总大小。
请求 (Request)
MultipartForm,Key = "file"
注意 请确保上传的file文件名带有正确的格式后缀(如 .png, .mp4 等),否则可能造成传输后无法读取
回复(Response)
json
{
"name": "文件名 name 可直接在笔记正文 content 中引用,为 ![](name),在第一个分片上传后会生成该文件名,后续需要在MultipartForm中设置该name为文件名(Filename),否则无法正确拼接已上传文件,并报错",
"size": 0, //int,当前服务端已接收到的 byte 大小,传下个分片的时候应当携带HEADER Offset=该返回值。
//如果传输的 Offset > 服务端已上传大小,将无法正常上传该分片,并返回报错信息,这时应该从正确的Offset开始,或者从0开始
//如果 Offset < 服务端已上传大小,将会正常返回200,并返回正确的,服务端已上传的大小(返回中的size),下次上传时应当将该正确值作为HEADER Offset设置
}
示例代码
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<input type="file" id="file">
<button id="submit">提交</button>
<script>
const file = document.getElementById('file')
const button = document.getElementById('submit')
// 4MB
const DEFAULT_CHUNK_SIZE = 1024 * 1024 * 4
const resp = { file: '', name: '', offset: 0 }
const upload = (data) => {
const size = resp.file.size > DEFAULT_CHUNK_SIZE ? resp.file.size : 0
return fetch('https://api.memoreka.com/open/upload', {
method: 'POST',
headers: {
'Token': '你的专属密钥',
'Offset': resp.offset,
'Size': size
},
body: data
}).then(res => res.json())
}
file.addEventListener('change', function(event) {
resp.file = event.target.files[0]
resp.name = resp.file.name
})
button.addEventListener('click', function(event) {
uploadChunkFile()
})
async function uploadChunkFile() {
const data = new FormData()
const chunk = resp.file.slice(resp.offset, resp.offset + DEFAULT_CHUNK_SIZE)
const file = new File([chunk], resp.name, { type: resp.file.type })
data.append('file', file)
try {
const res = await upload(data)
if (!res?.code) {
console.error('err: ', res)
return
}
resp.name = res.name
resp.offset = res.size
if (resp.file.size !== resp.offset) {
return await uploadChunkFile()
}
} catch (err) {
console.error(`err: `, err)
}
}
</script>
</body>
</html>
查看笔记本列表
POST https://api.memoreka.com/open/books
请求头(Header)
Content-Type: application/json
Token: 专属密钥
说明
该接口用于查询所有当前未关闭,未删除的笔记本列表 用于在创建时设置
请求 (Request)
N/A
回复(Response)
json
{
"books": [
{
"name": "笔记本名称",
"desc": "笔记本描述"
},
...
]
}
示例代码
js
fetch('https://api.memoreka.com/open/books', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Token': '你的专属密钥'
},
})
查看同步流量余额
POST https://api.memoreka.com/open/bytes
请求头(Header)
Content-Type: application/json
Token: 专属密钥
说明
该接口用于查询所有当前未关闭,未删除的笔记本列表 用于在创建时设置
请求 (Request)
N/A
回复(Response)
json
{
"amount": 10000, //当前可用byte数
}
示例代码
js
fetch('https://api.memoreka.com/open/bytes', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Token': '你的专属密钥'
},
})
其他说明
- 使用开放接口需要开启云同步功能。
- 从开放接口创建或上传将消耗同步流量,请注意流量余额。
- 文字内容支持Markdown格式及标签