2012-01-27 55 views
0

我製作了一個Java EE 6應用程序,用戶可以在其中瀏覽一組問題,添加新問題等等。用戶可以選擇登錄,以便他/她獲得「信用」以添加問題或報告爲不良。製作網絡服務,哪種方法?

現在我想製作一個iPhone應用程序,用戶可以做幾乎相同的事情。所以答案就是我所假設的Web服務。我以前沒有使用過Web服務,但我發現至少有其他選擇:SOAP和REST。

我應該選擇哪一個?我希望用戶能夠從應用程序登錄以及瀏覽數據庫中的問題......可以在網站上執行的許多操作。

我不太瞭解他們介紹的安全性和開銷。

另外,我希望用戶能夠通過Web服務器檢索問題列表,並且可以選擇保存它,因此除非他/她想更新它,否則他/她將不需要互聯網。我可以通過兩種Web服務實現這一目標嗎?

回答

0

你可以看看this之前的SO帖子獲取一些指導。我會推薦使用REST,它看起來不像SOAP那麼混亂,並且Java可以支持它,如here所示。

通過使用註釋,您可以簡單地創建用戶將連接的外觀。反過來,這個外觀將會調用我認爲你已經擁有的相關邏輯。

0

簡答:是的,您可以通過網絡服務來實現這一點。

Web服務只是您系統的一個外觀 - 它們可以暴露(或不暴露)任何您想要的行爲。如果你有安全問題,那麼無論如何你都必須用兩種方法來處理它們。

就我個人而言,我會使用RESTful方法,因爲它通常更容易實現和使用。維基百科:

一個RESTful Web服務(也稱爲RESTful網絡API)是使用HTTP和REST的原則,一個簡單的Web服務 實現。這是一個集 資源,有四個方面的規定:

  • 基礎URI爲Web服務,如http://example.com/resources/
  • 互聯網媒體類型由Web服務所支持的數據。這通常是JSON,> XML或YAML,但可以是任何其他有效的Internet媒體類型。
  • Web服務使用HTTP方法(例如GET,> PUT,POST或DELETE)支持的一組操作。
  • 該API必須是超文本驅動。[11]

所以你有一個網址,說http://mywebsite.com/users並對其進行HTTP操作(GETPUT,等等)。例如,在/users/17上的GET請求可以返回用戶17,而其上的POST請求會更新所述用戶。

至於登錄,當你的用戶「登錄」時,你會調用一個發送用戶名:密碼(可能是加密的)的GET方法並返回一個登錄令牌。每次用戶執行某個操作時,都會將該請求的標記作爲附加參數發送。

+0

Okey,那麼用戶也可以使用REST Web服務登錄?然後,他們經過身份驗證和授權後,我返回一個布爾值或東西?只要互聯網連接,他們是否需要互聯網連接? – LuckyLuke 2012-01-27 09:30:56

+0

Pjotr​​在REST web服務中不會有「正確的」登錄名 - 會更新答案。 – Marcelo 2012-01-27 09:55:19

+0

Okey,那麼我需要更改代碼,然後在每種方法中使用令牌執行某些操作嗎?還是有框架等我可以使用? – LuckyLuke 2012-01-27 10:12:02

0

那麼一個簡單的搜索REST VS SOAP,你最終會得到this

還有許多其他的文章,甚至進行了深入的研究論文,所以這只是一個問題 - 你真的想要得到嚴重與你的研究VS不是真的

祝你好運!

1

REST比SOAP(WSDL契約,XML消息,支持框架)的開銷少,因此當客戶端是移動設備時,REST似乎更合適。您可以使用JAX-RS(Jersey)在服務器端輕鬆創建REST服務。客戶端請求包含url結構和/或參數,如http://yourserver/questions/view/342(查看問題342)或http://yourserver/questions/search?q=REST+vs+SOAP(用於搜索有關REST vs SOAP的問題)。響應可以是任何你想要的,但XML或JSON很常見。

選擇REST意味着您將嚴重依賴HTTP協議。爲了安全起見,常用的方法是將HTTP Basic authentication與https結合使用。基本身份驗證意味着您向包含Base64編碼用戶名:密碼對的HTTP請求添加一個「Authentication:」標頭。請注意,Base64不加密任何東西,它只是混淆。爲了避免竊聽,您至少需要使用https,這意味着使用服務器的公鑰對請求進行加密。這些請求只能用服務器的私鑰解密。要使用https,您需要set up the server with a certificate。如果您想避免有關證書爲「不可信」的警告,則需要發出recognized SSL certificate provider。對於測試,您可以自己生成它。

最後,您問到了保存脫機使用問題列表。這是應用程序關注的問題,而不是服務問題。爲此,您需要將檢索到的數據存儲在設備上,並在設備脫機時訪問該數據。我不是iPhone開發人員,但我可以想象,您可以使用平面文件或輕量級數據庫來存儲數據。設備脫機時,檢索數據的應用程序組件應從網絡訪問切換到本地存儲訪問。另外一些應用功能,如添加問題可能需要禁用。如果您不禁用這些設置,則需要臨時存儲用戶輸入的任何數據,並在設備再次聯機時將其發送到服務器。這可能有點棘手,所以我的建議將留在稍後。