我剛開始實施電子商務網絡應用程序時,最近我第一次實習。事實上,即使我沒有使用REST風格的WS,我也會使用與您在問題中提到的類似的體系結構。
從我所嘗試和經驗的角度來看,我覺得爲客戶分開前臺Web服務和爲員工分離前臺Web服務是非常方便的。首先,這會阻止兩種Web服務的代碼混合在一起。因此,未來維護代碼會更容易。我能想到的另一個優點是有些公司不希望他們的員工訪問辦公室以外的Web服務。因此,如果將兩種Web服務分開,您可以輕鬆地在Internet上訪問前端Web服務,並使後端Web服務僅在公司辦公室內部可訪問。如果您的後臺Web服務允許在線訪問,我認爲這種架構仍然可以在安全方面幫助您一點。例如,假設您的後臺Web服務可以通過URL「http://mydomain.com/back/」訪問。如果您的員工不向其他人透露「/返回」,則沒有人會知道您的後臺服務在此處可用。
此外,關於「處理所有功能邏輯的RESTful WS」,我不確定這是否是一個好主意。例如,在我的Web應用程序中,即使員工和普通用戶都可以登錄系統,但實際上我有兩種不同的「登錄」方法。原因是在登錄時,如果請求來自員工,我需要檢查其他信息。此外,登錄後,我發回給員工和用戶的cookies也包含不同的信息。因此,我認爲在可能的情況下分離功能邏輯部分可能會更好。您將來也可以更輕鬆地維護代碼。
關於如何保護你的WS,我認爲你寫的是正確的。在用戶可以訪問任何類型的服務之前,請求他登錄。此外,在用戶訪問特定類型的服務之前,請檢查他是否有權訪問它。這就是我在我的系統中所做的。
最後,對於支付等交易案例,我不確定使用RESTful WS是否是個好主意。再次,我必須承認,我從來沒有使用RESTful WS,因此,我的觀點可能並不可靠。然而,根據Oracle的documentation:
RESTful design may be appropriate when the web services are completely stateless.
A good test is to consider whether the interaction can survive a restart of the server.
如果你想進行交易,我認爲你的應用程序必須始終記得一些關於客戶在某個時間點。例如,您需要記住購物車中的物品或客戶輸入其信用卡號碼時,您需要阻止他在電影院預訂的座位。
這是我的2美分!請糾正我,如果我錯了=)!
僅供參考 - 您引用的Oracle文檔是指您的服務是否需要**多個**請求才能完成處理的概念。這是一個完全不同於單詞用於CC事務的單詞。您只需向Web服務提交一個請求即可處理cc事務。 – NotMe
另外,(這是非常nitpicky所以採取最仁慈的方式:):它不是「員工」,它是「員工」。工作人員是複數形式。此外,它不是「代碼」,複數形式只是「代碼」 – NotMe
@Chris Lively:P感謝糾正我!我對所有這些事情都很陌生。我只是想貢獻一些東西,並從反饋中學習更多嘿^^。 –