Restful的方式删除一堆物品

在REST的wiki文章中,指出如果您使用http://example.com/resources DELETE,那意味着您要删除整个集合。

如果您使用http://example.com/resources/7HOU57Y DELETE,那意味着您正在删除该元素。

我正在做一个网站,请注意不是网络服务。

我有一个列表中的每个项目都有1个复选框。 一旦我选择多个项目进行删除,我将允许用户按下名为DELETE SELECTION的按钮。 如果用户按下按钮,会弹出一个js对话框,要求用户确认删除。 如果用户确认,则所有项目都被删除。

那么我应该如何迎合以RESTFUL的方式删除多个项目?

注意,目前在网页中使用DELETE时,我所做的是将FORM标记与POST作为操作,但包含一个_method,其值为DELETE,因为这是SO中其他人指出的如何执行网页的RESTful删除。


我认为rojoca的答案是迄今为止最好的。 稍微改变一下,就可以避免在同一页面上进行javascript确认,而是创建选择并重定向到该页面,并在该页面上显示确认消息。 换一种说法:

从:
http://example.com/resources/

做一个

通过选择ID来进行POST:
http://example.com/resources/selections

如果成功的话,应该回应:

HTTP / 1.1 201创建,以及一个位置标题:
http://example.com/resources/selections/DF4XY7

在此页面上,您将看到一个(javascript)确认框,如果您确认将执行以下请求:

删除http://example.com/resources/selections/DF4XY7

如果成功,它应该回应:HTTP / 1.1 200 Ok(或适用于成功删除的任何内容)


一种选择是创建一个删除“交易”。 所以,你POST到像http://example.com/resources/deletes由资源列表的新资源被删除。 然后在你的应用程序中,你只需要删除。 当您发布帖子时,您应该返回创建的交易的位置,例如http://example.com/resources/deletes/DF4XY7GET可以返回事务的状态(完成或正在进行)和/或要删除的资源列表。


以下是亚马逊对其S3 REST API所做的工作。

个人删除请求:

DELETE /ObjectName HTTP/1.1
Host: BucketName.s3.amazonaws.com
Date: date
Content-Length: length
Authorization: authorization string (see Authenticating Requests (AWS Signature Version 4))

多对象删除请求:

POST /?delete HTTP/1.1
Host: bucketname.s3.amazonaws.com
Authorization: authorization string
Content-Length: Size
Content-MD5: MD5

<?xml version="1.0" encoding="UTF-8"?>
<Delete>
    <Quiet>true</Quiet>
    <Object>
         <Key>Key</Key>
         <VersionId>VersionId</VersionId>
    </Object>
    <Object>
         <Key>Key</Key>
    </Object>
    ...
</Delete>           

但是,Facebook Graph API,Parse Server REST API和Google Drive REST API更进一步,使您能够在一个请求中“批量”处理各个操作。

这是来自Parse Server的一个例子。

个人删除请求:

curl -X DELETE 
  -H "X-Parse-Application-Id: ${APPLICATION_ID}" 
  -H "X-Parse-REST-API-Key: ${REST_API_KEY}" 
  https://api.parse.com/1/classes/GameScore/Ed1nuqPvcm

批量请求:

curl -X POST 
  -H "X-Parse-Application-Id: ${APPLICATION_ID}" 
  -H "X-Parse-REST-API-Key: ${REST_API_KEY}" 
  -H "Content-Type: application/json" 
  -d '{
        "requests": [
          {
            "method": "POST",
            "path": "/1/classes/GameScore",
            "body": {
              "score": 1337,
              "playerName": "Sean Plott"
            }
          },
          {
            "method": "POST",
            "path": "/1/classes/GameScore",
            "body": {
              "score": 1338,
              "playerName": "ZeroCool"
            }
          }
        ]
      }' 
  https://api.parse.com/1/batch
链接地址: http://www.djcxy.com/p/71443.html

上一篇: Restful way for deleting a bunch of items

下一篇: REST service: Get Request to a URL with a special string parameter