Thursday, September 15, 2011

Cameleon : HTTPスタブ フレームワーク

Rubyで書かれたHTTPのダミー/モックサーバーを手軽に作るためのツール、Cameleonをリリースしました。

仕事でよくHTTPの外部システムを使うアプリを作ることがあるのですが、Cameleonはその外部システムのモックを簡単に作るために開発しました。何度か実際の開発案件で利用しています。

使い方はRuby on Railsの感じを参考にしています。

特徴

  • 基本はレスポンスのファイルをフォルダに配置するだけ
  • "_switch.rb"というシンプルなRubyのDSLでレスポンス用のファイルを選択
  • RESTfulなサービスのモックも簡単に作成できる(HTTPメソッドサポート)

インストール

Rubygemsで一発インストール

$ gem install cameleon
インストールできるとcameleonコマンドが使えるようになります。

Getting started

まずは、cameleonのプロジェクトをnewコマンドで作ります。

$ cameleon new your_project_name
できたディレクトリに移動してserverコマンドを実行するとデフォルトでポート9292でサーバーが起動します。
$ cd your_project_name
$ cameleon server
別のターミナルを立ち上げて、curlでテストしてみましょう。
$ curl http://localhost:9292
Hey, I am cameleon!
Edit response folder to change response whatever you want.
see README.md more detail.
はい、とりあえず動いていることは確認できました。

使い方

たとえば次のようなインターフェイスを作成することを考えます。

  • URLのパスが/path/to/interface
  • レスポンスは単純に"ok"
この場合、cameleonではresponse/path/to/interfaceディレクトリを作成し、その中にokと書いたファイルをdefault.txtとして保存すればOKです。
$ mkdir -p response/path/to/interface
$ cd response/path/to/interface
$ echo "ok" > default.txt
curlでテストしてみましょう。
$ curl http://localhost:9292/path/to/interface
ok
同様のことはgenerateコマンドを使うとより簡単です。ここでは/path/to/fooに新しいインターフェイスを作ってみます。
$ cameleon generate path/to/foo
こちらもテスト。
$ curl http://localhost:9292/path/to/foo
edit me: response/path/to/foo/default
作成できてますね。レスポンスは必要な内容に書き換えて下さい。

_switch.rb

普通アプリ開発で利用するのであれば、モックとはいえ、レスポンスをリクエストに応じて変化させる必要があるでしょう。そのときはフォルダ内に"_switch.rb"というファイルを作成し、その中でどのレスポンスファイルをレンダリングするかを選択します。

_switch.rbはRubyで自由に記述できます。レスポンスの内容を切り替えるためには、renderメソッドでレスポンスファイルを選択します。renderメソッドが呼ばれると、そこで_switch.rbからはすぐに抜け、以降の処理は継続しません。逆に、最後までrenderメソッドが呼ばれなかった場合は、defaultで始まるファイルをレンダリングします。また、_switch.rbではparamsにリクエストパラメータが格納されているので、これを使ってレスポンスを選択するといいでしょう。

_switch.rbのサンプルです。

# you can access URL parameters by 'params'
case params[:key]
when "foo"
  # curl http://localhost:9292/gallery/params?key=foo
  render "foo.txt"
when "bar"
  # You can also use POST or PUT. See 'rest' more about hadling HTTP methods.
  # curl -XPOST http://localhost:9292/gallery/params -d"key=bar"
  render "bar.txt"
end

# if else, render "default" (any extention acceptable) file.

Gallery

galleryコマンドで、response/galleryディレクトリにサンプルが出力されます。最初は_switch.rbで使えるAPIなどの参考になるとおもいますので利用して下さい。

$ cd YOUR_CAMELEON_HOME
$ cameleon gallery

私はけっこう便利に使えているので、ぜひ利用してみて下さい。