Salesforce REST API 和 DELETE 方法
Posted
技术标签:
【中文标题】Salesforce REST API 和 DELETE 方法【英文标题】:Salesforce REST API and the DELETE method 【发布时间】:2012-07-28 17:56:09 【问题描述】:我正在使用 Adobe AIR 并通过 REST API 与 force.com 平台集成,到目前为止它的进展相对顺利,但我在使用 DELETE
方法时遇到了困难。
The documentation 很简单:
删除帐户记录
使用 DELETE 方法删除一条记录。 在此示例中,删除了客户记录。
删除帐户对象中的字段的示例用法
卷曲https://instancename.salesforce.com/services/data/v20.0/sobjects/Account/001D000000INjVe -H "授权:承载token" -H "X-PrettyPrint:1" -X DELETE
删除客户记录的示例请求正文
不需要
删除客户记录的示例响应正文
没有返回
我的代码如下,注意HTTPConnection.send()
的第二个参数是要调用的方法。
var headers:Object = new Object();
headers["Authorization"] = "Bearer "+ConnectionAccessToken;
var url:String = ConnectionInstanceURL + "/services/data/v"+_apiVersionNumber+"/sobjects/"+type+"/"+id;
var response:RESTResponse = new RESTResponse(callback);
var httpCallback:IResponder = new mx.rpc.Responder(response.resultHandler,response.faultHandler);
HTTPConnection.send(headers,"DELETE",url,httpCallback);
类似的代码非常适合其他操作,奇怪的是这本身并没有失败,而是收到了成功的响应,但会返回有问题的记录及其所有字段。我似乎看到了[select * from Object where Id = <id>
的结果,只是为了澄清记录没有删除。该对象没有任何主从关系,所以我不确定还有什么可能阻止这种删除发生 - 有没有人遇到过这个问题或有关于如何解决它的建议?
【问题讨论】:
HTTPConnection?东德埃斯塔?你从哪里得到这个类,它支持“DELETE”作为 HTTP 方法吗? +1,我会先拍一下 TCP 嗅探器(我通常求助于ws.apache.org/commons/tcpmon),然后首先验证您发送的内容是否合法。您可能实际上并没有发送您认为的动词,因为您似乎收到了对 GET 的响应。 看起来我可能像往常一样忽略了显而易见的事情。我做了一个危险的假设,即 HTTPConnection 是 Adobe 提供的类,它不是,它利用了 Adobe 的 HTTPService 类。看起来我有一些调查要做:“可选,您可以将参数传递给指定的 URL。当您不通过基于服务器的代理服务时,您只能使用 HTTP GET 或 POST 方法。但是,当您将 useProxy 属性设置为 true 并使用基于服务器的代理服务,还可以使用 HTTP HEAD、OPTIONS、TRACE 和 DELETE 方法。" 【参考方案1】:对于我正在使用的设置(其中 HTTPConnection 是在内部使用 HTTPService 的自定义类),Adobe 文档指出可供我使用的唯一 HTTP 方法只有 GET 和 POST:
"可选,您可以将参数传递给指定的 URL。当您不通过基于服务器的代理服务时,您只能使用 HTTP GET 或 POST 方法。但是,当您将 useProxy 属性设置为 true 并且您使用基于服务器的代理服务,还可以使用 HTTP HEAD、OPTIONS、TRACE 和 DELETE 方法。"
这就是删除失败的原因,因为它必须作为 GET 发送,而不是根据上面jkraybill 的评论。经过实验,我发现可以使用 POST,并将调用的实际方法作为 URL 的参数包含在内:
HTTPConnection.send(headers,"POST",url + "?_HttpMethod=DELETE",httpCallback);
【讨论】:
以上是关于Salesforce REST API 和 DELETE 方法的主要内容,如果未能解决你的问题,请参考以下文章
在salesforce 营销云中,如何进行REST api 调用?如何建立网址?
我可以使用现有的SOAP API会话验证Salesforce REST API吗?