Railsで、WebAPIを作ってみた
先日作った、Jリーグ予定表APIの続きで、クラブ情報と、スタジアム情報を取得するAPIを作成しようとおもったが、スクレイビングではどうも無理がある。自前でデータ持って出力させるしかなさそうという結論に達した。
で、たまたま、Flex関連のブログみてて「Rails 2.0とFlex 3 beta3でRESTfulなBookmarkアプリを作ろう」ってのがあって、サーバー部分をRuby on Railsで作っていた。しかも、さっくりとコードも書かずにRESTfulなWebAPIが出来る。これは、使えそうって事で、Ruby on Railsの勉強がてら、使ってみることにした。
手始めにクラブ情報を取得するAPIを作ってみます。
基本的な手順は、先のリンクの「Rails 2.0とFlex 3 beta3でRESTfulなBookmarkアプリを作ろう」と同じですが、今回はEclipseのプラグインを使って作業を進めました。プラグインの導入は以下を参考にしました。
まずは、Eclipse上で、Railsプロジェクトを作成します。それから、Rake taskビューで、db:createを実行。
続いて、generatorビューで、以下のようにscaffoldを作成します。
これで、コントローラーや、migrateが出来る。001_create_clubs.rbに、テーブル作成のコードが書かれているが、さらにここにインデックスを追加するコードを追加しておく(なくてもいいが、検索キーで使うんでインデックスを作っておく)。
ここで、Rake Tasksビューで、db:migrateを実行。
もう、ここまでで、コードとしてはほとんど出来上がっている。RESTfulなAPIとして使える状態。今回は、Jクラブ情報を出力するって事で、あらかじめDBにデータを入れておく事にした。マイグレーションでデータを初期登録する事にした。generatorビューで、以下のように、migrateを実行する。
出来上がった、002_init_table.rbの中にデータを挿入するコードを以下のような感じで書く。(こんかいは、全部書くと長いので冒頭部分だけ載せます。)
Rake Tasksビューでdb:migrateを実行すると。データが生成される。ここで、サーバーを起動して、ブラウザで、http://localhost:3000/clubsとか入力すると以下のように一覧が表示できる。
Railsはデフォルトでxmlでの出力が出来るんだが、やはりjson出力にも対応しておきたい。で、どうやってやるのかなぁと、しらべたらすぐに出来た。ただ、jsonpで出す方法がなかなかわからなくて苦労した。とりあえず、以下参考にしたサイトです。
- 優しいRailsの育て方(routes)
- Rails2.0のRouting(config/routes.rb)の記述方式についてのまとめ。
- Ruby on Rails データベースmigration入門1 (CodeZine編集部ブログ)
- [プログラミング] [Ruby] [メモ] Rails 2.0でJSONを出力する
jsonpで出力するにはコントローラー(今回の場合は、clubs_controller.rb)を以下のように記述します。一部を抜粋して掲載します。
これで、jsonpでの出力にも対応できてる。ためしに、ブラウザでhttp://localhost:3000/clubs.json?callback=funcとか入力すれば、jsonp形式でデータが帰ってくるはず。
さらに、idだけじゃなくてaliasを指定して出力できるようにしてみた。(aliasは略称。ジェフだったら、千葉で検索できる感じ。)。これも、コントローラーに以下のコードを追加で対応した。
でもって、routes.rbに以下のコードを追記しておく。
ブラウザで、http://localhost:3000/clubs/alias/%e5%8d%83%e8%91%89とか打つと、千葉のデータが表示できるはず。
まぁ、こんな感じで、書いてみればわりとサクッと出来るんだが、rubyはまったくの初心者だし、railsもチンプンカンプンで、エライ時間かかったよ・・・。まだ、ローカルでしか環境を構築してないんで、今度は、レンタルサーバー上に、railsアプリを構築して公開する予定です。

