swaggerのvalidatorがin-house化できていない
tkhr-sait opened this issue · comments
swagger-generatorをin-houseで起動したい
【事象】
画面最下部のvalidatorがうまく動作してない ERROR {...}
https://online.swagger.io/validator/debug?url=/api/swagger.json
swagger-ui環境(in-house化保留中)だと以下で動作して VALID {...}
https://online.swagger.io/validator/debug?url=http://petstore.swagger.io/api/swagger.json
【原因】
validator からurlを参照できないため
【対策】
https://online.swagger.io/validator もin-houseに持ってくる
https://github.com/swagger-api/validator-badge
もしくは消しちゃう
http://qiita.com/utisam/items/61e7551504bcf80854a5
動作確認、ありがとうございます!
なるほど。
swagger-uiの一番下に、そんなのが出てたんですねf(^_^;
こんな感じでどうでしょう?
個人的には案3かなと思ってます〜
-
【前提】
- generator.war内部のui
- build時に、uiのgithub repoから最新をダウンロード&組み込みしているので、消すにしても何らか対応が必要そう。
→ それなら動くようにしようかと。
- build時に、uiのgithub repoから最新をダウンロード&組み込みしているので、消すにしても何らか対応が必要そう。
- editor, ui のfork理由
- 提供されているのがソースで、in-houseで使うなら、自分でbuildしてほしい仕組みに見える。
→ in-houseで提供するなら、build結果をダウンロードできるようにしておいた方が便利そう。
- 提供されているのがソースで、in-houseで使うなら、自分でbuildしてほしい仕組みに見える。
- generator.war内部のui
-
【対応案1 - インストール時に考慮】
- 対応内容
- validator-badge の in-house module組み込み
- generatorと同様に、warを配置
https://mvnrepository.com/artifact/io.swagger/swagger-validator/1.0.4
- generatorと同様に、warを配置
- ui の参照先変更
- インストール時に、ファイルを書き換え
- generator.ui の参照先変更
- インストール時に、warを展開して利用するように変更
- 展開したwarのuiで、ファイルを書き換え
- validator-badge の in-house module組み込み
- メリット
- forkで最新を追いかける対象が、最低限に抑えられる
- デメリット
- カスタマイズ方法が、場当たり的に増えそう
- 対応内容
-
【対応案2 - ビルド時に考慮】
- 対応内容
- validator-badge の in-house module組み込み ※対応案1と同じ
- ui の参照先変更
- forkしているリポジトリで、ファイルを書き換え
- generator.ui の参照先変更
- 新たにforkして、build時にダウンロード&組み込みするuiのリポジトリをforkしたものに変更
- メリット
- カスタマイズ方法が、swagger提供側が想定している方法っぽい。
- デメリット
- forkで最新を追いかける対象が、増える。
- 対応内容
-
【対応案3 - 折衷】
- 対応内容
- validator-badge の in-house module組み込み ※対応案1と同じ
- ui の参照先変更 ※対応案2と同じ
- generator.ui の参照先変更
- インストール時に、warを展開して利用するように変更
- 展開したwarのuiを、in-house ui に置き換え
- メリット
- forkで最新を追いかける対象が、最低限に抑えられる
- デメリット
- カスタマイズ方法が、ルール化できそう。
- 対応内容
対応詳細
-
in-house-swagger
moduleにvalidator.warを追加。
http://central.maven.org/maven2/io/swagger/swagger-validator/1.0.4/swagger-validator-1.0.4.war- war展開方式
- context pathは、/validator
-
ui
src/standalone/layout.jsx で
一番下に をrenderしている。- src/components/online-validator-badge.jsx
プロパティが未設定の場合、https://online.swagger.io/validator を設定しているっぽいので
<OnlineValidatorBadge validatorUrl='/validator' />
とかでいけそう。
- dist/index.html
77行目の初期表示URL指定をin-house版にしたいが、spec-mgrの登録状況次第でURLが変わる。
とりあえずspec-mgrのswagger.jsonを見せておく。
let defaultSpecMgrHostname = window.location.hostname let defaultSpecMgrPort = eval(window.location.port) + 1 let curSpecMgr = "http://" + defaultSpecMgrHostname + ":" + defaultSpecMgrPort url: curSpecMgr + '/api-docs'
- src/components/online-validator-badge.jsx
-
generatorのui
warを展開すると、直下がuiになっている。
カスタマイズされているのは index.htmlでの初期表示URLだけっぽい。
下記くらいの対応でいけそう。- まるっと in-house版ui で上書き or 差し替え
- index.html の初期表示URLを、 'http://localhost:${SERVER_PORT}/api/swagger.json' 指定に置換
ただ、localhost, 12.0.0.1だと、validatorが呼び出されないっぽいですf(^_^;
-
editorのui
組み込み版で swagger-uiを利用している。
validator-badgeは使われないので、対応なしでOK。
- Done
- in-house-swagger
- validatorをmoduleに組み込む
- bin/installでgenerator.warを展開
- swagger-ui
- validatorの呼び出し先を、組み込んだvalidatorに切り替える
- 初期表示するspecを、spec-mgrのswagger.yamlに変更
- in-house-swagger
- ToDo
- in-house-swagger
- bin/installで、generator.warのuiを、in-house版に差し替える
- 差し替えたindex.htmlの、初期表示するspecを、'http://localhost:${SERVER_PORT}/api/swagger.json' に変更
- in-house-swagger
対応完了