メインコンテンツにスキップ

【FAQ】Salesforce連携の際のAPIコール数について

Salesforce連携の際のAPIコール数についてご案内いたします。

小谷中一総 avatar
対応者:小谷中一総
3か月以上前に更新

はじめに


本文章では、 SALESCORE が Salesforce の API を何回叩くかに関する概算を示します。様々な設定によって Salesforce への API リクエストの数は変わりますが、そのような変数をすべて考慮すると説明が複雑になりすぎるため、本文章ではできるだけ単純な状況を仮定します。


Sync でレコードを編集して保存する場合


シートでレコードを編集(作成、上書き、または削除)して保存ボタンを押す場合を考えます。編集の数と同じ回数だけ、 SALESCORE の API サーバは Salesforce の更新用 API を叩きます。 Salesforce はそのような書き込みリクエストを受け付けると、レコードの最新更新時刻フィールドなどを更新します。その情報が含まれた状態のレコードを取得するため、 SALESCORE の API サーバは更新終了後に Salesforce のレコード取得用 API を叩きます。

以下の例では、取引先モデルが 1 レコード分、ToDo モデルが2 レコード分編集されているので、合計 3 + 3 = 6 回 Salesforce の API を叩くことになります。


同期


SALESCORE と Salesforce の間でデータの同期を行う方法として、日常的に行われる差分同期と初回にだけ行われる一括同期があります。


差分同期する場合


SALESCORE は Salesforce から最新のレコードを断続的に取得しています。前回の同期以降で更新のあったレコードを取得するこの同期の形態を、差分同期と言います。差分同期は 1 時間に一回自動で、あるいは SALESCORE の UI 上から手動で開始することができます。

差分同期では、 SALESCORE の ChildWorker はモデルごとに 1 回ずつ Salesforce のレコード取得用 API を叩きます。 ただし、 Salesforce のレコード取得用 API で一度に取得できるレコードの数には制限がある(おおよそ 2000 レコード)ので、前回の同期から特定のモデルに対してたくさんの更新があった場合には、それだけ Salesforce のレコード取得用 API を叩く回数が増えます。

例えば差分同期対象のモデルが 30 個、各モデルが差分同期毎に 2,500 個の更新されたレコードをもっているとすると、 1 時間毎に 30 * ceil(2,500/2,000) = 60 回の Salesforce の API コールが発生することになります(手動同期はしないものとします)。


一括同期する場合


初回のみ、 Salesforce の Bulk API v2 を使って各モデルの全てのレコードを取得します。これを一括同期と言います。処理の流れは差分同期と同一です。挙動の安定性のため SALESCORE 側で一度に 5,000 レコードずつ取得するように制限をかけています。例えば一括同期対象のモデルが 30 個、各モデルが 30,000 個のレコードをもっているとすると、 30 * ceil(30,000 / 5,000) = 180 回 Bulk API v2 を叩くことになります。


Salesforce のリクエスト数に関する制限


SALESCORE と連携して使用するにあたり、特に気にするべき Salesforce 側の制限についてご紹介します。


SalesforceのAPI要求数制限について


Salesforce の REST API (レコード更新用 API やレコード取得用 API) には、 直近 24 時間あたりに叩ける回数に制限がかかっています。これを API 要求数制限と言います。例えば、 Enterprise Edition で Salesforceライセンスのユーザーが 10 人いるとき、許容される 24 時間あたりの API コール数は、 100,000 + 10 * 1,000 = 110,000 回 です(現在の組織のエディション、ライセンス数は、Salesforceの「設定」ページより「組織情報」を開いてご確認ください)。

また、現在の組織の API 要求数は、以下の手順で[システムの概要] ページを開くことで確認することができます。

  1. [設定] に移動します。

  2. [クイック検索] ボックスで*「システムの概要」*を検索します。

  3. ここで [API 要求数 (この 24 時間以内)] を探します。


Apex ガバナ制限


一括同期に使われる BULK API v2 には Apex ガバナ制限が適用されます。特に『発行される SOQL クエリの合計数』について、上限が 200 であるため、 200 程度もしくはそれ以上の数のオブジェクトを同期する際は注意が必要です。その他の制限について、現在まで制限にかかった実績はありません。 Apex ガバナ制限が問題となる場合、 REST API を使った同期も可能です。


関連資料


こちらの回答で解決しましたか?