2

我有一个 API 用于删除服务器数据库中的记录。我曾经使用请求 ID 构建 API。它正在使用 CURL,但在 Restkit 中它似乎给出了错误。卷曲是:

curl -d '{eve:{mod_policy:"current"}}' -X DELETE -H Content-Type:application/json https://myurl.com/eve/eve_id?token=my_aut_token\&apikey=myapi_key.

我检查了POST & PATCH。它采用JSON正确的形式。

我的 RestKit 代码示例:

RKObjectMapping *requestMapping = [RKObjectMapping requestMapping];

[requestMapping addAttributeMappingsFromDictionary:@{ @"modPolicy" : @"mod_policy"}];

RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:requestMapping  objectClass:[Event class]   rootKeyPath:@"eve"];

RKObjectMapping *responseMapping = [RKObjectMapping mappingForClass:[Events class]];

[responseMapping addAttributeMappingsFromDictionary:@{
                                                      @"data" : @"data",
                                                      @"status":@"status"
                                                      }];

RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:responseMapping   pathPattern:nil   keyPath:@""  statusCodes:[NSIndexSet indexSetWithIndex:200]];

[objectManager addRequestDescriptor:requestDescriptor];
[objectManager addResponseDescriptor:responseDescriptor];

NSString * urlPath = [NSString stringWithFormat:@"/eve/%@?token=%@&apikey=%@",eventID,loginToken,apiKey];

[objectManager deleteObject:hubEve path:urlPath parameters:nil success:^(RKObjectRequestOperation *operation, RKMappingResult *result)
 {
     DLog(@" response code is %d",operation.HTTPRequestOperation.response.statusCode);
     Events * _event = [result firstObject];
     DLog(@"status %@",_event.status);

     if([_eventt.status isEqualToString:@"success"])
     {
        DLog("Move Next"); 

     }
 } failure:^(RKObjectRequestOperation *operation, NSError *error) {
     DLog("error %@",error);
 }];

一些日志详细信息,如果我在请求中发送 As DeleteObject:

request.body=(null) //Restkit Log

或者,如果我作为帖子对象/补丁对象发送

request.body={"eve":{"mod_policy":"all"}} //Restkit Log

4

2 回答 2

2

请求映射明确不为DELETE请求执行。RestKit 期望在删除时您将使用系统将参数添加到 URL 中。您将需要计划其他一些删除方法。这可能是使用 RestKit 映射操作创建有效负载数据,然后使用方法创建 URL 请求并显式设置正文数据。

于 2013-10-07T10:26:53.327 回答
0

RESTKit 本身不支持带有 request.body 参数的 DELETE 请求,因为 HTTP 1.1 不支持带有 request.body 的 DELETE 请求。有一种解决方法可以显式设置 request.body 但它很复杂。

该请求适用于 cURL,但不适用于 HTTP,可能是因为 cURL 没有发送带有 request.body 作为 DELETE 的 DELETE 请求,而是将其升级为 PUT,但我们不确定。

于 2013-10-09T06:58:01.290 回答