2017-08-07 77 views
0

問候大家,我有一個數據表在我的HTML頁面,我填充使用REST API。我可以創建新行,也可以通過選擇一行並單擊編輯或刪除按鈕來進行更新或刪除。REST API多次PUT或DELETE在同一時間

,但目前我無法刪除更新或由於地址錯誤一次刪除多個行,

如:PUT http://127.0.0.1:8000/dashboard/content_detail/5,7,9/ 404 (Not Found)

我怎麼能拆分此本爲幾個獨立的網址與相應的ID當我更新或刪除。

e.g:

/dashboard/content_detail/5 
/dashboard/content_detail/7 
/dashboard/content_detail/9 

下面是我的代碼,任何幫助是非常讚賞謝謝。

idSrc: 'id', 
    ajax: { 
     create: { 
      type: 'POST', 
      url: content_path, 
      data: function (content_data) { 
       var create_data = {}; 
       $.each(content_data.data, function (id, value) { 
        create_data['name'] = value['name']; 
        create_data['description'] = value['description']; 
        create_data['category'] = value['category']; 
       }); 
       return create_data; 
      }, 
      success: function() { 
       content_table.api().ajax.reload(); 
      } 
     }, 
     edit: { 
      type: 'PUT', 
      url: '/dashboard/content_detail/_id_/', 
      data: function (content_data) { 
       var updated_data = {}; 
       $.each(content_data.data, function (id, value) { 
        updated_data['description'] = value['description']; 
        updated_data['category'] = value['category']; 
        updated_data['name'] = value['name']; 
       }); 
       return updated_data; 
      }, 

      success: function() { 
       content_table.api().ajax.reload(); 
      } 
     }, 
     remove: { 
      type: 'DELETE', 
      url: '/dashboard/content_detail/_id_/', 
      data: function (content_data) { 
       var deleted_data = {}; 
       $.each(content_data.data, function (id, value) { 
        deleted_data['id'] = id; 
       }); 
       return deleted_data; 
      }, 
      success: function() { 
       content_table.api().ajax.reload(); 
      } 
     } 
    }, 
+0

它是一個設計或編程問題? – MaVVamaldo

+0

它的一個編程問題,我問如何PUT個人網址,而不是像這樣的'/ dashboard/content_detail/5,7,9 /'這會產生一個錯誤 –

回答

0

如果你打算在一次允許大量項目的更新,然後PATCH可能是您的朋友:

RFC 6902展望(定義修補程序標準),從客戶端的角度API可以稱爲

PATCH /authors/{authorId}/book 
[ 
    { "op": "replace", "path": "/dashboard/content_detail/5", "value": "test"}, 
    { "op": "remove", "path": "/dashboard/content_detail", "value": [ "7", "9" ]} 
] 
+0

HTTP方法PATCH可以用來更新部分資源,所以它是不正確的選擇 http://restcookbook.com/HTTP%20Methods/patch/ – Torsten

+0

嗨,謝謝你們的輸入,是的,我確實試圖尋找補丁,但不幸的是,因爲Trosten說它可以只更新部分資源。因此,我認爲最好的方式是通過單獨的網址提交請求最好是 –

0

從設計的角度來看,你不希望你的網址中有幾個ID。

我更喜歡每次更改的單個調用,只考慮一次只能操作一個的資源。

如果這是一個性能問題,我建議使用帶有動作標記的特殊url或類似的東西來表明這不是REST。

+0

,但在我的應用程序中它的一個要求,例如,如果我們必須將30個項目狀態從「進行中」更改爲「完成」,單個呼叫不是選項 –

0

在HTTP中,不需要信息只存在於單個資源上。可以有多個代表相同基礎數據的資源。

因此,創建一個「代表」您希望刪除或放入其他資源的資源是不成問題的。

我確實認爲這可能不是最理想的。我認爲我們傾向於只在樹的單個部分存在信息,我認爲我們希望避免更新資源影響輔助資源狀態的情況。但是,如果您正在尋找嚴格的RESTful解決方案來解決此問題,我認爲這是正確的方法。

因此一個url設計如:

/dashboard/content_detail/5,7,9/ 

是不一定非RESTful或違背了HTTP協議。您在該URL上獲得404的事實目前與您的應用程序框架有關,而不是您的API的協議(HTTP)或體系結構(REST)。

但是,對於這些情況,我覺得我個人傾向於有時候會創建一個單獨的POST端點,這個端點在REST外部像RPC端點一樣工作。特別針對這些類型的批量請求。