1

データベーステーブルをリソースエンティティとして使用するRESTfulWebサービスを作成したいと思います。

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

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

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

前もって感謝します。

4

1 に答える 1

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'接続ロジックを自分で接続し、クライアントがフィールド定義をどの程度制御する必要があるか(および、それを伝達するのに最適なメディアタイプと、そのメディアタイプを有効なSQLに解析する方法)を把握する必要があります。 CREATE TABLEステートメントの場合)。また、「DROP TABLE {user input}」よりもはるかに優れたセキュリティが必要になります;)しかし、うまくいけば、これで正しい方向に進むことができます。

于 2012-04-09T17:59:22.340 に答える