DB2でさくさく実現するRESTfulなDBアプリ(3)
FirebugでRESTfulなDBアプリに挑戦!!
URIでCRUDを実現する
RESTにおけるURIはこれまでの 「controller/action/id」 の形式ではなく、controllerの後にIDを記述します(「controller/id」)。actionに相当する内容は、HTTP Methodで表現されます。
Railsではroutes.rb(C:\demo\config\ routes.rb)でルーティングの設定を行うと、すぐにRESTfulなURLを使用することができます。
コントローラに対して、RESTfulなルーティングを設定するには、routes.rbに「map.resources :コントローラ名」を追加するだけです(サンプル1)。
サンプル1 routes.rbActionController::Routing::Routes.draw do |map| map.resources :movies map.connect ':controller/:action/:id' map.connect ':controller/:action/:id.:format' end
コントローラには、基本的な7つのアクションが実装されており、RESTfulなURLで使用することができます(表1)。C:\demo\app\controllers\movies_controller.rb ファイルをエディタで開いて確認すると、7つのアクションが定義されていることが分かります)。
表1 Ruby on Railsで実装されているアクションの定義とURI| アクション | HTTP Method | URI | 説明 |
| index | GET | /movies | 一覧を表示 |
| show | GET | /movies/123 | 1件を表示 |
| new | GET | /movies/new | 新規作成するためのフォームを表示する |
| edit | GET | /movies/123/edit | 更新するためのフォームを表示する |
| create | POST | /movies | 新規作成 |
| update | PUT | /movies/123 | 更新 |
| destroy | DELETE | /movies/123 | 削除 |
現在のWebブラウザでは、PUTとDELETEメソッドに対応していません。そこで、実際にはPOSTメソッドが使われています。
実際にURIを入力して、動作を確認してみましょう。表1に記載したとおり、1件表示、更新、削除はすべて同じURIです。「http://localhost:3000/movies/ID番号」にアクセスすると、ID番号のデータの詳細が表示されます(図3)注。
ここで、Webサーバ起動時に使ったコマンド画面を見てみましょう(リスト4)。
リスト4 図3のURIにアクセスした際のWebサーバ側コンソールの状態127.0.0.1 - - [20/Nov/2008:10:00:00 東京 (標準時)] "GET /movies/126 HTTP/1.1" 200 1013 http://localhost:3000/movies -> /movies/126
図3で表示されている内容は確かにHTTPのGETメソッドを使用してアクセスされたことが確認できます。
では、同じURIを使用している更新や削除の場合はどうでしょうか。
削除の場合を例に見てみましょう。前述のようにブラウザはDELETEメソッドを送信できません。では、どのようにして1件表示、更新、削除を区別してアクセスしているのでしょうか。
Firebugを使用して、動きを見てみましょう。
Firebugの「調査」ボタンをクリックし、任意のデータの「Destroy」を選択すると、左下のウィンドウに「Destroy」でPOSTされる内容が確認できます(図4、リスト5)。
図4 Firebugによる調査の開始
リスト5 Firebug上の表示
m = document.createElement('input'); m.setAttribute('type', 'hidden');
m.setAttribute('name', '_method'); m.setAttribute('value', 'delete');POSTされる内容を見ると、リスト5のとおり、隠し入力でDELETEメソッドを送っていることが分かります。
また、削除を実行すると隠し項目を含んだリクエストがPOSTメソッドで送られたことが確認できます(リスト6)。
リスト6 Webサーバ側コンソールの状態127.0.0.1 - - [21/Nov/2008:10:01:00 東京 (標準時)] "POST /movies/126 HTTP/1.1" 302 94 http://localhost:3000/movies -> /movies/126
このようにRailsは隠し入力を使用して、PUTメソッドやDELETEメソッドを判断しているのです。
アプリケーションからの接続が簡単に
すべてのリソースに対し、URIでアクセス可能になると、アプリケーションからの接続が非常に簡単になります。場合によっては、データベースにアクセスするよりも、URIにアクセスした方が簡単にデータが取得できる、というケースも出てくるかもしれません。
コラムでは、Webクエリを使用して、Microsoft Excelから、リソースのデータを取得する方法を簡単に紹介します。
| 2/5 |
FirebugでRESTfulなDBアプリに挑戦!!
コラム2:Webクエリを使用して、Excelからリソースへアクセスする
・Jesterの準備
レイアウトファイルの編集|Webサーバの再起動|modelクラスの宣言
コラム3:JesterのJSONサポート
CRUDの実行2(Read)
CRUDの実行4(Delete)
| DB2でさくさく実現するRESTfulなDBアプリ |
TechTargetジャパン
- IBMが歴史を変える!? 新カテゴリの製品を発表 (2012/5/25)
IBMは新たな製品カテゴリとなる「PureSystems」を発表。DB2 10とビッグデータの関係、PureSytemsの斬新さはどこかに迫ります - クラウド時代のデータ処理を支える分散KVSの可能性 (2012/5/23)
現在、高速データ処理の主流はインメモリ型データ処理だが、別の方法として分散KVSが注目を集めている。今回は分散KVSについて話を聞いた - 複数の表からデータを取り出して表示させる(2) (2012/4/23)
前回はSQLの基本的な結合構文について説明しました。今回は、より複雑な自己結合や外部結合について説明します - SQL Server、OOWにIQ、盛りだくさんの4月 (2012/4/20)
オラクルオープンワールドが3年ぶりに東京で開催されたほか、SQL Server 2012が提供開始されるなど、今月は話題が盛りだくさんです
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -
