2012-10-20 57 views
0

這是一個非常普遍且開放的話題。所以昨天我們決定我們想創建一個基於我們的網站的iOS應用程序,該應用程序目前正在使用Django構建。現在,像RoR一樣,Django被認爲對UI是透明的;它不應該關心用戶使用的UI。 (合適的MVC)。如何正確使用Django(網絡和移動部署)

如果我看一些我們的示例代碼,這裏是我們如何添加一個設備到我們的系統:

@login_required 
def add(request): 
    r_user = request.user.userprofile 
    form = EquipmentFormAdd(request.POST or None, c_id=r_user.company_id, error_class=DivErrorList) 
    if form.is_valid(): 
     equipment = form.save(commit=False) 
     equipment.company_id = r_user.company_id 
     equipment.added_by_id = request.user.id 
     default_file_path = EquipmentPicture.get_default_file_path() 
     url_bucket = r_user.company.s3_bucket.name + default_file_path   
     cell = form.cleaned_data['cell'] 
     equipment.cell_order = cell.equipment_set.count() + 1 
     equipment_picture = EquipmentPicture.objects.create(
      file=EquipmentPicture.get_default_file_path(), 
      slug=EquipmentPicture.get_default_slug(), 
      bucket_name=r_user.company.s3_bucket.name, 
      bucket=r_user.company.s3_bucket, added_by=request.user, 
      company=r_user.company, url_with_bucket=url_bucket)     
     equipment.picture = equipment_picture 
     equipment.save() 
     return redirect('equipment_index') 
    return render(request, 'equipment/add.html', {'equipment_form': form, 'company_id': r_user.company_id}) 

如果我看這個,我看到,我們正在呈現直線走模板並傳遞數據。這不適用於iOS。

幾個問題:

  1. 我看到很多人創造的REST API。如果我們可以用Django創建HTTPResponses,我真的不明白這一點。如果我們要使用像TastyPie這樣的東西,我們將無法像使用POST語句一樣創建一個設備(就像我們現在所做的那樣),就像看看我們當前的添加功能一樣,很多東西都是在功能和TastyPie將無法打電話。

  2. 我的主要問題是我們應該有一個REST API運行以及爲Web和iOS平臺無論是普通的Django服務器,或者只是具有相同的功能,根據它不同的切入點和效果?

  3. 您何時創建REST API?只有標準的POST和GET調用,創建和獲取數據時的很多功能現在都無法工作。那不好嗎?

我有點困惑...對不起,長期的問題,再次感謝!

回答

1

REST API與GET和POST不同。它只是將它們用於數據而不是演示文稿。您輸出JSON或XML而不是標記代碼。 API消費者然後構建數據所需的用戶界面。

一個REST API的真正的問題是採取的所有HTTP已經提供的工具利潤,而不是發明了封裝(如SOAP)

例如,另一層來表示結果(成功與否)的某些動作,請使用狀態碼。爲了表明要執行的動作,通常使用動詞(get,post,put,delete,head,options)。其他請求或響應元數據將進入適當的http頭部。

這樣數據更簡單,緩存更容易,集成也更容易。

此外,使用良好的REST API,您甚至可以構建一個使用某些JavaScript框架(例如backbonejs)從使用API​​中消耗的數據構建UI的網站。

UPDATE

因此,考慮到在Django的REST的東西的當前狀態,並具有生產和消費的API的一些經驗,我會告訴你打造之一:

  1. 一個RESTful如果可能的話,使用與您網站使用的相同控制器的API與您的網絡一起使用。實際上,同一個Web是RESTful,唯一的區別是它不是一個API。我曾嘗試在一些項目中使用多個庫來構建一個API,但總是最終生成我自己的代碼。有時候這很容易。所有的客戶端應用程序(iOS,Android等)都將使用您的API,因此您可以將其完全分離。

    如果您覺得自己構建所有API並不舒服,那麼piston可能是tastypie的有效替代方案。

  2. 只有一個RESTful API,並使用客戶端技術重建您的網站。爲什麼讓你的(少數)服務器忙於生產HTML,當你的(許多)客戶/用戶的瀏覽器可以做同樣的工作,而你不支付電費?

在任何情況下,RESTful API都將幫助您獲得組織良好的應用程序的數據結構。

+0

因此......我應該建立一個REST API來獲取我的數據並將它用於我的iOS應用程序,或者只是調用Django URLS並返回數據? 從我的理解你的答案,需要外部數據的iOS應用程序會調用REST API? – abisson

+0

我會在相同的答案中展開。 – rewritten