2010-11-28 5 views
0

私はシンプルなREST APIを開発しています:作成のための検索のユニークな属性によってリソース

  • JSON
  • ほとんどCRUDのような操作を
  • POST、更新

のための各リソースをPUTは、固有のデータベースハンドル(実際には自動インクリメント)によって識別されます。これは、次のようにURIを通じて公開されます。

/collection/131 

コレクションの表現は、このように、子リソースのリストです:

{ 
    "children": [ 
    { "name": "foo", "href": "/collection/131" } 
    ] 
} 

「名前」フィールドには、コレクション全体で一意である必要があります。

私は1つのことを除いてこのパターンに非常に満足しています。与えられた名前のリソースを検索して、コレクション表現を反復処理します。

"URIに名前解決"メカニズムを追加するにはどうすればよいでしょうか?それでもRESTには真実がありますか?私は、次のオプションを参照してください。

  1. はURI
  2. に名前を入れて検索可能なコレクションを作る
  3. リダイレクトまたは検索メカニズム

私はしたくない理由のいくつかの種類( 1)は、URIアドレス空間がAPIの一部ではなく、実装の詳細であることです。既知の唯一のリソースは、他のすべてのリソースを見つけることができるルートリソースです。

APIユーザーが名前をURIに解決する方法を簡単にするにはどうすればよいですか?

答えて

1

これはRESTの問題の1つです。一般的な操作をサポートするためのHTTPメソッドはほとんどありません。

一部がこれを主張することは、これを行うための適切なRESTの方法ではありませんが、私はあなたがそれを行うことができるか他に見ることができません。

/collection/findByName?name=...

編集:あなたはまた、より一般的なのために選ぶことができあまりにもこの方法では、あなたは最終的に拡張することができ:

/collection/search?name=...

/collection/search?name=...&something=...

編集(2):何について:/collection?name=...

私は最終的にあなたがより直感的であると思うものに沸きます。

  • クリスチャン
+0

ご提案について "unrestful" は何もありません。個人的には、私はそれを簡単に保ち、 '/ collection?name = 'blah''結果の表現は、name =' blah 'のリソースへのリンクのリストになります。 –

+0

@Darrel:または名前が一意であるため、結果の表現は適切な標準リソースへのリダイレクトになります。 @jrydberg:あなたのメディアタイプについてhttp://www.aminus.org/rbre/shoji/shoji-draft-02.txtを見てください。あなたのように検索URL(「カタログ」)を公開するための優れたサポートがあります。 – fumanchu

+0

@fumanchuコレクションに単一の結果しか含まれていない場合、リダイレクトするのは興味深い考えです。 –