スポンサーサイト

一定期間更新がないため広告を表示しています

  • 2013.01.21 Monday
  • -
  • -
  • -
  • -
  • by スポンサードリンク

REST

同僚の若手プログラマがこんなことを言いました。

「RESTとか勉強します」

は?なにそれw

友達に「いまどきRESTfullじゃないとかありえない」とか言われたそうです

どれどれ・・・RESTてなんぞ・・・
yohei-y:weblog REST 入門が詳しかったです。このページはほんとおすすめです。逆にWikipedia も見たんですが、まったく理解できませんでした。「APIの考え方かもしれない」とは思いましたが、詳細はまったく不明。違う世界の言葉でしたw

軽く一言でいうと「ネットワーク分散システム、特に WWW のアーキテクチャスタイル」らしいです。まったくわからないですね。この業界、中身の伝わらない漠然とした言葉が多すぎです、ほんと。

一言でいうとどうでもいい知識すぎて困るんですけど、俺解釈でざっくり整理するとこういうことです。

■リソース

ポイント:
リソースを URI (一般的な言葉でいうと URL) で指定したらわかりやすいよ

例えば うーん・・・完全パクリで同じ例を避けると・・・ニュースでいいや。とあるニュースサイトがあるとします。そのサイトのとある記事のURLはこんなのだとします。

http://www.news.com/politics/2012/03

これは2012年03月の政治(politics)のニュースを見るページのURLです。
www.news.com → politics → 2012 → 03 と徐々に対象を絞っていくようなURLになっています。
政治じゃなくてスポーツのニュースがみたい!と思ったら次のようになります

http://www.news.com/sports/2012/03

politics だったところが sports になっています。

先月(2月)のニュースが見たいと思ったら次のようになります。

http://www.news.com/politics/2012/02

03 だったところが 02 になっているだけです。

さらに言えば

http://www.news.com/politics/2012/03/08 → 2012/03/08の政治ニュース
http://www.news.com/politics/2012/03?keyword=衆議院 → 2012/03の衆議院関連の政治ニュース
http://www.news.com/politics/shugiin/2012/03 → 政治以下に細かなカテゴライズがあるならこうなるかもしれません

わかりやすいでしょ?^^

と、まぁ、この仕組みで行くと使う側がURLを想像できるんです。これが一番のポイントらしい。システム側が用意したURL(リンク)をポチってするんじゃなくて、自分で書き換えてやることで欲しい情報を GET できます。受動的だったものが能動的になるそうです。

