如何通过编程的方式将Swagger API文档发布到Atlassian Confluence?(使用Swagger Confluence工具和Confluence REST API)

9
我正在尝试使用swagger-confluence独立工具将我的Swagger JSON模式(myapi.json)上传到Atlassian Confluence。
独立的CLI .jar 应该(据我理解)像这样运行(在此页面上用于凭据Base64编码:this)。
java -jar <system path root>/swagger-confluence-cli-all-2.2-RELEASE.jar -u "http(s)://<server>:<port>/confluence/rest/api/" -b "<base64 encoded userid:password string" -a "<parent page id>" -k "<space key>" -g "true" -i "true" -s "<myschema.json>" -t "<Title for generated page>" -m "single"

输出(404未找到):
2016-08-23 15:08:12.177  INFO - [main]  n.s.s.c.s.i.SwaggerToAsciiDocServiceImpl : AsciiDoc Conversion Complete!  
2016-08-23 15:08:12.178  INFO - [main] n.s.s.c.s.i.AsciiDocToXHtmlServiceImpl   : Converting AsciiDoc to XHTML5...
io/console not supported; tty will not be manipulated   
2016-08-23 15:08:16.888  INFO - [main] n.s.s.c.s.i.AsciiDocToXHtmlServiceImpl   : XHTML5 Conversion Complete!   
2016-08-23 15:08:17.728  INFO - [main] n.s.s.c.s.i.XHtmlToConfluenceServiceImpl : Posting XHTML to Confluence...
Exception in thread "main" org.springframework.web.client.HttpClientErrorException: 404 Not Found

在搜索Confluence REST API示例(例如在Stackoverflow中)时,可能会导致一些混淆,因为该API似乎发生了一些变化。然而,Confluence REST API page 表明当前的API应自Confluence Server 5.5以来保持不变。这也被描述为swagger-confluence概述page中的要求。

同样的要求提到“访问REST API的Confluence用户”。如何确定这一点?我正在使用管理员用户。我在常规配置- >进一步配置下找到了一般的“启用远程API”配置(似乎默认已启用),正如此article所述。同一文章说 Confluence 5.5+ 已经废弃了此设置启用的XML-RPC和SOAP API。REST API是否默认已启用,并且是否有一种控制其使用的方法?

在尝试调用REST API时,结果有些奇怪(尽管我确实收到了响应,这让我认为URL是正确的)。

curl -v -u userid:pass http://<server>:<port>/confluence/rest/api/  
...  
HTTP/1.1 302 Found  
...

但是,使用REST Easy(Firefox插件)通过GET调用URL http://<server>:<port>/confluence/rest/api/ 并提供userid和pass作为基本身份验证返回200 OK HTTP状态,并似乎返回我的Confluence仪表板(空间的父级;顶级页面)。在浏览器中访问URL时也会发生同样的情况。此外,尝试通过文档化的方式调用Confluence REST API 的其他尝试都导致404错误。开始认为这是授权问题...我做错了什么?或者是否有另一种方法可以产生类似于Swagger Confluence demo 的结果?
1个回答

7

好的,结果表明尽管http://<server>:<port>/confluence/rest/api/返回了HTTP 200 OK,但URL是错误的。 以上是所谓的“带上下文的URL”(即/confluence/部分),我需要的是没有上下文的URL(URL中没有/confluence/)。

以下是我如何通过接收200、Headers(-v)和页面内容作为JSON响应来测试URL是否工作: curl -v -u user:pass http://<server>:<port>/rest/api/content/{id}
页面ID可以通过在Confluence页面上按(或将鼠标悬停在)“编辑”按钮来检查。

这是我最终使自动上传到Confluence工作的方法:
java -jar <系统路径根目录>/swagger-confluence-cli-all-2.2-RELEASE.jar -u "http(s)://<服务器>:<端口>/rest/api/" -b "<base64编码的用户ID:密码字符串>" -a "<父页面ID>" -k "<空间关键字>" -g "true" -i "true" -s "<myschema.json>" -t "<生成页面标题>" -m "single" 顺便说一下,Swagger Confluence 工具 真的很棒,结果与 演示 一样好!
[编辑以添加]:
确认 Swagger Confluence 库/工具 (v2.2) 在我的目标 Confluence 服务器版本 5.8.14 和 5.9.2 上都可以使用。

工具不再可用,演示链接已失效,因此被降低评分...请修复或删除答案。 - Michael Lihs
该工具仍可在 https://github.com/starlightknight/swagger-confluence 上获得,但似乎不再维护。 - Marius

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接