質問
私のデザインは2種類のリソースを公開します:
- 画像
- タグ
クライアントがタグでランダム画像をリクエストできるようにしたい。例:「New York」というタグが付いたランダムな画像をください。および「冬」。この場合、RESTfulデザインはどのようになりますか?
解決
コメント内のすべての議論を要約し、最初の提案を変更しないために、これが最終的に思いついたものです。
タグを介して画像にアクセスしたい。各タグは一連の画像に関連しています。特定のタグは別のタグよりも多く使用される可能性があるため(たとえば、ニューヨークの写真はシカゴの写真よりもはるかに多く使用されます)、キャッシュを許可するRESTful構成を使用して、ニューヨークの写真をキャッシュできます。私見、解決策は次のとおりです。
-
各画像には固定URIがあります:
http://www.example.com/images/12345
-
各タグにはURIもあります:
http://www.example.com/tags/New_York/random
このURIは、セット上の画像のランダムディスパッチャーとして機能します。 303 See Other 応答を返し、リダイレクトしますセットのランダム画像。 定義により、このURIはキャッシュしないでください。修正されたものはそうすべきであり、ブラウザは2番目のリソースへのリダイレクトが永続的であることを理解してはならないので、最適です。
-
次の方法でセット全体にアクセスすることもできます:
http://www.example.com/tags/New_York
このアクセスにより、 300の複数選択応答;セット全体を(画像としてではなくURIとして)ブラウザに返し、ブラウザはそれをどう処理するかを決定します。
-
さまざまなタグの共通部分を使用することもできます:
http://www.example.com/tags/New_York/Autumn/Manhattan/random http://www.example.com/tags/Autumn/Manhattan/New_York/random (equivalent to the previous one) http://www.example.com/tags/New_York/girls/Summer/random etc.
つまり、各画像の固定URI、各タグとそれに関連する一連の写真の固定URI、および各タグが持つランダムディスパッチャの固定URIがあります。他の潜在的なソリューションとしてGETパラメーターを使用する必要がないため、これは可能な限りRESTfulです。
他のヒント
この問題に苦労しました。最終的に実装したのは、次のようなHttpResponseRedirectでした。
http://www.example.com/randomNewYorkImage
ランダムなニューヨークの画像へ:
http://www.example.com/images/New_York/1234 。
最初のリソースは、ランダムなニューヨーク画像ディスパッチャとして考えられます。このソリューションは、2つのリソースが要求されるため、より多くのサーバーをロードしますが、取得できる限りRESTfulです。
編集済み:さらに、キャッシュしている場合、各画像はキャッシュにあり、サーバーは画像の送信からリダイレクトのみの送信に移行します。キャッシュは2番目の要求をインターセプトするため、サーバーの負荷が軽減されます。
多次元リソースの識別は困難です。
リソースは画像であるため、これがURIです。さらに、特定の画像には、決して変化しない特定のURIがあります。
「タグ別」"リソースの非識別属性です。このために、クエリ文字列をbelpにすることができます。
ここに私の最初の考えがあります。
-
http://www.example.com/MyStuff/image/
id/
-idによる特定の画像 -
http://www.example.com/MyStuff/image/?tag=
tagname -指定されたタグを持つ暗黙的なイメージ、count = 1
。 -
http://www.example.com/MyStuff/image/?tag=
tagname& count = all
-allランダムな順序でタグが指定された画像(count = 1
がデフォルトです。これにより、任意の画像が得られます)
http://foo.com/image/tagged/sometag/random
のようなことをして、その上で睡眠を失うのをやめます。
これについては、トリプティクに同意します。 URIの末尾にランダムに追加すると、操作のように感じられますが、タグにスコープが設定されている場合は、実際にコンテキストを洗練するだけです。
彼の例:
/ image / tagged / sometag / random
画像リソース->タグ付け範囲(タグ付きのすべての画像)->特定のタグ(タグXのすべての画像)->ランダム(タグXの画像のスコープリストからのリソース)