标签: http-delete

REST - HTTP DELETE - 语义 - 仅删除后代

在我们的项目中,可以通过REST检索所有书籍的列表:

GET http://server/api/books/
Run Code Online (Sandbox Code Playgroud)

可以检索特定书籍如下:

GET http://server/api/books/:id/
Run Code Online (Sandbox Code Playgroud)

删除特定的书很容易:

DELETE http://server/api/books/:id/
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是:以下调用的结果应该是什么:

DELETE http://server/api/books/
Run Code Online (Sandbox Code Playgroud)

显然,所有书籍都被删除了.但是资源书/是否应该被删除?也就是说,在请求之后:

  1. 应该GET/books /返回200 OK和空列表?要么
  2. 应该获得GET/books/return 404吗?

根据规格说明具体的URI将会消失,我会选择第二种选择.然而,在我看来,这使得事情变得复杂和不合逻辑.拥有一个空的书籍清单更有意义,而不是没有书籍.

你怎么看?

rest http http-delete

5
推荐指数
1
解决办法
607
查看次数

发送http删除请求

我需要如何发送http删除请求,我已经实现了下面的代码

- (void) deleteSyncRequestWithURL:(NSString *) url
{
    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];

    [request setURL:[NSURL URLWithString:url]];
    [request setHTTPMethod:@"DELETE"];  
    _connection = [[NSURLConnection connectionWithRequest:request delegate:self] retain];    
}
Run Code Online (Sandbox Code Playgroud)

但我有404状态.

有谁知道我错过了什么?

PS:我正在使用xcode 3.2.3,模拟器4.0

iphone nsurlconnection nsmutableurlrequest ios http-delete

5
推荐指数
1
解决办法
5287
查看次数

如何执行 HTTP 删除?我得到的只是网址

我只是一个 Java 初学者,想知道如何对 URL 进行 HTTP Delete 调用。任何一小段代码或参考资料都会非常有帮助。

我知道这个问题听起来很简单,但我急需这些信息。

java web-services http http-delete

5
推荐指数
1
解决办法
1万
查看次数

Symfony2是否正确处理了restful url并且我应该使用restful url吗?

我想弄清楚设计我的网址的最佳方式是什么.所以这就是我到目前为止所做的:

account_index:
    pattern:  /Accounts/
    defaults: { _controller: "CoreBundle:Account:index" }
    requirements: { _method: get }

account_create:
    pattern:  /Accounts/
    defaults: { _controller: "CoreBundle:Account:create" }
    requirements: { _method: post }

account_read:
    pattern:  /Accounts/{id}
    defaults: { _controller: "CoreBundle:Account:show" }
    requirements: { _method: get }

account_update:
    pattern:  /Accounts/{id}
    defaults: { _controller: "CoreBundle:Account:update" }
    requirements: { _method: put }

account_delete:
    pattern:  /Accounts/{id}
    defaults: { _controller: "CoreBundle:Account:delete" }
    requirements: { _method: delete }
Run Code Online (Sandbox Code Playgroud)

在测试了我所做的之后,我意识到更新和删除不起作用(总是调用account_read)...在谷歌搜索我的问题后,我发现所有浏览器都不支持PUT和DELETE方法......可能会在将来放弃.

然后我读到Ruby on rails通过做一些魔术在所有浏览器上支持这两种方法.

所以我想知道,Symfony2可以像ruby一样处理PUT和DELETE吗?我应该使用restful url吗?

php url restful-url symfony http-delete

5
推荐指数
1
解决办法
2264
查看次数

我应该为成功的HTTP DELETE请求返回410 Gone吗?

我正在ReST API(构建在ServiceStack上)上实现DELETE支持,并想知道在成功删除DELETE后要返回的响应代码.

HTTP将410定义为:

请求的资源在服务器上不再可用,并且不知道转发地址.预计这种情况将被视为永久性的.具有链接编辑功能的客户端应该在用户批准后删除对Request-URI的引用.如果服务器不知道或无法确定条件是否是永久性的,则应该使用状态代码404(未找到).除非另有说明,否则该响应是可缓存的.

现在,如果一个资源刚刚出现DELETE,我可能确实希望应用这些建议中的许多......但是接受的实践似乎正在回归200 OK成功DELETE- 特别是因为该4XX范围应该表示错误条件.

除了HTTP规范中的指南之外,还有哪些令人信服的论据?

rest http-status-code-410 http-delete

5
推荐指数
1
解决办法
1975
查看次数

CFHTTP和CloudFlare API:删除purge_everything无效

有没有其他人能够用CFHTTP删除purge_everything?我似乎无法通过ColdFusion CFHTTP成功清除CloudFlare区域的缓存.但我能够做其他事情,如列表区等.所以我知道我可以成功CFHTTP到CloudFlare的API.

这是curl命令,有效:

curl -svX DELETE -H 'X-Auth-Email: a@b.c' -H 'X-Auth-Key: XYZ' https://api.cloudflare.com/client/v4/zones/xxxxxxx/purge_cache  -H 'Content-Type: application/json' --data '{"purge_everything":true}'
Run Code Online (Sandbox Code Playgroud)

返回的错误是:

{"success":false,"errors":[{"code":1012,"message":"请求必须包含\"purge_everything \"或\"files \"或\"tags"}],"消息 ":[]," 结果":空}

我尝试了很多代码组合......这些是我尝试过的不同变量:

