2011-08-25 72 views
1

我想爲電子商務網站應用程序創建一個休息架構。電子商務網站架構

事實上,將有:

  • 前辦公室網站
  • 後臺網站充當內容管理,以及客戶服務
  • 一個REST風格的WS負責處理所有的功能邏輯

我對此架構幾個問題:

1 - 它是電子商務應用程序的良好體系結構嗎?

2 - 必須從外部訪問REST風格的WS或保證外部訪問REST風格的WS(如果我想提供訪問Amazon產品描述的可能性,例如, 'data)

3 - 如何保護WS?驗證?授權?(我想我可以使用Spring Security ...)

4 - 對於支付等交易案例,如何在REST WS中完成?或者我必須創建一個在這兩個網站中使用的獨立庫?

非常感謝您提前。

回答

2

「1 - 它是電子商務應用程序的好架構嗎?」

就我個人而言,我認爲在這種情況下的RESTful架構是浪費。將必要的邏輯編碼到前端和後端都包含的通用庫中,您會好得多。

爲什麼?

簡而言之,每個服務調用都需要您的Web服務器處理另一個請求。這意味着在本地執行額外工作來創建請求,將數據從常規內存對象轉換爲後期變量併發送請求。另外,接收方必須對請求作出響應,將請求變量轉換回可用並處理它。

如果您決定RESTful服務需要位於與託管前端和後端的Web服務器完全不同的計算機上,那麼您有其他要求,例如在本地網絡(電纜,路由器,nics等)推動。

總之,有很多步驟會增加內存和處理器的要求,但是提供很少或沒有價值的回報。此外,它大大增加了您必須編寫的代碼數量,而且幾乎沒有ROI。附加代碼將逐漸歸結爲不斷將數據從一種類型編組到另一種類型:例如int值賦值爲一個字符串,用於構造您的發佈查詢,然後發送給接收者,將其轉換回int(具有適當的類型和邊界檢查)和處理。

有沒有一種情況,我會主張爲此使用REST?供內部使用?沒有。如果這些電話需要由外部第三方應用程序進行,那麼是的。

「2 - 必須在REST風格的WS從外部訪問......」
號您可以完全本地網絡的範圍內進行控制。

「3 - 我怎樣才能確保WS。」
有這麼多的方法在這裏它甚至不是滑稽。您可以對流量進行加密,您可以要求爲每個請求提供用戶憑證,這些憑證甚至可能僅僅是驗證的API密鑰。無論如何你應該這樣做。

「4 - 對於交易情況下,像支付,怎麼能在REST WS做......」
它會做精確的方式傳送您的其他數據一樣。將卡信息發佈到您的服務中,然後您的服務聯繫網關以運行交易,並將詳細信息發送回主叫Web應用程序。

1

我剛開始實施電子商務網絡應用程序時,最近我第一次實習。事實上,即使我沒有使用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美分!請糾正我,如果我錯了=)!

+0

僅供參考 - 您引用的Oracle文檔是指您的服務是否需要**多個**請求才能完成處理的概念。這是一個完全不同於單詞用於CC事務的單詞。您只需向Web服務提交一個請求即可處理cc事務。 – NotMe

+0

另外,(這是非常nitpicky所以採取最仁慈的方式:):它不是「員工」,它是「員工」。工作人員是複數形式。此外,它不是「代碼」,複數形式只是「代碼」 – NotMe

+0

@Chris Lively:P感謝糾正我!我對所有這些事情都很陌生。我只是想貢獻一些東西,並從反饋中學習更多嘿^^。 –