Salesforce REST API 和 DELETE 方法

Posted

技术标签:

【中文标题】Salesforce REST API 和 DELETE 方法【英文标题】:Salesforce REST API and the DELETE method 【发布时间】:2012-07-28 17:56:09 【问题描述】:

我正在使用 Adob​​e 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 是 Adob​​e 提供的类,它不是,它利用了 Adob​​e 的 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 登录?

在salesforce 营销云中,如何进行REST api 调用?如何建立网址?

我可以使用现有的SOAP API会话验证Salesforce REST API吗?

使用访问令牌时,salesforce rest api 无效会话 id 错误

在Salesforce中通过REST API编辑自定义对象

在没有用户名和密码的情况下授权 Salesforce REST API