概要
Salesforceから外部システムのAPIを叩く方法についてご紹介致します。
今回は、SFで取引先レコードが作成されたら、外部システムにもそれをPOSTするという例を手掛かりとして解説していきます。
方法
①外部システム側のAPI認証情報を取得する。
APIを叩く際のリクエストの形式を確認します。
- エンドポイントURL
- APIトークン
- APIキー
- HTTPメソッド
- コンテンツタイプ
- BODYの形式
②Calloutロジックを開発する。
APIを叩くCallout ClassをApex TriggerやFlowから呼び出します。
Callout Classは非同期にする必要があるため、@futureをつけるかQueueableインターフェースを利用するかのどちらかです。
今回はApex TriggerからCallout Classを呼び出す場合のサンプルコードを紹介します。
Trigger Classサンプル
trigger AccountPostTrigger on Account (after insert)
for(Account record :trigger.new){
JSONGenerator gen = JSON.createGenerator(true);
gen.writeStartObject();
gen.writeStringField('name', Name);
gen.writeEndObject();
String jsonS = gen.getAsString();
AccountApiPost.makeApiPost(jsonS);
}
}
※実際にはfor文の中でfutureメソッドを呼び出すのはアンチパターンですが、今回は最低限必要なコードのみご紹介しております。
Callout Classサンプル
public class AccountApiPost{
@future(callout=true)
public static void makeApiPost(String jsonS){
Http http = new Http();
HttpRequest request = new HttpRequest();
request.setEndpoint('https://api.test.co.jp');
request.setMethod('POST');
request.setHeader('Content-Type', 'application/json');
request.setHeader('Authorization', 'APIトークン');
request.setHeader('x-api-key', 'APIキー');
request.setBody(jsonS);
HttpResponse response = http.send(request);
if (response.getStatusCode() == 200 || response.getStatusCode() == 201) {
System.debug('API linkage was successful: ' +
response.getStatusCode() + ' ' + response.getStatus()+ ' ' + response.getBody());
} else {
System.debug('The status code returned was not expected: ' +
response.getStatusCode() + ' ' + response.getStatus()+ ' ' + response.getBody());
}
}
}
※現実のコードではfutureメソッドの引数に配列を取ります。