26

我需要使用 rest api 在汇合中创建新 wiki 页面的工作示例。我更喜欢在特定空间和特定页面下创建新页面。我阅读了他们的 api 文档并查看了他们拥有的几个示例,但仍然不足。

这是他们网站上的一个例子

curl -u admin:admin -X POST -H 'Content-Type: application/json' -d'{"type":"page","title":"new page","space":{"key":"TST"},"body":{"storage":{"value":"<p>This is a new page</p>","representation":"storage"}}}' http://localhost:8080/confluence/rest/api/content/ | python -mjson.tool

我在上面尝试了我的空间名称、新标题并将 url 更改为 mysite/rest/api/content 并返回的内容基本上是 html 页面,说页面不存在或页面存在但您没有权限。我已经确认我可以访问 confluence wiki 并且可以使用我的凭据创建新的 wiki。

在上面的示例中还不清楚的是它是如何调用创建页面的特定 api 的?它没有任何意义。

在他们的论坛上提出了类似的问题,但没有合理的答案 https://answers.atlassian.com/questions/149561/simple-confluence-rest-api-usage-what-am-i-missing

(我想我的最终目标是能够在 confluence 上自动创建新的 wiki 页面)如果需要,我可以放弃 confluence REST API 到其他解决方案。

4

2 回答 2

29

我怀疑你没有使用足够新的 Confluence 版本。Confluence 5.5 中引入了用于创建新页面的 REST API(8 天前发布)。API 文档是版本化的,您应该始终使用与您的 Confluence 版本相对应的版本。5.5 API 文档包括您需要的页面创建 API,但旧版本没有。您可以更改上述 URL 中的版本以获取与您的 Confluence 版本匹配的 API 版本。

Confluence 5.4 和之前的版本还为 REST API 使用了不同的根前缀(/rest/ prototype/1 /content),这可能是导致找不到页面错误的原因之一。

Atlassian 站点上的示例也令人困惑,因为它在 URL 中包含一个额外的“/confluence”,只有在 Confluence 设置了上下文路径时才需要它。如果您使用的是 Confluence 5.5+,这也可能导致页面未找到错误(尽管您的帖子表明您已经对此进行了更正)。

此外,您需要通过添加特殊的 os_authType 查询参数来告诉 Confluence 您正在使用基本身份验证方法。

以下示例适用于 Confluence 5.5(不要忘记根据需要更改端口和空格键)。

为了安全起见,我还在Accept标题中添加了适当的内容类型,尽管这在实践中似乎不需要。

curl -v -u admin:admin -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -d'{"type":"page","title":"new page","space":{"key":"ATTACH"},"body":{"storage":{"value":"<p>This is a new page</p>","representation":"storage"}}}' "http://localhost:8090/rest/api/content/?os_authType=basic"

要回答您的最后一个问题,创建页面的特定 API 由 URL 本身和请求方法确定。例如,对“/rest/api/content”执行 GET 将获取现有页面(给定适当的查询参数),而执行 POST 将创建一个新页面。

编辑添加:

另请参阅下面的评论,了解如何将页面创建为另一个现有页面的子页面,而不是仅在空间的顶层。

于 2014-05-07T19:14:59.180 回答
1

不是 REST api,而是我放在一起的解决方法。试试这个:

将页面作为子页面移动

curl -X GET \
'<your-confluence-URL>/pages/movepage.action?pageId=<page-to-be-moved-pageId>&spaceKey=<target-space-key>&targetTitle=<target-title-of-parent-page>&position=append' \
-H 'authorization: Basic <encoded-username-password>' \ 
-H 'x-atlassian-token: no-check'

将页面作为空间中的顶级页面移动

curl -X GET \
'<your-confluence-base-URL>/pages/movepage.action?pageId=<page-to-be-moved-pageId>&spaceKey=<target-space-key>&position=topLevel' \...
于 2017-05-19T22:02:19.370 回答