2017-08-07 73 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端点一样工作。特别针对这些类型的批量请求。