SalesforceでRest APIを使用するための設定

2019年12月16日

今回は世界中の企業で使用されているWebシステム、SalesforceのREST APIを使用する記事を書いていきます。

Salesforceは顧客管理などができるシステムで非常にカスタマイズ性が高いです。説明は面倒なので詳細は「https://www.salesforce.com/jp/」をご覧ください。

このシステムにはSalesforce REST APIというHTTPリクエストで特定の値を送信することでSalesforceのデータにアクセス可能なインターフェースを提供しています。

例えば、このAPIを使うことでオリジナルのアプリを作成し、Salesforceのデータを表示したり、データ更新をしたりするシステムを組んだり、既存のシステムと連携する機能を実装したりできます。

それでは早速、REST APIを使用するための設定をしていきたいと思います。

Salesforce側の設定

まずは接続アプリケーションの設定を行います。

画面から設定を選択

左サイドの検索窓に「アプリケーションマネージャ」→「アプリケーションマネージャ」を選択→「新規接続アプリケーション」を選択

次に接続先アプリケーション名、API参照名、取引先責任者メールを設定します。OAuth設定の有効化を選択し、選択したOAuth範囲の右側のリストにフルアクセスを追加して保存してください。

設定に関しては以上となります。

必要なキー情報の取得

設定した後はアプリケーションがAPIに接続する際に必要な情報を取得する方法を見ていきましょう。

必要な情報はコンシューマの秘密とコンシューマ鍵です。

先ほど登録した内容を閲覧できるリストを開き参照で開くとコンシューマ鍵とコンシューマの秘密を表示できます。


次に、APIの利用時にIDとパスワードでログインする場合の方法となりますが、ユーザーのセキュリティトークンが必要になりますので、忘れた方はリセットして新しく取得しておきましょう。

右上のログインユーザーの情報から設定を開きます。

私のセキュリティトークンのリセットを開きセキュリティトークンのリセットのボタンを押下しましょう。

リセット後ユーザーのメールアドレスに新しいセキュリティトークンが送信されます。

以上で必要な情報は取得完了です。

Javaでログインするプログラムサンプル

それでは使い慣れたJavaを使ってSalesforceにログインするプログラムを組んでみます。

Java11標準で追加された新しいHTTPリクエストクラスを使ってみましょう。

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpClient.Version;
import java.net.http.HttpRequest;
import java.net.http.HttpRequest.BodyPublishers;
import java.net.http.HttpResponse;
import java.net.http.HttpResponse.BodyHandler;
import java.nio.charset.StandardCharsets;


public class SForceTest11 {
	public static void main(String[] args) {
		try {
			String url = "https://login.salesforce.com/services/oauth2/token";
			StringBuilder sb =  new StringBuilder();
			sb.append("grant_type=password").append("&");
			sb.append("client_id=54LOAKJL+DJALH.0224D.__jSSAFfsfM__oKLJLKFJSLKJkjLKJSdkjklsjlkdfk253Ge5153213faADdegft133").append("&");//コンシューマ鍵
			sb.append("client_secret=LSFJHLS2313221SAD325FAD21321").append("&");//コンシューマの秘密
			sb.append("username=test%40mail.co.jp").append("&");//test@mail.co.jpなどSalesforceのユーザー名を指定
			sb.append("password=aaaasdkjLKJHGK23DA2dda");//パスワード+セキュリティートークン

			HttpRequest request = HttpRequest
					.newBuilder(URI.create(url))
					.POST(BodyPublishers.ofString(sb.toString()))
					.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8")
					.build();
			BodyHandler<String> bodyHandler = HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8);
			HttpResponse<String> response = HttpClient.newBuilder().version(Version.HTTP_1_1).build().send(request, bodyHandler);
			String responseText = response.body();

			System.out.println(responseText);

		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
実行結果コンソール(インデント付与済み)

{ "access_token": "000A000A0a0A0!QAKAJDSKLNDLAS5215153153AD21312A.LKJHSADLKJAL2465461256151111010000254", "instance_url": "https://app.salesforce.com", "id": "https://login.salesforce.com/id/00D0ED/00392HJGJH00XM000000", "token_type": "Bearer", "issued_at": "73268", "signature": "fkhjsakdfl/jksfdljk2/b1olCBVsdsDG+zZC76ad7889DFDJKY=" }

似たような形式のレスポンスが返ってきたらOKです。

ログイン、レコードの作成、取得、更新、削除などを行う

試しにJavaだけじゃなく、いろんなプログラム言語でSalesforceのAPIを使ってみましょう。
どの言語も標準のHTTPリクエスト機能を利用して実装します。

Java

Javaは上記で11のAPIを使っていますので、あえて古い8で実装してみました。

C#

C#はVisualStudioで実装しました。Monoとかじゃなく普通に.NET使ってます。

VB

VBもVisualStudioで実装しました。同じく.NET使ってます。

Swift

SwiftはVersion5.0.1を使用しました。IDEはXCODE使ってます。