in-house swagger-tools
in-house-swagger / in-house-swagger Goto Github PK
View Code? Open in Web Editor NEWin-house swagger-tools server
Home Page: https://in-house-swagger.github.io/in-house-swagger/index.html
License: Apache License 2.0
in-house swagger-tools server
Home Page: https://in-house-swagger.github.io/in-house-swagger/index.html
License: Apache License 2.0
利用者 として
ブランチ戦略に従ってSpecを更新するために、
editorからブランチを管理できる。
gitを利用する場合、git flowやgithub flow などのブランチ戦略で運用するのが定石なので
画面からブランチを操作できるようにしたい。
利用者 として
チームで開発するために、
editorからコミットユーザを管理できる。
チームで開発する場合、誰がSpecを更新したのか把握したいので
画面からコミットユーザを操作できるようにしたい。
利用者 として
Spec管理で発生したエラーを把握するために、
操作と紐付けたメッセージを確認できる。
現状の spec-mgrから返されたエラーメッセージは
spec-mgrとしての操作に紐付いたメッセージになっている。
※重複した specId を POST すると「すでにディレクトリが存在する」など
このまま、画面に表示しても利用者としてはわからないので
「すでにSpecが存在する」などにマッピングしたい。
{
payload: {}
_errors: {
empty: false
list: [
{
propertyKey: Specification
code: dir.alreadyExist
message: ディレクトリが既に存在します。対象ディレクトリ:...
]
}
}
マニュアルのinstallコマンドをコピー&ペーストで実行しても、ダウンロードできない。
0.5.1
macOS HighSierra
$ curl \
> --request GET \
> --url "${download_url}" \
> --output "${archive_name}"
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0
$ ls -l
--location オプションが必要な様子。
$ curl \
> --verbose \
> --request GET \
> --location \
> --url "${download_url}" \
> --output "${archive_name}"
Note: Unnecessary use of -X or --request, GET is already inferred.
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 108.168.243.150...
* TCP_NODELAY set
* Connected to dl.bintray.com (108.168.243.150) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
* CAfile: /etc/ssl/cert.pem
CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* TLSv1.2 (IN), TLS handshake, Server hello (2):
{ [106 bytes data]
* NPN, negotiated HTTP1.1
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* TLSv1.2 (IN), TLS handshake, Certificate (11):
{ [3591 bytes data]
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
{ [333 bytes data]
* TLSv1.2 (IN), TLS handshake, Server finished (14):
{ [4 bytes data]
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
} [70 bytes data]
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
} [1 bytes data]
* TLSv1.2 (OUT), TLS handshake, Unknown (67):
} [36 bytes data]
* TLSv1.2 (OUT), TLS handshake, Finished (20):
} [16 bytes data]
* TLSv1.2 (IN), TLS change cipher, Client hello (1):
{ [1 bytes data]
* TLSv1.2 (IN), TLS handshake, Finished (20):
{ [16 bytes data]
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* ALPN, server did not agree to a protocol
* Server certificate:
* subject: CN=*.bintray.com
* start date: Nov 9 00:00:00 2017 GMT
* expire date: Nov 9 23:59:59 2019 GMT
* subjectAltName: host "dl.bintray.com" matched cert's "*.bintray.com"
* issuer: C=US; O=GeoTrust Inc.; OU=Domain Validated SSL; CN=GeoTrust DV SSL CA - G3
* SSL certificate verify ok.
> GET /in-house-swagger/in-house-swagger/in-house-swagger-0.5.1.tar.gz HTTP/1.1
> Host: dl.bintray.com
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: nginx
< Date: Tue, 10 Apr 2018 00:27:09 GMT
< Content-Type: application/gzip
< Content-Length: 30183
< Connection: keep-alive
< Content-Disposition: attachment; filename="in-house-swagger-0.5.1.tar.gz"
< Last-Modified: Mon, 09 Apr 2018 00:53:47 GMT
< Cache-Control: max-age=30, must-revalidate
< Accept-Ranges: none
< ETag: e1c3c06c8440839daa3b0af5a5c8c831951505b406f8a098c131007eb3fc7c46
< X-Checksum-Sha1: c25ce2a660138aed96c8943ab8f849227c21beb5
< X-Checksum-Sha2: e1c3c06c8440839daa3b0af5a5c8c831951505b406f8a098c131007eb3fc7c46
<
{ [850 bytes data]
100 30183 100 30183 0 0 20251 0 0:00:01 0:00:01 --:--:-- 20257
* Connection #0 to host dl.bintray.com left intact
$ ls -l
total 163936
-rw-r--r-- 1 OWNER GROUP 30183 2018-04-10 09:27:09 in-house-swagger-0.5.1.tar.gz
利用者 として
便利な機能を利用 するために、
swagger-editor, ui でreleaseされた最新のバージョンを利用 できる。
OAS3 が公開された。
公開直後に確認したところ、code-genがOAS3に対応していなかったが
editor, uiはすでに対応済みの様子。
editorの対応内容だけ見ても、オートコンプリートなど便利そうな機能が入っていたので
OAS2の定義で動くか確認して、可能であれば取り込みたい。
※Generatorは、別対応もあるので次のイテレーションで対応。
in-house-swaggerでAPIを公開する利用者 として
公開したAPIの利用者に、client sourceを生成してもらうために、
editorから、languageごとのoptionを指定 できる。
generatorのAPIで /api/server/{lang} or /api/client/{lang} のGETで
langが対応しているOPTIONが返ってくる。
本格的に実現するならswagger hubに倣って
option指定しないと、デフォルト値で生成されてしまうので
editorからの生成を利用するなら、option指定は必須。
どこまでやるか。。。
まずは「指定できる状況」を用意しておきたい。
popupを追加
生成リクエスト時
利用者 として
定義を管理 するために、
editorから定義を追加、更新、削除、指定した定義を開くことが できる。
spec-mgrを取り込んだが、連携は editor の importURLのみ。
追加時は、editorで編集後、spec-mgr/ui に定義内容を貼り付けてPOST。
更新時は、editorで編集後、spec-mgr/ui に定義内容を貼り付けてPUT。
削除時は、spec-mgr/ui でDELETE。
操作がわかりにくい。
開発者 として
ドキュメント精度の向上を するために、
ツールによる自動チェックが できる。
redpen+travis ciを導入する
利用者 として
最新のOAS使用を利用 するために、
OAS2 / 3 を使い分けできる。
OAS3 がリリースされたが、codegenが正式対応されていない。
codegenが正式リリースされ次第で、対応を載せたい。
利用者 として
Docker経由でサービス利用 するために、
サイズの小さいdockerイメージを生成 できる。
・debianベースのopenjdkイメージは、in-house-swaggerに
必要ないパッケージも含まれているため、イメージサイズが大きい。
alpine linuxベースとすることで、イメージサイズ縮小をはかる。
・VERSIONファイルよりタグを設定する
利用者 として
細い回線で利用を開始 するために、
install時のアーカイブダウンロードをresume/retry できる。
細い回線でinstallを実行すると、容量の大きなアーカイブのダウンロードがエラー終了することがある。
途中までダウンロードした結果から、続きをダウンロードできるようにしたい。
中断しているので、正しくダウンロードできたか後で確認する仕組みも必要。
--continue-at
オプションを付ける。利用者 として
起動時のトラブルを回避 するために、
デフォルトの起動ポート9700,9701で起動 できる。
ポート8080,10000 等の場合、一般的な他サービスとポートが競合し、起動できない可能性がある。
ポートはまとめを見てみた感じだと 9700 とかが手頃ですかね。
複数台立てる時に、連番使いたいとかはあると思うので、きりの良いところでf(^_^;
https://ja.wikipedia.org/wiki/TCP%E3%82%84UDP%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%9D%E3%83%BC%E3%83%88%E7%95%AA%E5%8F%B7%E3%81%AE%E4%B8%80%E8%A6%A7
利用者 として
Docker経由でサービス利用 するために、
dockerイメージを生成 できる。
swagger uiなどでは、DockerFileを用意しており、利用者がdockerイメージを生成できるようにしている。in-house-swaggerでも同様に、DockerFile+起動用シェルの仕掛けを用意する。
dockerを利用するメリットとしては、同サーバ上でjavaなどのバージョン競合等考慮不要となる
利用者 として
他システムから接続 するために、
バインドするホストを設定 できる。
複数IPを持っているマシン上で動かす場合など、明示的にバインドホストを指定したいことがありそう。
jettyの場合、jetty.http.host=指定なし だと、127.0.0.1, localhost, 自IP にアクセスできる
が
spring bootの場合、server.address=空文字 だと、127.0.0.1, localhostはOKだが、自IPはNG
application.ymlで server.addressの定義自体を付け外ししないといけないかも。。。
利用者 として
ステークホルダーにドキュメントを提供 するために、
OASをadocに変換 できる。
swagger-uiで提供するのは、server側のテストorスタブ環境がセットなので
ステークホルダー向けには、静的なドキュメントの提供が必要。
asciidoctorを利用すればadocから、html, epub, pdfなどにも変換できる。
ドキュメントの形式は利用者の状況に合わせて選択できるようにしたいが
yaml, jsonのままでは、変換に必ず一手間必要なので、adocまでの変換は、機能に含めておきたい。
利用者 として
概要、利用方法を把握 するために、
webでドキュメントを参照 できる。
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
開発者 として
作業を軽減 するために、
リリース時の作業を自動実行 できる。
現状の手順は下記。抜け漏れが発生しそうなので自動化しておきたい。
配布アーカイブをGitHubで公開しているが、容量に1GBあたりの制限があったと思うので、bintrayに移しておきたい。
利用者 として
swagger.yamlをバージョン管理 するために、
swagger-spec-mgrを利用 できる。
swagger-editor で編集したswagger.yamlは、browserのlocalstorageに保存されるだけ
importする機能はあるが、swagger.yamlをどこで管理するかは任意なので
デフォルトの管理場所を用意する。
swagger.yamlは本格的に利用すると、大きなファイルになってしまう。
定義内容を構造体ごとに分割して、git管理したい。
local repository のみ、remoteあり(github/gitlabなど)は設定で切り替えたい。
開発者向けに管理しやすいようにorganizationにリポジトリを移転した。
各moduleの配布アーカイブのダウンロードURLも変更されたので、合わせて変更する。
利用者 として
利用開始時に何をしているのかを把握 するために、
シンプルな手順で設定 できる。
ドキュメントを用意しようとしたが、意図がわかりにくい手順が必要なので
シンプルになるように整理したい。
spec-mgr起動ポート
spec-mgr側はin-house-swagger +1
editorがデフォルトでつなぐ先が渡せないので。
spec-mgr
editor
接続先spec-mgrのデフォルトを
自IP:自ポート + 1 に変更
let defaultSpecMgrHostname = window.location.hostname
let defaultSpecMgrPort = eval(window.location.port) + 1
curSpecMgr: "http://" +
defaultSpecMgrHostname + ":" +
defaultSpecMgrPort
SPECMGR_PORT=$((${SERVER_PORT} + 1))
Jettyインストール
jettyのインストール時に
jetty/etc/jetty.conf に console-capture.xml の指定を追加
※これをやっておかないとwebappのログが出ない。。。
generatorをwar展開インストールに変更
ログレベルの変更など設定変更できるようにしておきたい。
bin/server start
インストール手順
spec-mgrのインストール時にデフォルトユーザを作成しているが
git remote repoを利用する場合は、削除 & 再作成が必要。
※git remote repoありの場合、意味の分からない手順。。。
install
server control
generate
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.