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アプリ |
- Oracleライセンス「SE2」検証 CPUスレッド数制限はどんな仕組みで制御されるのか (2017/7/26)
データベース管理システムの運用でトラブルが発生したらどうするか。DBサポートスペシャリストが現場目線の解決Tipsをお届けします。今回は、Oracle SE2の「CPUスレッド数制限」がどんな仕組みで行われるのかを検証します - ドメイン参加後、SQL Serverが起動しなくなった (2017/7/24)
本連載では、「SQL Server」で発生するトラブルを「どんな方法で」「どのように」解決していくか、正しい対処のためのノウハウを紹介します。今回は、「ドメイン参加後にSQL Serverが起動しなくなった場合の対処方法」を解説します - さらに高度なSQL実行計画の取得」のために理解しておくべきこと (2017/7/21)
日本オラクルのデータベーススペシャリストが「DBAがすぐ実践できる即効テクニック」を紹介する本連載。今回は「より高度なSQL実行計画を取得するために、理解しておいてほしいこと」を解説します - データベースセキュリティが「各種ガイドライン」に記載され始めている事実 (2017/7/20)
本連載では、「データベースセキュリティに必要な対策」を学び、DBMSでの「具体的な実装方法」や「Tips」などを紹介していきます。今回は、「各種ガイドラインが示すコンプライアンス要件に、データベースのセキュリティはどのように記載されているのか」を解説します
|
|