有没有办法“聚合”(或至少链接到)多个Swagger API以在单个UI上显示?
假设我有两个服务,Foo和Bar,我想做的是制作第三个服务Baz,它为Foo和Bar提供元数据。 Foo,Bar和Baz将在不同的主机上,这就是为什么我不确定这是否可行。
一种解决方案是使用服务发现的概念(在这种情况下可能不是正确的术语),并且在执行GET时让Baz提供指向Foo和Bar的链接。
GET / HTTP/1.1
Host: baz
Accept: application/json
...
HTTP/1.1 200 OK
Content-Type: application/json
...
{
"services": [
{
"name": "foo",
"link": "http://foo"
},
{
"name": "bar",
"link": "http://bar"
}
]
}
这就是我正常处理这个问题的方法,但我想知道是否有办法让Baz上的Swagger UI显示Foo和Bar的UI。
答案 0 :(得分:6)
我最终做的是在index.html
文件中替换页面顶部的文本框,其中包含一个下拉列表,其中包含指向托管swagger.json
文件的各种服务器的链接。
<div id='header'>
<div class="swagger-ui-wrap">
<a id="logo" href="http://swagger.io">swagger</a>
<form id='api_selector'>
<!-- Start of my changes -->
<div class='input'>
<select placeholder="http://example.com/api" id="input_baseUrl" name="baseUrl" type="text">
<option value="http://foo/swagger.json">Foo</option>
<option value="http://bar/swagger.json">Bar</option>
</select>
</div>
<!-- End of my changes -->
<div class='input'><input placeholder="api_key" id="input_apiKey" name="apiKey" type="text"/></div>
<div class='input'><a id="explore" href="#" data-sw-translate>Explore</a></div>
</form>
</div>
</div>
可以编写JavaScript脚本与您的Eureka实例(或类似的东西)交谈以获取每个服务的URL,并且下拉列表可以自动更新。我不是JavaScript或HTML专家所以我不知道如何做到这一点,但我提到它是因为它是一种可能性。这样会更有用,因此每次添加新服务时都不需要更新此文件。