2011-08-17 17 views
2

我正在嘗試創建一個訪問MySQL數據庫中的數據的Django網站。該介紹還將在Dojo中創建一個UI(javascript)。另外我希望django後端也提供webservices(用於python函數的RPC)以允許遠程訪問MySQL數據庫。例如,如果有人想使用Perl腳本來訪問數據庫(以及可能的其他附加功能,如基於數據庫中數據的計算),則可以使用它們的本地語言(Perl)來執行此操作。在Django項目中對Python函數進行RPC調用的優雅方式

現在理想情況下,Web服務API是Javascript以及想要訪問這些服務,另一個遠程服務是相同的。我發現JSON-RPC是一個很好的方法,因爲除了許多其他的好處之外,它通常還內置了對javascript的支持。也有很多人似乎更喜歡使用SOAP來處理JSON。

我已經看到了幾種方法來做到這一點:

1)每次你想訪問函數創建一個獨特的URI: https://code.djangoproject.com/wiki/JSONRPCServerMiddleware

2)創建一個訪問點,並通過JSON包中的方法名稱。在這個特定的例子中,SMD是自動生成的。 https://code.djangoproject.com/wiki/Jsonrpc

與(1)的問題是,如果有很多要訪問的函數,那麼將會使用許多URI。這似乎不是一個優雅的解決方案。 (2)的問題是我需要將函數與所有函數列表進行比較。這也不是一個優雅的解決方案。

有沒有辦法,我們可以採取的優點(1)和(2)來創建一個接口,使得: - 只有一個URI被用作訪問 點 - 功能被直接稱爲(不具有與功能列表進行比較)

任何與此有關的幫助將非常感激。謝謝!

+0

我很好奇,你怎麼想這應該工作,當你不希望使用的URL映射到你的職責,你不希望處理請求的時候做的映射。你如何看待服務器會發現你想調用哪個函數? – Epcylon

回答

1

有關使用REST API什麼?

+0

那麼REST只是一個使用JSON風格界面的方法。在我描述REST API的例子中傾向於(1)。實際上,我正在尋找RPC樣式界面的更好解決方案。 –

+0

REST API是一個更好的選擇,因爲REST是漂亮的語言不可知的。簡而言之,你需要的API沒有工作,但不能這樣做。要麼你有很多的URI,要麼你有很多的比較。 – boatcoder

1

一種可能性做比較是使用像這樣的字典:

def func1(someparams): 
    #do something 
    return True 

def func2(sameparams): 
    #do something else 
    return True 


{'func1': func1, 
'func2': func2} 

然後,當你拿到API調用,你看看它在字典,並從那裏調用,任何功能不該字典將獲得404處理程序。

0

這聽起來像你真正想要的是一種使用python編寫並使用你的應用程序的數據模型的某種RPC服務器(SOAP,也就是說,使用soaplib),以及你已經構建的用於處理業務的其他任何API邏輯。

,所以我可能實現與soaplib Web服務,並具有根據需要調用它爲數據模型和其他Python模塊。希望訪問您的Web應用程序數據的用戶將使用SOAP服務,但Web應用程序將使用基礎數據模型+ apis(爲了提高速度,您的Web應用程序也可以使用SOAP服務,但速度會更慢)。

相關問題