2011-07-21 13 views
0

シンプルな状況:数千枚の写真があるサーバーがあります。私は、それぞれの写真にタグ(カテゴリ)を追加することができる安らかなビジネス層を作りたいと思っています。それは簡単です。私はまた、単一のタグに一致する画像のリストを取得したい。それも簡単です。しかし、今では、タグのリストを受け取り、これらのタグすべてに一致するピクチャのみを返すメソッドを作成したいと考えています。それはもう少し複雑ですが、私はまだそれを行うことができます。
これは問題です。私は、次の呼び出しを行うことができるようにしたい、私の残りのサービスはpictures.example.comである、と言う:ネストされたRESTルーティング

  • pictures.example.com/Image/{IDを} - 特定の画像
  • を返す必要がありますpictures.example.com/Images - イメージIDのリストを返す必要があります。
  • pictures.example.com/Images/{TAG} - このタグを持つ画像IDのリストを返す必要があります。
  • pictures.example.com/Images/{TAG}/{TAG} - これらのタグを使用して画像IDのリストを返す必要があります。
  • pictures.example.com/Images/{TAG}/{TAG}/{TAG} - これらのタグを使用して画像IDのリストを返す必要があります。
  • pictures.example.com/Images/{TAG}/{TAG}/{TAG}/{TAG}/{TAG} - これらのタグを使用して画像IDのリストを返す必要があります。
  • エトセトラ...

だから、どのように私はこのような巣タグに私を許可し、まだそれらすべてを読むことができるようになりますRESTfulなWebサービスのプロジェクトを設定するのですか?タグの数に制限はありませんが、URLの長さは制限になります。 1つの選択肢に最大30個のタグを入れたいと思うかもしれませんし、30個の異なるルーティング機能を設定して動作させたくありません。私は技術的に無制限のタグを許可することができる1つのルーティングのものをしたい。

はい、このようなリストを前後に送信する他の方法がある可能性があります。さらに良いことですが、これが可能かどうかを知りたいのです。それは簡単に作成できます。したがって、URLは上記の例と異なることはできません。
シンプルでなければならないと思います。良い解決方法を考え出すことができません...

答えて

1

あなたが選んだURL構造は、Webフレームワークで実装しやすいものをベースにしてください。

http://pictures.example.com/images?tags=tag1,tag2,tag3,tag4 

サーバー上で処理するためにはるかに容易になるだろう、と私はあなたがに問題があるパスセグメントのアプローチにも利点を見ることができない:私はのようなものを期待します。

+0

技術的には、これは私が念頭に置いている別の解決策です。しかし、このプロジェクトは実験のためのものなので、実際には難しい方法です。 :-)可能であれば、とにかく... –

1

複数のタグでフィルタリングするSQLまたはファイルシステムクエリを実際に作成する方法を理解できると思います。 *tags引数は、クライアントが送信するすべての/{TAG}パスセグメントのタプルである

class Images: 
    @cherrypy.tools.json_out() 
    def index(self): 
     return [cherrypy.url("/images/" + x.id) 
       for x in mylib.images()] 
    index.exposed = True 

    @cherrypy.tools.json_out() 
    def default(self, *tags): 
     return [cherrypy.url("/images/" + x.id) 
       for x in mylib.images(*tags)] 
    default.exposed = True 

...:CherryPyには、例えば、URLにそれをフックは同じくらい簡単です。他のWebフレームワークにも同様のオプションがあります。

+0

Pythonを使用していません。 –

+1

おそらくあなたはすべきです。あるいは、代わりに使用していたことを教えてくれたなら、あなたが選んだ環境で代替案を提案することができます。 – fumanchu