<cfset stFields = '{"purge_everything":true}'>
<cfset stFieldsJson = {"purge_everything":true}>
<cfset stFieldsJson2 = {
    "fields" : {
        "purge_everything"  : true
    }
}>  
<cfset stFieldsJson3 = {
    "purge_everything"  : true,
    "fields" : {
        "purge_everything"  : true
    }
}>  

<cfset tmp = {} />
<cfset tmp['purge_everything'] = true />
Run Code Online (Sandbox Code Playgroud)

......这里是我做过的一些不同的电话组合......

<cfhttp url="https://api.cloudflare.com/client/v4/zones/4da78b2707f9753eb79a93d505b4d0d3/purge_cache" method="DELETE" result="cFlare"  charset="utf-8">
    <cfhttpparam type="header" name="X-Auth-Email" value="a@b.c"> …
Run Code Online (Sandbox Code Playgroud)

coldfusion cfhttp cloudflare http-delete cfml

5
推荐指数
1
解决办法
1208
查看次数

删除了body参数的PUT和DELETE方法

我有一个laravel API.对于那些不知道的人,Laravel使用方法欺骗来处理PUT和DELETE方法,因此它使用_method = [PUT | DELETE]作为PUT或DELETE方法读取POST调用.

我们用Postman测试我们的API.在邮递员中,我可以向服务器发送真正的DELETE和PUT调用,而不必欺骗.到目前为止,这两种方法都运行良好

今天,我们的测试版服务器将允许PUT/DELETE方法,但它从中剥离了身体参数.这只发生在我们的测试版服务器上,这使我相信它是一个服务器问题,但我们的服务器上几个月没有任何变化.它的CentOS 6.8使用Apache和php 7.请求通过然后laravel立即响应,好像没有任何正文参数存在,无论是验证错误还是删除所有内容而不仅仅是某个东西.

apache centos put http-delete

5
推荐指数
0
解决办法
479
查看次数

REST API 设计 - 使用请求正文删除多个项目

我有一个显示供应商产品的 API

我们的 UI 将允许用户选择各种过滤条件,并使用它一次删除大量产品。

问题是执行几千个单独的 HTTP 删除请求需要太长时间:

DELETE /api/supplier/6/products/5
DELETE /api/supplier/6/products/7
DELETE /api/supplier/6/products/8
DELETE /api/supplier/6/products/10
...
Run Code Online (Sandbox Code Playgroud)

目的是进行一次 HTTP 调用以一次删除一堆供应商产品。我可以将一个正文传递给删除,以便它包含我们要删除的所有 ID 的列表:

DELETE /api/supplier/6/products
Body:
{
  "DeleteIds": "[5,7,8,10]"
}
Run Code Online (Sandbox Code Playgroud)

这很有效,直到我们把它放在我们的生产代理防火墙后面,它从 DELETE 请求中剥离了主体。

我看过 HTTP Spec RFC 2616 Fielding 等。并且它没有明确说明我不应该在 DELETE 请求中使用正文,进一步阅读表明发送带有 DELETE 请求的正文没有任何问题。

我可以控制我们的代理服务器,并且能够允许所有请求都通过正文,但我担心这可能不是最佳做法。我们可能有数千个要通过的 Id,我不希望我们使用标头或 URL 参数,因为我们可能会遇到长度限制。

所以我的问题是:使用请求正文 对多个产品进行删除的正确方法什么?不仅仅是一个意见,而且是否有实际记录的证据来说明为什么我不应该使用 HTTP DELETE 的正文?

我应该继续

DELETE /api/supplier/6/products (Using a body)
Run Code Online (Sandbox Code Playgroud)

或者不应该将 DELETE 与正文一起使用,而是对类似的内容进行 POST

POST /api/supplier/6/products/deletemultiple
Run Code Online (Sandbox Code Playgroud)

编辑:在这个问题中有一些很好的辩论:删除一堆项目的宁静方式 它没有解决我关于使用 DELETE 请求的正文进行自定义删除操作的问题,但是有一些关于不同方式的很好的辩论可能会发生批量删除。

c# http http-delete asp.net-web-api asp.net-web-api2

5
推荐指数
1
解决办法
5069
查看次数

为什么 Django Rest Framework APIRequestFactory 不支持 DELETE 方法的 query_params?

在我的观点之一中,我将附加数据作为 APIView 删除方法中的查询参数传递。我可以使用request.query_params视图中的获取相同的内容。但是当我尝试使用 DRF APIRequestFactory 进行相同测试时,数据为空。进一步挖掘 APIRequestFactory 代码表明它只查看request.data而不是查看QUERY_STRING. 这种行为有什么具体原因吗?

django http-delete django-rest-framework

5
推荐指数
1
解决办法
170
查看次数

REST 批量删除多个项目

我需要在批处理中按 id 删除多个项目,但是 HTTP DELETE 不支持正文有效负载。

解决选项:

1. @DELETE /path/abc?itemId=1&itemId=2&itemId=3 on the server side it will be parsed as List of ids and DELETE operation will be performed on each item.

2. @POST /path/abc including JSON payload containing all ids. { ids: [1, 2, 3] }
Run Code Online (Sandbox Code Playgroud)

这有多糟糕,哪个选项更可取?任何替代方案?

更新:请注意,性能是这里的关键,它不是为每个单独的 id 执行删除操作的选项。

rest http-delete

5
推荐指数
1
解决办法
6669
查看次数