我將很快開發移動應用程序(iPhone)和基於Web的應用程序(Django)。對於移動應用程序,我將創建一個REST api(很可能使用Django)從電話到服務器之間來回發送數據。我的基於web的應用程序應該是我api的消費者嗎?
當我開始創建基於web的版本時,只需將其創建爲api的任何其他客戶端即可。換句話說,移動應用程序和Web應用程序都將通過HTTP從外部API獲取數據。或者,基於Web的應用程序是否可以直接訪問api正在使用的數據庫,並以這種方式獲取數據?
我將很快開發移動應用程序(iPhone)和基於Web的應用程序(Django)。對於移動應用程序,我將創建一個REST api(很可能使用Django)從電話到服務器之間來回發送數據。我的基於web的應用程序應該是我api的消費者嗎?
當我開始創建基於web的版本時,只需將其創建爲api的任何其他客戶端即可。換句話說,移動應用程序和Web應用程序都將通過HTTP從外部API獲取數據。或者,基於Web的應用程序是否可以直接訪問api正在使用的數據庫,並以這種方式獲取數據?
我會創建Web應用程序來爲移動客戶端提供API。也就是說,讓基於Web的應用程序直接訪問數據庫。這將簡化您的XML/JSON RESTful資源訪問。
將其分成三個「部分」。第一個使用Python API來操縱數據庫。第二個將您的REST API與您的Python API進行接口。第三次會談網絡並使用Python API。
我會說不,不要使用API的HTML版本。如果你設計好你的Django,那麼最終的代碼可能比使用HTML版本的API少。當老闆想要改變拼寫時,你也可以保留讓網頁設計師使用Django模板的能力。
我會建議嘗試爲您的iPhone應用程序定義一個基本應用程序來與之交互,然後在第二個應用程序中爲HTML版本進行擴展。 App1
將擁有您的所有型號(包括業務邏輯),以及用於處理來自/來自iPhone的數據的views.py
。然後創建App2
,它使用App1.models
,但創建它自己的views.py
。如果運氣好的話,你會發現自己只能改變用於呈現輸出的模板,所以你可以通過將模板作爲參數來重用視圖。
例如:
App1.views:
def list(request, template="list.json"):
list = Model.objects.filter(deleted=False).filter(user=request.user)
list.reverse()
## Lots of other logic to work on the list.
return render_to_response(template, {list: list,})
App2.views:
def list(request, template="list.html"):
return App1.views.list(request, template=template)
我認爲這個問題的答案隨着時間的推移發生了變化。一年前,當被問到這樣做可能仍然太麻煩時,但現在我肯定會說是 - 使用您的API作爲基礎是明智的做法。隨着網站使用更多的HTML5和移動應用程序變得更加智能,讓所有的「UI」從同一個API層讀取/寫入真的很有意義。這將給你未來更多的靈活性。