下面主要包括一些 confluence 官方 API 的一些简单使用例子,主要参考了:
- 文档本体:https://docs.atlassian.com/ConfluenceServer/rest/6.15.4/
- 另外,感谢 Atlassian 社区
前置
直接请求数据的话可能会给你返回 403,或者直接不给你报错,返回空数组。这当然是因为你根本还没登陆,为解决这个问题,需要在 headers 添加 Authorization 字段,值为 Basic,空格,后面接 base64 编码的 用户名:密码
。
headers = { Authorization: "Basic " + btoa("admin:admin"),};
空间(space)相关
获取所有空间,传参可搜索:
GET /rest/api/space
返回某空间所有页面,并且填充了 ancestors 字段,你可以用这个接口构造一个 space 的结构树。
GET /rest/api/space/PUBLICSPACE/content?expand=ancestors&limit=999999
在创建页面的时候必须指定空间
页面(page)相关
创建页面
POST /rest/api/content
请求参数:
{ "title": "create via api", "type": "page", "space": { "key": "PUBLICSPACE" }, "body": { "storage": { "value": "<p>New page data.</p>", "representation": "storage" } }}
space
字段为必填项,由上面的 space 列表获取,并且试了一下用 space id 是不能正确提交的,会报 "Could not create content with type page"
错误,然而这个错误跟 type 完全没有关系,只是你的 space key 写错了,不知道为什么这个错误直到现在也没有(或者无法)修复。
获取页面
使用 id 获取页面:
GET /rest/api/content/{id}?expand=space,body.view,version
参数 expand 用于扩展返回数据字段
当然你也可以用搜索的方式获取,返回匹配数组:
GET /rest/api/content?title=yourtitle
返回的数据重点有这些:
- id:可以用于查询和修改,
- body.view:用于展示数据,
- version:更新的必要字段
更新页面
PUT /rest/api/content/{id}
请求参数:
{ "version": { "number": 5 }, "title": "My new title", "type": "page", "body": { "storage": { "value": "<p>New page data.aaa</p>", "representation": "storage" } }}
version 是必须的,版本错误会报错,所以必须先获取一次版本信息再更新内容。
子页面相关
创建子页面
POST /rest/api/content
{ "title": "create via api111", "type": "page", "space": { "key": "PUBLICSPACE" }, "ancestors": [ { "id": 63680669 } ], "body": { "storage": { "value": "val", "representation": "storage" } }}
与上面创建页面基本一样,就多出了一个 ancestors
字段,填上父节点 id 即可。
查询子页面
GET /rest/api/content/{id}/child?expand=page.body.VIEW
返回子页面数组
GET /rest/api/content/{id}/child/page?expand=children.page
递归查找子页面
评论(comment)相关
创建评论
没有看错,接口地址是跟创建页面一样的:
POST /rest/api/content
请求参数:
{ "body": { "storage": { "value": "A new comment test", "representation": "storage" } }, "container": { "type": "page", "id": "{id}" }, "type": "comment"}
获取评论
直接获取评论数组,没什么特别的
/rest/api/content/{id}/child/comment
附件(attachment)相关
获取附件
GET /rest/api/content/{id}/child/attachment
下载地址在返回数据的 _links.download
上传附件
上传的例子,接口地址同上
var data = new FormData();data.append("file", files[0]);data.append("comment", "foobar");data.append("minorEdit", "true");$.ajax({ type: "post", url: path, data, processData: false, headers: { "X-Atlassian-Token": "nocheck", }, contentType: false, cache: false, success: function (data, status, response) { for (var pair of data.entries()) { console.log(pair[0] + ", " + pair[1]); } }, error: function (response) { console.log(response); },});