URLをペチペチ打ち込んで使う仕組みとか誰もつかわねーよ(´・ω・`)

■メソッド

ポイント:
HTTPリクエストには GET, POST, DELETE, PUT のメソッドが定義されているんだからこれを使おうよ。

メソッドを直訳すると動詞です。つまり何をしたいかです。

上のニュースサイトの例をそのまま使うと

GET http://www.news.com/politics → 政治ニュースを取得
POST http://www.news.com/politics → 政治ニュースを新規作成
PUT http://www.news.com/politics → 政治ニュースを更新
DELETE http://www.news.com/politics → 政治ニュースを削除

URL でリソースを指定して、メソッドで処理を指定すれば・・・

わかりやすいでしょ?^^

■ステートレス

セッションなんか必要ないよ。やり取りに必要な情報はすべてヘッダもしくはメッセージボディに入っているはずだよ。

これは理解できない。説明してほしい。

ヘッダだけですべての情報はやりとりできないし、見せなくない情報(例えば権限とか)までクライアントに送信しろってか?ありえない。ログイン情報とか送信とかアホですか?

■ツッコミ

これで完全に理解してるとは思えませんけど、概ね間違えてないと思います。

でもね、これツッコミどころ満載ですよ。実際にこれでWebアプリなんて作れません。外部に公開するためのサービスAPIがせいぜいです

リソースをURIで指定できる。ユーザから自由にアクションを起こせる。不要な情報をすっ飛ばして、欲しい情報を直接見れる。そこらの素人はそんなのできませんよ。書き換えられるとすら思ってないでしょう。それはいいとしよう。でも、ユーザがそのルールを把握してないと使えないし、推測でデタラメなURLでポチポチアクセスしてこられると Webアプリ側はたまらないんですよね。

それもまだゆるす。ブラウザから URL を直接入力してアクセスすると"絶対GET"なんですよね。他のメソッドなんて使えないじゃん。PUT や DELETE でリクエスト送信するフォームをつくればいいの?リソースを直接指定できるメリットないじゃん、それ。

それも、それはそれでいいとしよう。処理内容をリクエストメソッドで指定するのと対照となるこれまでの書き方(URI)はこんなのです。

http://www.news.com/politics?mode=create → ニュースを作成する
http://www.news.com/politics?mode=delete → ニュースを削除する

RESTの概念から言えば

「わざわざリクエストメソッドで処理要求を指定できるのに、わざわざパラメータで指定するとかどんだけまぬけなのwwww」

だそうですけど、じゃあ、これを仮にPHPで実装してみましょうか。

if ( $_GET['mode'] == 'create' ) {
// 作成処理
} elseif ( $_GET['mode'] == 'delete' ) {
// 削除処理
} else {
// エラー
}


となります。では、REST の考え方で実装してみましょうか。

if ( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
// 作成処理
} elseif ( $_SERVER['REQUEST_METHOD'] == 'DELETE' ) {
// 削除処理
} else {
// エラー
}


どうすか?何がちがうんすかw。理想は立派だけど、なにもかわってないじゃないですかwwww。これは Java(Servletでも JSPでも)で作っても、ASPで作っても一緒ですよwww。URL での処理の明示がなくなった分、わかりにくいだけなんですけど

わかりにくくなっただけなら実用度は皆無です。この考えで処理を作りたいなら、httpd がリクエストメソッドに応じたリソース(プログラム)にアクセスを割り振ってくれる機能がないと話になりません。そういうREST対応アプリケーションサーバソフトウェアを使えばいいの?どうせ中身は Apache ( + Tomcat [+ JBoss])じゃない。金払う価値ないよ。

フレームワークレベルで対応できるはずですが、どうなのかな、それって。フレームワーク自作しろって?REST対応フレームワークってあるの?フレームワークを固定すると対応しにくい案件ない?もしかして Apache のコンテントネゴシエーションにそういう機能がついてる?WebDAV が、リクエストメソッドに応じたリソース(プログラム)にアクセスを割り振ってくれる機能なの?そうだったらすいません。俺が無知でした。REST は全Webアプリに適応すべき概念かと思います。でもそれは現実的じゃないんだから、情報を提供(GET)するだけのAPIで検討してもいい程度ですね。

もっと書くと、「エラーメッセージを表記したHTMLをステータスコード 200 (OK) を返すのはだめ」だそうです。これも納得ではありますが・・・ブラウザ次第なんだよね・・・。エラー画面をエラーのコード(400とか)で返すとブラウザ独自のエラー画面出しちゃうブラウザがあるんだよね・・・IEとか、IEとか、IEとか。

俺からいわせていただくと「RESTfullなWebアプリとか連携用API以外にありえない」。同僚の友達がいうのは "なんちゃってREST" でしょうね。なんちゃってRESTについてはこちら→convivial-weblog。左記のページに書いてありますが、Yahoo!の用語集では「HTTPリクエストに対してXMLをレスポンスとして返す。」と書いてあるんですね。一般的な認識はこれなのかもしれません。まさに "なんちゃって"。





ということで、僕にとってはとるに足らない概念です。机上の空論などどうでもいいです。空論で終わらない部分 URI の作り方に関してくらいは学ぶべきですかね。パスが分かりやすいと開発するうえでわかりやすいですから。

フォローしておくと、概念は概ね賛同はできるんだよね・・・本当にまるごとこの概念で実装できるなら、これで実装すべきですよね。実装上めんどくさい、もしくは何も変わらないなら机上の空論など語る気にもなりません。できることなら「そんなことはない!」「バカかおまえは!」てツッコミをどこからでもいただきたい・・・

REST について追記すると、REST とは "Representational State Transfer" の略だそうです。HTTP プロトコル規格の主要著者の一人である Roy Fielding の論文の中で語られたものだそうです。なるほど。規格の制定者からみたら、なんでもかんでも GET, POST で片づけられてるのが気に入らなかったんだろうな・・・。「正しく使ってほしい」みたいな。プロトコルてほんとに深くまで練りこんで作られているんだなぁと思います、はい。

スポンサーサイト

  • 2013.01.21 Monday
  • -
  • 14:23
  • -
  • -
  • -
  • by スポンサードリンク

コメント
コメントする








   
この記事のトラックバックURL
トラックバック

calendar

S M T W T F S
     12
3456789
10111213141516
17181920212223
24252627282930
<< September 2017 >>

最近の記事

記事(カテゴリ別)

リンク

recent comment

recent trackback

  • 続 クロスドメインで使う XMLHttpRequest と CORS の話
    RougeBleu (07/31)

ブログ内検索

others