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/DF4XY7
。 GET
可以返回事务的状态(完成或正在进行)和/或要删除的资源列表。
以下是亚马逊对其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