OutSystems Platformで作ったREST APIにはデフォルトでswaggerドキュメントが生成されることを前の記事で確認しました。
OutSystemsのREST API作成機能(3) APIドキュメント(自動作成)
swaggerにはcodegenという機能でドキュメント定義からクライアントコードを生成してくれる機能があるので試してみました。
考えてみるとSEはREST APIの取り扱いに慣れている人ばかりとは限らないので、仕様書だけではイメージが付きにくいかもしれない。
ある程度使えるコードができるとシステム間インターフェースで問題が起きにくくなりますが……。
公式情報(github)
http://swagger.io/swagger-codegen/
前提ソフト
- Java(JREでなくJDKのほう)
- Maven
- Git(これはなくてもZIPでダウンロードすればよい)
コマンドプロンプトから環境確認するとこんな感じ。
Path以外にも、JAVA_HOME環境変数も設定する必要がある。
java -version
-java version “1.8.0_91”
-Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
-Java HotSpot(TM) Client VM (build 25.91-b14, mixed mode)
mvn -version
-Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T01:41:47+09:00)
-Maven home: C:\maven\apache-maven-3.3.9\bin\..
-Java version: 1.8.0_91, vendor: Oracle Corporation
-Java home: C:\Program Files (x86)\Java\jre1.8.0_91
-Default locale: en_US, platform encoding: MS932
-OS name: “windows 10”, version: “10.0”, arch: “x86”, family: “dos”
クライアントコード生成確認
まず、作業用フォルダに移動して、githubからソースをダウンロードする。
git clone https://github.com/swagger-api/swagger-codegen
swagger-codegenフォルダができているのでcdで移動。
cd swagger-codegen
swagger-codegenをビルド。私の回線と環境では数分かかりました。
mvn clean package
OutSystemsで作ったREST APIのドキュメントJSONを直接渡してクライアントコードを作ってみます。
java -jar modules/swagger-codegen-cli/target/swagger-codegen-cli.jar generate -i https://OutSystemsクラウド環境のURL/アプリケーションパス/rest/Customers/swagger.json -l CsharpDotNet2 -o output\CsharpDotNet2_api_client
-iでswaggerファイルを指定していますOutSystemsで作ったなら、REST APIのURLのあとにswagger.jsonをつけたのになりました。私の例の場合は「OutSystemsクラウド環境のURL/アプリケーションパス/rest/Customers/swagger.json」。
出力先はoutputフォルダ。
-lパラメータでどの言語用のクライアントコードを作るか指定できます。他にも、Javaやjaxrsがパラメータとして使えることは確認しました。
上の例は、C#2.0用コード(Visual Studio用でなくMono用見たい)を作る場合。他に-l csharpでも行けるはずなんだけど、エラーをはいて止まってしまった。
数十行程度のサンプル実装が出るのかと思ったら、結構なボリューム(C#のほうで30KBくらい、Javaは100KB以上)出ちゃいました。
これだと逆に使い方に困りますね。このボリュームだとサンプル実装で渡すというよりそのまま使えるクラスとして渡す感じかな?
そうするとコードの確認もある程度しないといけませんね。
少なくともC#は、いまどき.NET2.0対象では使いづらい(Mono用だし)。ドキュメントもほぼないし。