2012-04-09 5 views
1

データベーステーブルをリソースエンティティとして使用するRESTful Webサービスを作成したいと考えています。データベーステーブルをRESTのリソースエンティティにすることはできますか?

PUT myservice/table/new creates a new table in database 
DELETE myservice/table/1 deletes a table in database and so on... 

どのようにしてこのモデルを設計しますか?通常、モデルはリソースエンティティが存在するテーブル用に作成されますが、リソースはテーブル自体ではなくデータベース自体に存在します。

これは可能ですか、それとも意味がありませんか?私を助けてください!

ありがとうございました。

+0

可能ですが、正確に何を試しましたか?あなたの目標は何ですか ?何がうまくいかないの? – Yahia

+0

私の目標は、テーブルを動的に作成し、各テーブルをリソースとして順番に使用できるサービスを作成することです。例を挙げましょうレポートデータデータベースを作成したいとします。多くのクライアントがデータをプッシュし、それぞれに独自のテーブルがあります。新しいクライアントが登場すると、その場で新しいテーブルを作成しなければならず、そのテーブルにデータをプッシュできます。あなたはそれの要点を得ましたか?私はいくつかの詳細が必要な場合はお知らせください。ありがとう! – mssrivatsa

+0

ok ... and:何を試しましたか?何がうまくいかないの? – Yahia

答えて

1

RESTは非常に抽象的で柔軟性の高いリソースの概念に依存しているため、可能です。インターフェイスが均一なインターフェイス(標準のメソッド、URIなどを使用して)に従う限り、何かの背後に好きです。 HTTPインターフェイスを何かにする最も良い理由の1つは、醜い実装の詳細を隠し、そのような一様なインターフェイスだけを提示することです。

まさにあなたがどのようにはるかに詳細な質問ですが、基本はこのCherryPyに擬似コードのようなものになるだろう選択した言語や環境にいること:

class Table: 
    exposed = True 
    def __init__(self, tablename): 
     self.tablename = tablename 
    def PUT(self): 
     fields = parse_fields(cherrypy.request.body.read()) 
     db.execute("CREATE TABLE %s (%s)" % (self.tablename, fields)) 
    def DELETE(self): 
     db.execute("DROP TABLE %s" % self.tablename) 

class Tables: 
    def _cp_dispatch(self, vpath): 
     return Table(vpath.pop(0)) 

あなたがアップ配線する必要があります'db'接続ロジックを自分で調べ、クライアントがフィールド定義(どのメディアタイプがそれを伝えるのが最も良いか、そしてそのメディアタイプを構文解析してCREATE TABLEステートメントの有効なSQLにパースする方法)に対するコントロールの程度を把握します。 多くの場合、のセキュリティは「DROP TABLE {ユーザー入力}」よりも安全です。)しかし、うまくいけば、これは正しい軌道に乗ります。

+0

お返事ありがとうございました!それはほとんどの事を明らかにした。 – mssrivatsa

関連する問題