SOAP API
特徴
- リモートサイトからSalesforceの標準APIを呼び出す為のインバウンド連携
- 設計パターンの「リモートプロセス呼び出し-要求と応答(同期処理)」に該当する
- Salesforceが提供する標準APIを利用する為、仕様に基づけば即時連携が可能となる
- 認証は主にセッションID(初回ログイン時のセッションIDを再利用する)
- 返却形式はXML
- XMLによりデータを構造化で表現出来る為、親子関係のデータの一括更新処理が可能
- SalesforceからWSDLをダウンロードして、リモートサイトでプロキシクラス及びコールが実装可能
- EnterpriseWSDLは、全てのオブジェクト情報が入っており、リモートサイト側でタイプセーフが保証される。しかし、Salesforceの変更に伴いリモートサイト側のWSDL最新化が必要というトレードオフ関係。(WSDLの読み直し)
- PartnerWSDLは、認証機能、基底クラス(SObjet型)、メタデータのみ提供される。その為、リモートサイト側でタイプセーフ実装は不可。リフレクションを活用して動的プログラミングが必要となる。ただし、Salesforce側の変更には強い。
- 設定|インテグレーション|API からWSDLのダウンロードが可能
- 増分データ取得が可能なgetUpdatedおよびgetDeletedメソッドが提供されているので、例えば24時間以内に更新されたデータを取得可能
セキュリティ
- データ
- ログイン時のユーザに対応したSalesforce側のデータセキュリティが働く(オブジェクト権限、項目レベルセキュリティなど)
- ネットワーク
- TLSプロトコルが必須
- Salesforceネットワーク認証により接続可能な時間帯、プロファイルまたは組織全体でのIPアドレス範囲の制御が可能
サンプル
ConnectorConfig config = new ConnectorConfig();
config.setUsername(USERNAME);
// パスワード+APIトークンで認証キー
config.setPassword(PASSWORD + TOKEN);
// EnterpriseWSDLまたはPartinerWSDLによりConnectionクラスが変わる(下はEnterpriseWSDL)
EnterpriseConnection connection = Connector.newConnection(config);
Lead ld = new Lead();
ld.setName("TEST");
connection.create(new SObject[] {ld});
注意すべきガバナ制限
API参照名 | 制限 | 備考 |
---|---|---|
login() | 1 時間につき 1 ユーザあたり最大 3,600 コール | 「Login Rate Exceeded」(ログイン数の制限を超えました。) が出る場合、初回ログイン時のセッションIDを使い回す事 |
create() udpate() |
最大作成レコード件数 最大更新レコード件数 |
1 回のコールで最大 200 個のレコードを追加・更新できます。200レコードを超えると操作全体が失敗します。 |
query() | 取得レコード件数 | 1回のコールで最小200件から最大2000件まで取得可能 |
SOAPを選択するシナリオ
- 50,000件以下のデータCRUD処理
- ただし、シリアル処理になるので処理時間がかかる。かつ、1回のコールで処理できるデフォルトバッチサイズ(レコード件数)は500件。最小200件、最大2000件まで変更可能。アーキテクチャ選択の閾値とされる50,000件のデータを処理するのに最小で50000/2000=25回のSOAPコールが必要。
- 親子関係のリレーションデータを一括処理する場合
- タイプセーフな実装を行いたい場合(EnterpriseWSDL)
- アウトバウンドでセキュリティポリシーとしてファイアウォール、プロキシが通過難しく、リモートサイトからコールインしてもらう場合
- 24時間以内に更新されたような増分データを取得したい場合