ADO.NET Data Service:RESTfulな実装について

こんにちは、こだかです。

前回ADO.NET Data Serviceの話を書きましたが、あまりにも乱暴すぎたような気がしておりまして、もう少し細かくお話させてください。

今回は、
「1)RESTfulな実装」の中から、
「・HTTPのverbすなわちGET PUT POST DELETEのみのインターフェイス」
の部分に触れてみます。

従来SOAPでサービスを作成する場合、そのサービスの振舞いを名前として公開する形が多かったと思います。
もっと言うと、初めに動詞が着いたサービス名ですね。
Search○○、Update○○などと言った感じです。
これは自由度があっていいのですが、一方で多くの切り口でサービスが作られてしまい、混乱する可能性も捨てきれません。
RESTスタイルでは、これをリソース主体で考えます。
○○をSearchするのではなく、Searchした結果(のリソース)を取得する。と言った考え方になります。

さて、このリソースに存在する機能ですが、例えば、データベースのテーブルを考えて見ましょう。
データベースに対して、一般的に必要とされる機能はCRUDと言われています。
「作成(Create)」「読み出し(Read)」「更新(Update)」「削除(Delete)」の頭文字ですが、これは「INSERT」「SELECT」「UPDATE」「DELETE」が対応しますよね。

そして、同じようにRESTスタイルのリソースにもCRUDとして機能が定義できます。これがHTTPのGET PUT POST DELETEに当たる訳です。
順番を考慮するならば、POST(追加) GET(取得) PUT(更新) DELETE(削除)になります。
機能としてこれ以外のコマンドは使用しませんが、そうして特定された考え方が、結果として整理された設計や実装に繋がるのです。
SOAP:=振る舞い(ビヘイビア)ベース、RESTful:=リソースベースのサービスと言う事がここからも言える訳ですね。

ADO.NET Data Serviceでは、このリソースがEDMで定義されたビジネスエンティティにあたります。
これは、EDMとテーブルを1対1にすれば、まさにテーブルがリソースになり、RESTfulで言うところのCRUDは、そのままテーブルの「INSERT」「SELECT」「UPDATE」「DELETE」になります。
ぐるっと一周まわって帰ってきた気分ですw

リソース主体の具体例を書いておきましょう。
例えば、人と言うリソースから、男性を検索したいと思います。
ビヘイビアベースでは、SearchPerson(Male)のようなサービスの戻りとして、結果を受けるはずです。(やり方は色々ありますが)
リソース主体の場合、人集合の男性結果を直接もらうイメージです。どこにあるの?と思うかもしれません。
ですから、リソース主体の場合はすべてのリソース(検索結果もリソース)に指し示すためのアドレスがあるのです。
この例ならば、~~/Person/Maleと言ったアドレスに結果があることになります。
検索と言う行為(ビヘイビア)がベースになるのではなく、リソースベースであることがご理解頂けるでしょうか?

次回は上記のアドレスの話をメインにADO.NET Data Serviceに触れていきますね。

こだかたろう