课程章节介绍
同学,我们接着来看这个Slide,它讲的是在Apex里怎么从Salesforce向外部服务器发一个HTTPS的请求,而且使用的是JSON格式的数据。
你可以想象,Salesforce就像我们的大本营,它需要给外面的某个服务打个电话,说:“嘿,我这里有些数据,用JSON格式传给你,你帮我处理一下。”那怎么打这个电话呢?在代码里,我们就要按这几步来做:
首先,我们得创建一个专门负责打电话的“对象”,也就是实例化一个新的`Http`对象。有了这个对象,我们就可以开始构造我们的“请求”了——也就是新建一个`HttpRequest`,然后告诉它:我要打的这个电话的目标地址是什么(指定端点),以及这次通话的方式是“Post”,意思是我们要把数据主动发给对方。
接下来,很重要的一点,因为我们要发送的是JSON数据,所以我们要在请求的“信头”里写明:`Content-Type`是`application/json`,这样对方收到后就知道该怎么读我们给的内容了。然后,我们把真正的JSON内容放到请求的“躯干”里,也就是设置请求主体。
准备好了之后,就拨打这个电话——发送请求,对方收到后会给我们一个回复,我们把回复的“躯干”部分取出来,这就是响应主体,也就是外部服务器回传给我们的结果。
不过,你的代码要能顺利拨通这个电话,有一些非常重要的注意事项,Slide里也强调了:
第一,,你必须把要连接的远程站点,提前添加到Salesforce里批准的远程站点列表中。, 这是安全策略,就像公司大门的门禁,只有被你登记过的外部地址,Salesforce才允许你去调用。
第二,,你可以把端点设置为一个命名凭据的URL。, 这是什么意思呢?就是如果你经常要用到同一个外部地址,而且还需要密码之类的身份验证,你可以把地址和认证信息打包成一个“命名凭据”,在代码里直接引用它,这样更安全也更方便维护。
另外,Slide里还提到了一个有点反直觉的细节:,如果请求主体有内容,但你设置的方法却是GET,这时候Salesforce会实际执行一个Post请求。, 这算是一个隐含的规则,你要记住,别在GET请求里塞了数据还指望它按GET去工作。
最后,还有一个执行环境上的限制:,如果你当前存在未提交的那些事务——比如来自TLR操作(应该是触发器里的异步操作)、可调度的作业、批处理或者未来方法中的未决事务,这时候直接调用外部服务会被阻止。, 这是因为Salesforce为了防止对外部服务的调用被无限期挂起,要求调用必须在没有未提交工作的情况下进行。所以,你要记得检查代码逻辑,确保发出的呼叫是在干净的事务状态中进行的。
这样理解下来,整个流程和约束是不是就清晰多了?我们只要按步骤写好请求,配好远程站点,再注意好这几个坑,就能安全地让Salesforce和外部系统对话啦。
关键词
Apex
Salesforce
Developer Guide