2013-02-09 92 views
0

我有一個涉及爲徒步旅行俱樂部網站構建Android應用程序的新項目。該網站具有登錄功能,之後用戶可以瀏覽可用的遠足,訂閱遠足,查看其他訂閱者,聯繫組織者等。 原始網站基於MySQL數據庫,前端爲.asp頁面。大多數數據作爲查詢字符串上的GET參數傳遞給頁面。使用Android應用程序擴展現有的Web應用程序

新的Android開發,有些東西真的讓我困惑,即使閱讀了幾個教程。我正在考慮使用REST Web服務構建一個架構,但是有幾個障礙需要克服和選擇。

除了使用REST,其他一些選項:

  1. 呼叫從應用程序而不是建立一個專門的Web服務原來的.asp頁。這爲我留下了更少的代碼來編寫,原始的業務邏輯(查詢e.a.)以及登錄系統都可以使用(基於cookie的「記住我」功能)。缺點是響應中的(X)HTML代碼需要解析以顯示在應用程序GUI中,其中大部分響應代碼都是無用的鎮流器代碼。另外,從檔案的角度來看,它感覺不太好。

  2. 使用基於SOAP的web服務。我完全不熟悉SOAP,它對移動設備來說似乎太重量級了。

  3. 使用REST服務。我正在傾向於這個選項,並且已經使得一些已經使用SLIM框架的服務正在運行。但有 是一些問題。首先,REST根據定義是無狀態的,並且 似乎不支持會話。但第一次登錄後,應用程序需要「記住我」選項 ,除非明確註銷,否則用戶 不需要再次登錄。

但是我們該怎麼做到呢?

第一種選擇是設計一些完全客戶端站點登錄/註銷系統,它在本地保存憑證,直到用戶註銷。並將每個請求的憑證作爲POST參數發送到Web服務,或者以某種方式在HTTP Authorization請求頭中發送,儘管我對此並不熟悉。

第二種選擇是偏離RESt原則,並使用會話機制。將憑據發送到Web服務後,會創建一個cookie併發送到客戶端應用程序。 dartabase不能被擴展,所以沒有選項可以在用戶表中保存一個標記。也許用戶名/密碼可以加密並作爲cookie發送到應用程序,並在每個後續請求中解密?

我有點迷失在這,期待認真的建議!

回答

2

我相信從長遠的角度來看,重要的是你要傾向於REST接口。雖然JSoup和/或WebView方法肯定會起作用,但重要的是要有靈活性來重新定義/設計移動應用程序,而這些方式完全不受Server端的影響。 REST會幫助你,並且你不需要跟上服務器端,每次他們改變HTML頁面等等。

去REST也將有助於未來編寫額外的移動應用程序,甚至在不同的平臺上iOS,如果你的路線圖包含。

+0

謝謝,我打算遵循這個策略。我通過將每個用戶特定請求的用戶名/密碼憑證作爲GET參數傳遞給數據提取操作來擴展Web服務。現在這種方法很有效,雖然它不是很安全。這留下了大多數業務規則必須重新編寫的問題,因爲這些現在隱藏在.asp頁面後面。如果這些業務規則可以放在一個普通的地方,那將是非常好的,但是我認爲現有的Web應用程序必須在這種情況下重寫... – klausch 2013-02-10 00:26:24

+0

舊的線程,但是您是否用建議的方法解決了這個問題?我正在做類似的事情,但是爲了堅持ASP會議而與Google的Volley苦苦掙扎 – Jammo 2016-01-30 14:15:42

0

您可以使用jsoup解析您的Android應用程序中的html頁面,並重新組織網頁信息,該選項將使您能夠快速開發應用程序,稍後您可能會考慮將REST接口添加到您的網站並在json中填充數據。 如果您不想分析html頁面,您還可以使用WebView來放置您的網頁。

+0

感謝您的回答,實際上這就是我在選項#3中所描述的,並且我已經閱讀了關於Jsoup的最佳工具。我保留這作爲後備選項,但仍希望找到一種方法來處理REST在未來幾天的登錄/會話問題。 – klausch 2013-02-09 20:57:02

+0

對不起,我的意思是選項#1 – klausch 2013-02-10 00:28:21

0

我建議你使用REST架構,如你所說。您可以使用Android的休息客戶端庫RESTDroid,查看指南,因爲有一個實現示例,其中使用了特定Web服務所需的特殊標頭(本例中爲Parse.com)。