Salesforce Invoking Http Callouts and Testing Http Callouts
本文参考官方文档和zero zhang的博客:
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_integration_intro.htm
Salesforce调用外部接口的方法或者数据,常用的访问方式有两种:
- Soap方式:Web Service 通过XML方式调用Soap Web服务器;
- Rest方式:Http通过JSON使用REST方式调用服务器。
下面了解一下REST方式获取外部Service数据。
- Salesforce 通过REST方式获取外部Service数据
REST方式原理图如下:
- Salesforce 通过REST方式访问外界站点步骤如下
- 将Webservice的授权端点地址添加到Remote Site中:set -> Administer->Security Site Settings->Remote Site Settings。
Salesforce提供了两个测试URL。将两个测试的URL添加到Remote Site中。两个URL分别为: - 代码进行访问,通过Http方式可以使用以下方法进行相关操作的访问:
- 将Webservice的授权端点地址添加到Remote Site中:set -> Administer->Security Site Settings->Remote Site Settings。
- 下面是我自己封装的一个简单的Salesforce调用外部接口的帮助类和测试类:
- Helper类:
global class HttpHelper { private Http Http{get;set;} private HttpRequest Request{get;set;} private HttpResponse Response{get;set;} public HttpResponse service(String method,String url,String body,String contentType,String authoriziton,String certificateName){
Http = new Http();
Request = new HttpRequest();
try{
Request.setMethod(method);
Request.setEndpoint(url);
Request.setTimeout(120000);
if(string.isEmpty(contentType) || string.isBlank(contentType)){
Request.setHeader('Content-Type','application/json;charset=utf-8');
}else{
Request.setHeader('Content-Type',contentType);
}
if(string.isNotEmpty(authoriziton)&&string.isNotBlank(authoriziton)){
Request.setHeader('Authorization', authoriziton);
}
if(string.isNotEmpty(certificateName)&&string.isNotBlank(certificateName)){
Request.setClientCertificateName(certificateName);
}
if(string.isNotEmpty(body)&&string.isNotBlank(body)){
Request.setBody(body);
}
Response = Http.send(Request);
System.debug('Response:'+Response);
}catch(Exception e){
system.debug('RequstException:'+e);
}
return Response;
} /**
Execute the Get Method
*/
public HttpResponse doGet(String url,String body,String authoriziton,String certificateName){
return service('GET', url, body, null, authoriziton,certificateName);
} /**
* Execute the Post Method
*/
public HttpResponse doPost(String url,String body,String authoriziton,String certificateName){
return service('POST', url, body, null, authoriziton,certificateName);
} } - 需要注意的是在测试帮助类的时候,我们必须实现HttpCalloutMock的这个类并实现其方法respond(),如:
@isTest global class HttpCallOutMockImpl implements HttpCalloutMock{
global HttpResponse respond(HttpRequest request){
//Optionally,only send a mock response for a specific endpoint.
System.assertEquals('http://example.com/example/test',request.getEndpoint());
System.assertEquals('GET',request.getMethod()); //Create a fake response
HttpResponse response = new HttpResponse();
response.setHeader('Content-Type', 'application/json');
response.setBody('{"example":"test"}');
response.setStatusCode(200);
return response;
}
} - 编写测试类,如:
@isTest
private class HttpHelperTest {
@isTest static void testCallOut(){
Test.setMock(HttpCalloutMock.class,new HttpCallOutMockImpl());
HttpHelper httpHelper = new HttpHelper();
HttpResponse resp= httpHelper.doGet('http://example.com/example/test', null, null, null);
string contentType = resp.getHeader('Content-Type');
System.assert(contentType == 'application/json');
String actualValue = resp.getBody();
System.debug('Body:'+actualValue);
String expectedValue = '{"example":"test"}';
System.assertEquals(actualValue, expectedValue);
System.assertEquals(200, resp.getStatusCode());
} }注:测试类必须加上标记@IsTest
- Helper类:
Salesforce Invoking Http Callouts and Testing Http Callouts的更多相关文章
- [PWA] Disable Text Selection and Touch Callouts in a PWA on iOS
Because an installed PWA is really just a web app running in a browser, there are some browser behav ...
- salesforce 零基础学习(三十三)通过REST方式访问外部数据以及JAVA通过rest方式访问salesforce
本篇参考Trail教程: https://developer.salesforce.com/trailhead/force_com_dev_intermediate/apex_integration_ ...
- salesforce 零基础开发入门学习(五)异步进程介绍与数据批处理Batchable
本篇知识参考:https://developer.salesforce.com/trailhead/force_com_dev_intermediate/asynchronous_apex/async ...
- 【转载】salesforce 零基础开发入门学习(五)异步进程介绍与数据批处理Batchable
salesforce 零基础开发入门学习(五)异步进程介绍与数据批处理Batchable 本篇知识参考:https://developer.salesforce.com/trailhead/for ...
- 学习Salesforce | Platform Developer Ⅰ 平台初级开发认证考试指南及备考资源
一.平台开发人员考试计划 Salesforce平台开发人员初级认证面向具有在Lightning平台上构建自定义应用程序的知识.技能和经验的个人. 该认证考核Lightning平台的基本编程能力,并会使 ...
- Salesforce Integration 概览(三) Remote Process Invocation—Fire and Forget(远程进程调用-发后即弃)
本篇参考:https://resources.docs.salesforce.com/sfdc/pdf/integration_patterns_and_practices.pdf 我们在上一篇讲了远 ...
- 四、Salesforce Styles_1
1.静态变量的使用:<apex:stylesheet value="{!$Resource.TestStyles}"/>2.<apex:page><s ...
- Unit Testing a zend-mvc application
Unit Testing a zend-mvc application A solid unit test suite is essential for ongoing development in ...
- [译]36 Days of Web Testing(二)
Day 7: Http 和 Https Why? 当在网络上传输一些私人,敏感信息时,应该采用加密的手段来保证这些信息在传输的过程中不被侦测到.Https协议正是这种实现机制. Https是一种广泛使 ...
随机推荐
- PAT A1059
PAT A1059 标签(空格分隔): PAT 解题思路 :先打印出素数表.利用结构体数组来存贮质因子的值和个数 strcut factor{ int x; //值 int cnt; //个数 }fa ...
- shell练习题3
需求如下: 请按照这样的日期格式(xxxx-xx-xx)每天生成一个文件,例如今天生成的文件为2018-10-19.log, 并把磁盘的使用情况入到这个文件,(不需要写cron,写脚本即可) 参考解答 ...
- shell练习题2
需求如下: 写一个shell脚本,检查指定的shell脚本是否有语法错误,若有错误,首先显示错误信息,然后提示用户输入q或Q退出脚本, 输入其他内容则直接用vim打开该shell脚本. 参考解答如下 ...
- 初读"Thinking in Java"读书笔记之第六章 --- 访问权限控制
包:库单元 包内包含有一组类,他们在单一的名字空间下被组织在一起. 通过import ***.***.*可以将某个包下的所有类导入到当前文件中. 每个Java源文件最多只能有一个public类,且名称 ...
- Vue中transition和animation的使用
一:二者的对比 1.动画循环就用animation.在animation中有一个animation-iteration-count属性可以定义循环次数.transition是执行一次以后就不会执行,但 ...
- Zynq系列程序逻辑固化方法
1.创建一个BOOT镜像 该小节主要讲述zynq平台利用软件套件SDK创建一个可固化BOOT镜像. 1.1 选择Ad9361_Eque1工程,选择Xilinx Tools → Create Boot ...
- Vue中通过v-for动态添加图片地址
由于组件化问题,webpake在打包以后,src目录下的assets里面存放的img图片,路径已经更换.很多入坑的前端程序员在使用的时候,可能专破头也弄不清地址是什么个情况: 这里在使用vue-cli ...
- Android作业
一.设置跑马灯功能 使用滚动字幕显示标题“请选择你喜欢哪种花” <?xml version="1.0" encoding="utf-8"?>&l ...
- Web服务器软件 (Tomcat)
1.什么是服务器? 安装了服务器的软件的计算机 服务器软件:接收用户的请求(request),处理请求,做出响应. Web服务器软件:接收用户的请求(request),处理请求,做出响应,再Web服务 ...
- PAT—优化Java从控制台读取信息的速度
PAT对Scanner类很不友好,会花费大量时间,导致运行时间超时.可采用下列代码优化时间 BufferedReader bf = new BufferedReader(new InputStream ...