【问题标题】:How to create new page in Confluence using their REST API? [closed]如何使用他们的 REST API 在 Confluence 中创建新页面? [关闭]
【发布时间】:2014-05-07 16:49:57
【问题描述】:

我需要使用 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

我在上面尝试了我的空间名称、新标题并将 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 到其他解决方案。

【问题讨论】:

标签: confluence confluence-rest-api


【解决方案1】:

我怀疑您没有使用足够新的 Confluence 版本。 Confluence 5.5 中引入了用于创建新页面的 REST API(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 网站上的示例也令人困惑,因为它在 URL 中包含一个额外的“/confluence”,只有在 Confluence 设置了上下文路径时才需要它。如果您使用的是 Confluence 5.5+,这也可能导致页面未找到错误(尽管您的帖子表明您已经对此进行了更正)。

另外,您需要通过adding a special os_authType query parameter 告诉 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 将创建一个新页面。

编辑添加:

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

【讨论】:

  • 感谢您的快速回复。你的回答解决了我的很多问题。是的,我使用的是旧版本的 Confluence。我也没有在 Confluence 上启用远程 API 设置。启用该选项并使用 5.5 后,您建议的解决方案将起作用。现在我可能要求太多了,但是,有了这个新的 rest api,我可以使用文件而不是在命令中传入原始 html。您还可以指定父页面ID吗?文档没有它。也许是因为它只有 8 天大 :)
  • 启用 Remote API 也是不错的建议。这是完全没有记录的(未来版本的 YMMV),但您可以通过 5.5 中的“祖先”属性指定父页面。这适用于我创建页面 #1048582 的子项:curl -v -u admin:admin -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -d'{"type":"page","ancestors":[{"type":"page","id":1048582}],"title":"third new child page","space":{"key":"ATTACH"},"body":{"storage":{"value":"&lt;p&gt;This is a new page&lt;/p&gt;","representation":"storage"}}}' "http://localhost:8090/rest/api/content/?os_authType=basic"
  • 我在上面试过了,它可以工作。现在我可以在任何其他页面下创建一个新页面。我还稍微调整了 curl 设置,因此它可以使用“-d @filename.json”从文件中读取新页面内容。当您的新页面可以包含大量内容时,这会派上用场。
  • 我没有设法让更新功能正常工作。当更新一个现有的 nested 页面时,它要么成为孤儿(使用 Confluence API 文档提供的示例 curl),要么成为空间主页的子页面。记录了 Atlassian CR-487 的问题
  • 是否可以使用此 API 在 Atlassian 托管的 Confluence 实例上创建页面?
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 2015-10-15
    • 1970-01-01
    相关资源
    最近更新 更多