2010-12-07 43 views
0

我正在研究REST式Web應用程序。現在我想擴展讀取(GET)請求來處理類似於SQL的查詢,但是我無法將它們編碼到URL中,因爲所有特殊字符(「」,「/」,「<」,「>」 「{」,「}」等)。我已經讀過,在GET請求中使用消息正文並不是一個好主意。所以目前唯一的選擇是使用POST請求。但是再一次,我會說這不是一個好的解決方案,因爲我會使用POST進行讀取操作。根據REST原則,讀取應該由GET請求完成,並且POST應該僅用於操縱數據。REST式應用程序,想將SQL查詢作爲讀取請求發送

您認爲如何?將類似SQL的查詢發送到我的Web應用程序的最佳方式是什麼?

非常感謝

回答

2

使用 CGI ::逃生( 「SELECT * FROM NEVER_DO_SUCH_THINGS其中SQL_INJECTION> '不安全'」)

+0

謝謝。目前我正在使用Python發送測試請求。 Python中的Cgi.escape只能轉義「<", ">」,「&」。 urllib.quote運行得更好,但仍然不會「/」。它看起來不那麼容易。因此,我對解決方案並不滿意。網絡應用程序應該爲每個人工作,不依賴於正確的轉義功能,甚至可能由你自己逃脫等。 – pinky0x51 2010-12-07 13:05:30

0

查看如何東西查詢操作OData URI Conventions的一個例子爲URI 。

但是,您正在過度限制POST的使用。 HTTP方法的想法是,當請求的特徵符合GET,PUT和DELETE的特徵時,你應該使用它們。如果特徵不匹配,則您不得使用。但是,POST是可用於任何請求的通配符方法。

沒有要求POST必須以任何方式寫入,更新或操作數據。通過告訴客戶它需要使用POST方法,你只是沒有向客戶提供關於服務器行爲的任何承諾。

使用POST提交要用於查詢的數據塊沒有任何問題。缺點是POST的響應沒有被緩存,因此你不能利用它。

有許多混合方法,其中之一是POST查詢參數並讓服務器創建一個新的臨時資源來代表查詢,然後返回一個重定向,以便客戶端在臨時查詢資源上執行操作。

相關問題