如何使用REST API在Confluence中创建新页面?

时间:2014-05-07 16:49:57

标签: confluence confluence-rest-api

我需要使用rest api在confluence中创建新的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

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

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

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

(我想我的最终目标是能够自动在汇合处创建新的wiki页面。如果有必要,我可以放弃将conf API用于其他解决方案。

2 个答案:

答案 0 :(得分:27)

我怀疑你没有使用足够新版的Confluence。用于创建新页面的REST API是在Confluence 5.5(8天前发布)中引入的。 API文档已版本化,您应始终使用与Confluence版本对应的版本。 5.5 API docs include the page creation API you need,但旧版本没有。您可以更改上述URL中的版本,以获得与Confluence版本匹配的API版本。

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

Atlassian网站上的示例也令人困惑,因为它包含额外的&#34; / confluence&#34;在URL中,如果使用上下文路径设置Confluence,则只需要该URL。如果您使用Confluence 5.5+,这也可能导致页面找不到错误(尽管您的帖子表明您已经对此进行了更正)。

此外,您需要告诉Confluence您正在使用adding a special os_authType query parameter的基本身份验证方法。

以下示例适用于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本身和请求方法确定。例如,在&#34; / rest / api / content&#34;上执行GET;将获取现有页面(给定适当的查询参数),而执行POST将创建一个新页面。

已编辑添加:

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

答案 1 :(得分:0)

不是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' \...