2009-07-22 7 views
1

BISDMの変更バージョンに基づいて、いくつかのデータベースエンティティのRESTfulサービスを作成しています。これらの事業体のいくつかは、下記に示されるようにルックアップテーブルを、関連付けられている:RESTfulサービスを実装する際に、ルックアップ値/テーブルが独自のURIを取得する必要がありますか?

Snippet of modified BISDM schema

ルックアップテーブルは、唯一のテーブルに関連付けられています。さらに、ルックアップテーブルは、関連するエンティティテーブルの編集可能なフィールドのドロップダウンリスト、ツリービュー、およびコンボボックスに挿入するために、クライアントアプリケーションによって使用されます。

ルックアップ値/テーブルは、独自のURIを取得するか、関連付けられている親と「共有する」べきですか?それぞれの長所と短所は何ですか?

Option 1: 
    /Entities/Spaces/SpaceCategories/ 
Option 2: 
    /Lookups/SpaceCategories/ 

答えて

1

RESTfulシステムでは、URLの構成方法は、識別するリソースや与えた名前ほど重要ではありません。

  • スペース
  • SpaceCategory
  • 検索

あなたがこれらのリソースに与えるURIは、主に以下のとおりです。あなたは3つのリソースを持っているようにあなたが示してきたものから、

は、それが見えます味の問題。

http://example.com/ {ハッシュ}

例えばレールなどのいくつかのフレームワーク、たとえば、RESTに何もすべてのリソースは関係なく、そのタイプの、ハッシュコードが割り当てられ介してアクセスされるURI方式を定義できなくありませんURI内のリソースの名前を使用してネストされたリソースURI階層を作成すると便利です。しかし、これはあなたのアプリケーションが従うことができるかどうかの慣例に過ぎません。

RESTはいくつかの制約を定義していますが、最も難しいのはアプリケーションがhypertext-drivenであることです。この制約の利点の1つは、ルーズカップルをあなたのアプリとそのクライアントの間で促進することです。

クライアントがURIを通じてリソースを要求するとき、契約の一部は、クライアントがリソース表現で提供されたリンクに基づいて別のURIを選択できるということです。これは、ブラウザを使用してWebページのリンクをたどるのとは異なります。

これは、URIテンプレートが公開され、クライアントコードにハードワイヤード接続されるRPCスタイルのアプローチとは対照的です。

将来的にネストされたURIがフラットなURIよりも優れていると判断した場合は、URIスキームを変更することができ、クライアントコードが破られることはありません。リソースを完全に異なるドメインに移動したり、プロトコルをHTTPからHTTPS、またはFTPに変更することもできます。あなたのURIテンプレートは公開されていないので、クライアントコードはそれらに対して書かれていてはなりません。

代わりに、アプリケーションは単に新しいリンクの提供を開始し、クライアントはそれに続いて起動します。

私が最初にそれにさらされた(そしてまだ自分のやり方を感じている)とき、私はこの心の麻痺した抽象のすべてを見つけました。概念を説明する例はあまり多くありませんが、1つはSun Cloud APIです。

1

URIは、判読不能、urlsafe、エンコードされたバイナリである可能性があります。あなたがそれらをどのように構築するかは関係ありません。これはRESTとは関係ありません。

+0

+ REST!=読み取り可能なURI(考えられる読みやすいURIは便利ですが、RESTの要件ではありません) –

0

私はURLの建設は(限り、彼らはリソースを一意に識別される)RESTとは何の関係もないことをWahnfriedenに同意する一方で、RESTfulなインターフェースの暗黙の目標の一つは、人間のわかりやすさのようです。したがって、少なくともデータにアクセスする方法の感覚を与えるURLを持つことは理にかなっています。

あなたのデータはどのようにアクセスされていますか?ルックアップテーブルは複数の "親"テーブル間で共有されていますか?それはあなたの2番目のアプローチを示しています。彼らは単一の親に固有ですか?それは最初のことを示します。

しかし、なぜ最初にルックアップテーブルを公開しているのかという疑問があります。クライアント側の検証であれば、2番目のアプローチは、 "ヘルパー"データを "実際の"データから分割するので、理にかなっています(おそらく、親との関係を示すURLを与えます)。

一方、クライアントがルックアップテーブルを使用してルックアップ自体を行うことを期待している場合は、そうしないでください。ええ、データを正規化しておくといいですが、(1)ルックアップが既に入力されているデータを返すとより使いやすくなります。(2)そうでなければ、サーバー上のトラフィックを増やします。

+0

ルックアップテーブルは単一の親テーブルに固有のものです。さらに、クライアントアプリケーションは、ユーザが制限されたフィールド(上記のスペースカテゴリなど)の値を更新するときに、ルックアップを使用してドロップダウンリスト、コンボボックスなどを設定します。 –

+0

私はおそらく、/ Lookups/Spaces/SpaceCategoriesと一緒に行くでしょう。結局、彼らは別々のエンティティです。 – kdgregory

+0

もしあれば、それはHTTPの "暗黙の"目標です。 – aehlke

関連する問題