こんにちは、荒木です。
セールスフォースを導入するにあたって、データ連携は様々なシーンで必要となります。 例えば、初期移行や基幹システムとのデータの同期、他システムやクラウドとのSOA等々・・・。
このようなニーズから、世の中にはセールスフォースとのデータ連携ツールが数多く存在します。 では、目的に合ったツールや使用方法はどのように選定すればよいでしょう?
セールスフォースには外部から接続するための様々なAPIが公開されています。 このような疑問を解決するためには、ツールが使用しているAPIを知ることも重要です。
今回はセールスフォースのAPIと、それを使用している連携ツールについての内容を、3回の連載に分けて紹介したいと思います。
APIの種類
まず、セールフォースで公開されているAPIを紹介します。(Summer'13 時点)
| API名 | プロトコル | 操作対象 | 操作 | 概要 |
| SOAP API | SOAP | レコード | CRUD | 標準的なAPIです。 レコードの操作以外にも、定義されたメタデータの取得やユーザパスワードの変更、メール送信などのユーティリティ機能も用意されています。 大容量のデータを操作することもできますが、効率性はBulk APIに劣ります。 |
| メタデータ | Read | |||
| ユーティリティ | - | |||
| Bulk API | REST | レコード | CRUD | 大容量のデータを操作することに適しています。 サーバサイドで非同期に処理するためSOAP APIより効率的で、処理時間やAPIコール数を抑えることができます。 ただし、結果受け取りのためにはポーリングを行う必要があります。 |
| REST API | REST | レコード | CRUD | 軽量なデータを操作することに適しています。 実装が容易であり通信量も軽量ですが大容量のデータを扱うことには適していません。ブラウザアプリやモバイルとの連携に最適です。 |
| Metadata API | SOAP | メタデータ | CRUD | 組織のカスタマイズを操作します。 SOAP APIでは扱えない属性の取得や、メタデータの更新が行えます。 |
| Streaming API | Bayeux | 更新イベント | Push | サーバからクライアントへデータの更新を通知します。 しかし、プロトコルの仕組みやAPIの制限上、通知の保証が難しいためコアデータの連携には適していません。 Web画面に埋め込み、ユーザへ更新情報を通知するなどの使用方法が挙げられます。 |
| Apex SOAP API | SOAP | Apex | Exec | SOAP Webサービスとして公開されたApexを起動します。 |
| Apex REST API | REST | Apex | Exec | RESTful Webサービスとして公開されたApexを起動します。 |
| Chatter REST API | REST | Chatter | CRUD | Chatterの操作に最適化されたREST APIです。 SOAP APIやREST APIでもChatterの大半の操作が可能ですが、特定の操作に関してはこのAPIを使用する必要があります。 |
| Tooling API | SOAP / REST | 開発 | - | ApexやVisualforceの開発者向けのAPIです。 ApexやVisualforceの管理、デバッグログやヒープダンプの参照など、カスタム開発ツールを作成するための機能が用意されています。 |
例えば Apex Data Loader では?
みなさんお馴染みの Apex Data Loader ではAPIをどのように使用しているか知っていますか? Apex Data Loaderは、SOAP API と Bulk API の2種類のAPIを使用しています。
デフォルトでは SOAP API を使用した接続を行いますが、「Settings」-「Use Bulk API」 にチェックを入れると Bulk API を使用した接続に切り替わります。

それでは、Apex Data Loader で使用している2種類のAPIについて掘り下げてみましょう。
まずは SOAP API から!
多くの種類のAPIが用意されていますが、まずは標準的な SOAP API を理解することが重要です。
SOAP API はAPIの中でも最も歴史が古く、Spring'12以前までは Web Services API という名称でした。 バージョンアップが繰り返され、現在では30種類以上のAPIコールが備わっています。 データ操作のAPIコールではオブジェクトに対するCRUD操作はもちろん、承認プロセスやCRMオブジェクト特有の機能、ゴミ箱へのアクセスなどが用意されています。
まず知っておくべき標準的なCRUD操作のAPIコールについて、一覧にまとめます。
| APIコール名 | 操作種類 | 概要 |
| query() | Read | SOQLを引数にクエリを実行します。 |
| queryAll() | SOQLを引数にクエリを実行します。結果データにゴミ箱のデータ、アーカイブされた活動を含みます。 | |
| queryMore() | query()、queryAll() において結果を一度に受け取れなかった場合に残りの結果セットを受け取ります。 | |
| retrieve() | IDを指定して一致するレコードを取得します。 | |
| getUpdated() | 指定した期間内に追加/更新されたレコードのID、タイムスタンプを取得します。 | |
| getDeleted() | 指定した期間内に削除されたレコードのID、タイムスタンプを取得します。 | |
| search() | 組織のデータからテキスト検索してレコードを取得します。 | |
| create() | Create | レコードを追加します。 |
| update() | Update | IDを指定してレコードを更新します。 |
| delete() | Delete | IDを指定してレコードを削除します。 |
| upsert() | Create / Update | 外部キーを指定してレコードを追加または更新します。 |
Bulk API も知っておこう!
Bulk API は、大容量のデータを操作するために最適化されています。 簡単に言うと件数の多いデータ操作において、SOAP API よりも処理時間やAPIコール数を抑えることができるというAPIです。
じゃあ、どのような処理でも Bulk API を使った方がいいのでは? ...いいえ、そうではありません。 SOAP API は同期処理であることに対して、Bulk API はサーバサイドで非同期に処理が行われます。 また、SOAP API のみアクセス時の細やかなオプション(SOAPヘッダー)を指定することができます。 さらに、Bulk API 特有のバッチ数の制限(24時間に2,000バッチまで)もあります。 これらの違いを理解してAPIを使い分ける必要があります。
なお、Bulk API では実行する処理の演算子を、サーバサイドに登録するジョブに対して指定します。 以下に指定可能なジョブの演算子をまとめます。
| ジョブの演算子 | 操作種類 | 概要 |
| INSERT | Create | レコードを追加します。 |
| UPDATE | Update | IDを指定してレコードを更新します。 |
| DELETE | Delete | IDを指定してレコードを削除します。削除されたレコードはゴミ箱に格納されます。 |
| HARD DELETE | Delete | IDを指定してレコードを削除します。削除されたレコードはゴミ箱に格納されません。 |
| UPSERT | Create / Update | 外部キーを指定してレコードを追加/更新します。 |
| QUERY | Read | SOQLを引数にクエリを実行します。結果ファイルはサーバに出力されます。 |
Apex Data Loader の各メニューでは?
それでは Apex Data Loader に話を戻して、各メニューがそれぞれどのようなAPIを使用しているのかを見ていきましょう。
![]()
- SOAP API ・・・ create() コールを使用して、CSVデータを元にレコードの追加を行います。
- Bulk API ・・・ INSERT のジョブを作成して、CSVデータを元にレコードの追加を行います。
![]()
- SOAP API ・・・ update() コールを使用して、CSVデータを元にレコードの追加を行います。
- Bulk API ・・・ UPDATE のジョブを作成して、CSVデータを元にレコードの追加を行います。
![]()
- SOAP API ・・・ upsert() コールを使用して、CSVデータを元にレコードの追加または更新を行います。
- Bulk API ・・・ UPSERT のジョブを作成して、CSVデータを元にレコードの追加または更新を行います。
![]()
- SOAP API ・・・ delete() コールを使用して、CSVデータを元にレコードの削除を行います。
- Bulk API ・・・ DELETE のジョブを作成して、CSVデータを元にレコードの削除を行います。
![]()
- SOAP API ・・・ 使用できません。
- Bulk API ・・・ HARD DELETE のジョブを作成して、CSVデータを元にレコードの削除を行います。
![]()
- SOAP API ・・・ query() コールを使用して、レコードを抽出しCSVに出力します。
- Bulk API ・・・ QUERY のジョブを作成して、レコードを抽出しCSVに出力します。
![]()
- SOAP API ・・・ queryAll() コールを使用して、レコードを抽出しCSVに出力します。
- Bulk API ・・・ 使用できません。(SOAP API で動作します)
まとめ
連携ツールがどのようにAPIを使用しているのかを知ることで、使用方法についてより深く知ることが出来ると思います。 例えば Apex Data Loader を使用する場合も、使用しているAPIマニュアル等を参照することで、どのメニューを使用すべきか、どのような点に注意すべきかを知ることが出来ます。
しかし、Apex Data Loader で使用することが出来るAPIの機能は、ほんの一部です。 次回は、弊社のクラウド型連携サービス「SkyOnDemand」でAPIをどのように使用しているかをとりあげてみたいと思います。