2016-06-20 2 views
2

私はWebAPIソリューションを文書化するためにSwashbuckle/Swaggerを使用しています。開発者のポータルはhttps://myapi.com/のようなものになりますが、バージョン管理されたAPIはhttps://myapi.com/v1/usersです。Swashbuckle、複数のAPIバージョン、および仮想ディレクトリ

URLのバージョン部分は、v1のバイナリと設定ファイルを含む仮想ディレクトリにマップされます。バージョン2が出荷されると、ルートの下に新しい仮想ディレクトリが作成されるため、https://myapi.com/v2/users/some_new_endpoint_not_in_v1となります。これは、バグ修正のために保存することを意味します。古いバージョンのバイナリを変更する必要はありません。開発者によって誤って下位互換性が損なわれる可能性は低くなります。

しかし、コントローラ/アクションとXMLコメントを解析するために仮想ディレクトリを見るためにSwashbuckleを設定する方法はわかりません。 MultipleApiVersions設定オプションは、サポートされているすべてのバージョンを別々のプロセスに分けるのではなく、名前空間またはコントローラ名のいずれかのバイナリセットに追加する方が対象になります。

スワッシュバクルを私の意志にどのように曲げることができますか?スワッシュバックルを個々の仮想ディレクトリに単一のAPIバージョンとしてインストールすればよいので、ドキュメントはhttps://myapi.com/v1/swaggerのようになりますか?私のポータルは、さまざまなAPIバージョンを公開するために必要な作業を行います。

更新

私は後者の方法を試してみました、およびドキュメントのために、少なくとも、それがOKに動作します。問題は、Swagger仕様のURLがhttps://myapi.com/v1/swagger/docs/v1になり、URLに2番目のv1がないということです。残念ながら、Swaashbuckleは少なくとも、バージョン番号はベースURLではなく相対パスになると予想しています。それらがうまくいく持つ

+0

あなたは私の答えを見ましたか? – bsoulier

答えて

2

:あなたのバージョンのためのあなたのAPIサイト(Swashbuckleとは何の関係)のルートに

  • Swagger UI
  • 複数の仮想ディレクトリ( "V1"、 "V2を" .. 。この達成するために)

  • カスタムをdiscoveryPat HS(SwashBuckleが空のバージョン値とc.SingleApiVersionを処理していないとして、またはあなたに合ったものは何でも)Javascriptを追加「/スペック」接尾辞で、以下のようになります闊歩UIで配列:
var currentUrl = 'https://myapi.com/'; 
window.swashbuckleConfig = { 
    rootUrl: currentUrl, 
    discoveryPaths: arrayFrom('v1/swagger/docs/spec|v2/swagger/docs/spec'), 
    booleanValues: arrayFrom('true|false'), 
    validatorUrl: stringOrNullFrom('null'), 
    // other settings ommitted for brevity. 
    oAuth2AdditionalQueryStringParams: JSON.parse('{}') 
}; 
  • あなたのWeb APIサブアプリケーションからc.EnableSwaggerUiを削除する
+0

それは私が結局解決した解決策ではありませんが、正しい方向に私を押してくれました - ありがとう! –

+0

最後に、Swashbuckleで生成されたUIを削除し、Swashbuckleだけを実行時にAPI定義を生成するようにしました。私は、@ jensolegのBootstrapをテーマにしたswagger-uiのフォークを使用して、MVCで自分自身でUIを生成し、開発者に提示されるURLを制御できるようにしました。私のコントローラは、バックグラウンドでvX.Y/swagger/docs/X.Yを呼び出し、結果をローカルにキャッシュします。 –

関連する問題