我有一个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
或者如果我作为 post 对象/补丁对象
发送request.body={"eve":{"mod_policy":"all"}} //Restkit Log
对于
DELETE
请求,明确不执行请求映射。 RestKit 期望在删除时您将使用系统将参数添加到 URL 中。您将需要计划其他删除方法。这可以使用 RestKit 映射操作来创建有效负载数据,然后使用方法来创建 URL 请求并显式设置正文数据。
RESTKit 不支持带有 request.body 参数的 DELETE 请求 本身是因为 HTTP 1.1 不支持 DELETE 请求 请求体。有一种解决方法可以显式设置 request.body 但 它很复杂。
该请求适用于 cURL,但不适用于 HTTP,可能是因为 cURL 不发送带有 request.body 为 DELETE 的 DELETE 请求,但对其进行升级 PUT,但我们不确定。