【Knowledge】使用 Apex REST 服务统合外部service
概要
web service 和 http callout 的区别
通过Apex callout实现与外部service的接续,主要有2种类型
- 以 WSDL 为 base 的 callout,使用 xml 形式接续外部soap web service。
- 使用 REST 和 JSON 形式的 http callout。
区别
- WSDL 的 callout 主要适用于 SOAP Web service。
- Http 的 callout 使用的是 http service,既可以是 SOAP 也可以是 REST。
应用场景
- 目前主流使用 REST,工作在应用层,代码少,JSON格式易读。
- SOAP工作在网络层,主要是企业使用,主要为了统合原有application。
http callout 实装
外部 endpoint 的承认
连接外部service时,需要在sf系统首先承认外部endpoint
- 設定 ⇒ クイック検索 ⇒ リモートサイトの設定
- リモートサイトのURL 設定
- 例① https://th-apex-http-callout.herokuapp.com
- 例② https://th-apex-soap-service.herokuapp.com
callout的示意图
get 数据测试
在开发者console的匿名窗口中,输入下列代码测试
Http http = new Http();
HttpRequest request = new HttpRequest();
request.setEndpoint('https://th-apex-http-callout.herokuapp.com/animals');
request.setMethod('GET');
HttpResponse response = http.send(request);
// If the request is successful, parse the JSON response.
if (response.getStatusCode() == 200) {
// Deserialize the JSON string into collections of primitive data types.
Map<String, Object> results = (Map<String, Object>) JSON.deserializeUntyped(response.getBody());
// Cast the values in the 'animals' key as a list
List<Object> animals = (List<Object>) results.get('animals');
System.debug('Received the following animals:');
for (Object animal: animals) {
System.debug(animal);
}
}
post 数据测试
开发者console的匿名窗口中,输入下列代码测试
Http http = new Http();
HttpRequest request = new HttpRequest();
request.setEndpoint('https://th-apex-http-callout.herokuapp.com/animals');
request.setMethod('POST');
request.setHeader('Content-Type', 'application/json;charset=UTF-8');
// Set the body as a JSON object
request.setBody('{"name":"mighty moose"}');
HttpResponse response = http.send(request);
// Parse the JSON response
if (response.getStatusCode() != 201) {
System.debug('The status code returned was not expected: ' +
response.getStatusCode() + ' ' + response.getStatus());
} else {
System.debug(response.getBody());
}
合并上面两者到一个类中
public class AnimalsCallouts {
public static HttpResponse makeGetCallout() {
Http http = new Http();
HttpRequest request = new HttpRequest();
request.setEndpoint('https://th-apex-http-callout.herokuapp.com/animals');
request.setMethod('GET');
HttpResponse response = http.send(request);
// If the request is successful, parse the JSON response.
if (response.getStatusCode() == 200) {
// Deserializes the JSON string into collections of primitive data types.
Map<String, Object> results = (Map<String, Object>) JSON.deserializeUntyped(response.getBody());
// Cast the values in the 'animals' key as a list
List<Object> animals = (List<Object>) results.get('animals');
System.debug