2012-04-09 66 views
1

我想創建REST風格的webservice,它使用數據庫表作爲資源實體。數據庫表可以成爲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 2012-04-09 09:37:07

+0

我的目標是創建一個服務,使我可以動態創建表並將每個表依次用作資源。讓我舉個例子讓我說我想創建一個報表數據庫。許多客戶將數據推入其中,每個客戶都有自己的表。現在,如果新客戶端出現,必須立即創建新表,並且可以將數據推送到該表中。你有沒有得到它的要點?讓我知道你是否需要更多信息。謝謝! – mssrivatsa 2012-04-09 09:42:16

+0

好的......和:你有什麼嘗試?什麼不工作? – Yahia 2012-04-09 09:43:02

回答

1

是的,這很有可能,因爲REST依賴於非常抽象和靈活的資源概念。只要界面服從統一界面(標準方法,使用URI等),你可以做任何你喜歡的幕後。使某個HTTP接口成爲某種東西的最好理由之一是隱藏難看的實現細節,並呈現出這樣一個統一的接口。

你到底如何做,在你的語言或選擇的環境是一個更爲詳細的問題,但基本會是這樣的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 {user input}」更好的安全性;)但希望這可以讓你走上正確的軌道。

+0

非常感謝您的回答!它清除了大部分的事情。 – mssrivatsa 2012-04-10 05:52:41

相關問題