« 薔薇のない花屋 第8話 | メイン | この会社には居たくないとプログラマが思うとき »

Topコンピューター > Railsで、WebAPIを作ってみた
2008年03月04日

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で出す方法がなかなかわからなくて苦労した。とりあえず、以下参考にしたサイトです。

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アプリを構築して公開する予定です。

人気ブログランキング ←押すと一票入ります。

関連エントリー

つまらん日記内の関連するエントリー:2件

トラックバックURL

このエントリーのトラックバックURL:

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • エントリーとあまりにも無関係な記事のトラックバック、または管理人が不適切と判断した場合は、削除させていただきます。
コメントする
  • 電子メールアドレスは必須ですが、表示されません
  • コメント蘭内でタグが使えます。
  • コメント欄内の改行はそのまま改行となります
  • コメント欄には、少なくとも1文字以上の日本語全角文字を入力してください

(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)