2016-01-11 203 views
0

有沒有一種方法來「聚合」(或至少鏈接到)多個Swagger APIs顯示在一個單一的用戶界面?Swagger UI與多個服務

說我有兩個服務,Foo和Bar,我想要做的是製作第三個服務,Baz,爲Foo和Bar提供元數據。 Foo,Bar和Baz將在不同的主機上,這就是爲什麼我不確定這是否可能。


一種解決方案是使用服務發現的想法(也許不是在這種情況下,正確的說法),並有在執行一個GET巴茲服務鏈接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" 
     } 
    ] 
} 

這是我想接近正常,但我不知道是否有一種方法來對巴茲招搖UI顯示了兩個Foo和Bar的用戶界面。

回答

4

我最終做的是在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腳本可以被寫入談談你的尤里卡實例(或類似的東西)來獲取每個服務和下拉列表會自動更新的URL。我不是JavaScript或HTML專家,所以我不知道如何做到這一點,但我提到它,因爲這是一種可能性。這會更有用,因此每次添加新服務時都不需要更新此文件。