我需要使用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用于其他解决方案。
答案 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' \...