2013-03-26 54 views
1

我是一個新興的Web服務和Web API世界。我注意到大多數公司都提供基於XML或JSON的連接,基本上從數據庫獲取數據並將其編碼爲其選擇的格式。我的問題是,爲什麼我看不到有人提供某種類型的SQL連接?SQL vs XML用於數據傳輸

起初我以爲這是安全。但是使用MySQL,您可以將用戶訪問權限限制在特定的列中。您可以允許他們只查看,或只能插入。您可以創建視圖和存儲過程來執行連接或隱藏真正的後端結構。您可以使用ssl連接正確編碼傳輸的數據。所以我覺得唯一的區別就是風格。在我看來,人們寧願我寫

$conn->getWidgetAttr('widgetName'); 

而不是

SELECT widgetName FROM widgets; 

誰能告訴我什麼,我在這裏失蹤?

回答

4
  1. 配置複雜度。對於所有可能的用例,爲所有用戶配置權限很困難。
  2. 安全。公開數據庫連接和查詢不安全,並且提供了sql注入/利用攻擊的廣泛可能性。
  3. 合約穩定性。隱藏數據庫中存儲項目的實現細節允許您在不中斷退出客戶端的情況下更改底層存儲。例如,你可能決定用mongodb替換sql server。
  4. 防火牆問題。 Http連接廣泛可用,端口80對於大多數使用web api的操作是開放的,而暴露sql server端口(默認1433)可能會增加額外的部署成本。
+0

+1 API版本控制也很重要。基礎數據模型應該改變。 – 2013-03-26 22:08:41

+0

我會同意除安全以外的所有要點。當腳本不正確地轉義從用戶接收到的輸入並將其放入由mysql用戶運行的查詢中,並且權限高於用戶應該訪問的權限時,就會發生SQL注入。例如,如果僅授予mysql用戶在單個表上進行選擇,則不會導致查詢執行除了從該表中選擇以外的任何操作。即使如此,僅僅配置的複雜性就足以成爲不想實現這樣的事情的理由。 感謝您的信息。 – 2013-03-28 22:02:25