■Bastub ver1.0.2 Bastub(バスタブ)は、Eclipse/上で動作するWebAPI用のStubアプリケーションです。 HTTPリクエストのURLに該当する場所にあるエクセルファイルからデータを抽出して あたかも実際のリクエストが行われたかのようにJSONを返します。 本アプリケーションは以下のような場合に有効です。 ・テスト用スタブだとJSONが固定で試験にならない。 ・テスト用スタブの可変データをJSONで作るのが面倒。 ・試験環境にデータを投入したいが事情によりできない(させてもらえない)。 ・手順書やインストーラーの作成のために都合のいいデータを返させたい。 ■実行方法 以下の手順で起動します。 ◎Ecliseから起動の場合 1. リポジトリをclone、またはforEclipseをダウンロードして解凍します。 2. EclipseでJavaProjectを新規作成して下さい。 「デフォルトロケーションを使用」のチェックを外して、上記1で作成した場所を設定します。 あとは完了ボタンを押せばプロジェクト作成は完了です。 3. pom.xmlを選んで、右クリック→実行→Maven clean→Maven installの順に実行してください。 これでビルドが完了します。 4. BastubApplication.javaを右クリック→実行→Java Applicationを選択 5. 「*** BASTUB START ***」が表示されていたら起動完了です。 以下のURLを表示して画面の「取得ボタン」が動作すればOKです。 ※ポート番号=8086(application.properties初期値)の場合 http://localhost:8086/example/example1.html http://localhost:8086/example/example2.html http://localhost:8086/example/example3.html http://localhost:8086/example/example4.html ◎Tomcatから起動の場合 ※Tomcat7.0は以下の方法に対応していません。8.0以降をお使いください。 ※Tomcat単体で動くことが前提です。 1.Bastub-x.x.x_forTomcat.zipをダウンロードして下さい。 2.TOMCAT_HOME/conf/Catalina/localhost/.xmlというファイルを配置して 下記のようなコンテキストを記述してください。 (docBaseは、Bastubを解凍した場所です) 3.Tomcatを起動してください。 以下のURLを表示して画面の「取得ボタン」が動作すればOKです。 ※ポート番号=8080(Tomcatの初期値)の場合 http://localhost:8080/example/example1.html http://localhost:8080/example/example2.html http://localhost:8080/example/example3.html http://localhost:8080/example/example4.html 補足: Tomcat版のzipは実際の中身は.warなのですが、コンテキストパスを無しにする 方法がwarだとうまくいかないようなので、あえてwarとして提供していません。 ■データのつくり方 ・JSONファイル、エクセルファイルとも、HTTPリクエストのパスの階層 に一致する場所にファイルを作成してください。 例:http://localhost:8086/example/sports/baseball/team ↓ [pagedata_root]/example/sports/baseball/team.json [pagedata_root]/example/sports/baseball/team.xls (※pagedata_rootは、application.propertiesで変更できます) ・JSONファイル、エクセルファイルはリクエストごとに作成が必要です。 ・JSONファイル、エクセルファイルは、xxx_GET.json、xxx_POST.jsonのように書けば HTTPメソッドごとに応答を変えることができます。 ・エクセルデータは、[data]シートにデータ、[filter]シートに条件を定義します。 ・[data]シートは、1行目に列名、2行目以降に返すデータを書いてください。 ・[filter]シートは、HTTPのリクエストで渡される値から取り出すものを設定します。 #dataシート列 判定条件 要求パラメータ LEAGUE = league と書いた場合、HTTPのリクエストが ?league=J01だったとき、 dataシートの列名がLEAGUEの中から値がJ01のものを返します。 ・フィルターで絞り込んだ結果を、単一データで返すのか配列に展開されます。 単一/ExcelデータがJSONが配列の場合は条件に合うものすべて、配列でないときは合致するデータの先頭だけが返ります。 例:条件に league=J1 を指定してエクセルデータが12件に絞り込まれたとき [1]応答JSONが単独指定の場合 { "team_name": "${TEAM_NAME}" } ↓ { "team_name": "北海道コンサドーレ札幌" } [2]応答JSONが配列指定の場合 { "team_name": ["${TEAM_NAME}"] } ↓ { "team_name": ["北海道コンサドーレ札幌", "ベガルタ仙台", "鹿島アントラーズ", …, "大分トリニータ"] } ・[filter]シートの判定条件は、"="のみです。不等号(<,>)や否定(!=)などは、将来対応予定です。 ・[filter]シートの条件はANDです。複数書いた場合は、全条件が合うものだけが返ります。 ただし、HTTPリクエストで条件に該当するキー値を渡していない場合は、判定対象外としているため その場合は条件が合致していなくても対象に含まれます。 ・JSONは、返ってきて欲しい形式のデータ1つ分を記述してください。 [team.json] [ { "ID": "${TEAM_ID}", "リーグ": "${LEAGUE}", "チーム名": "${TEAM_NAME}", "マスコット": "${}", "本拠地": "${HOME}" } ] JSONのKey-ValueでいうところのValue側を"${エクセルの列名}"と書くと、エクセルの値が入ります。 JSONのKey値がエクセルの列名と同じとき、"${}"のように列名を省略できます。 ※"マスコット"は、エクセルの列名(1行目。セルD1)と同じため省略表記が可能。