外部システムからSalesforceのREST API を使用してみる
接続アプリケーションの作成から標準REST APIをコールするまで。
Apex REST Webサービスおよび Apex REST コールアウトはここでは扱いません。
1. インテグレーション用ユーザの作成
REST APIを使用するためにはまず、インテグレーション用ユーザを作成する必要があります。
外部システムからSalesforceのREST APIを使用する際は、まずインテグレーション用ユーザにログインする必要があります。
外部システムはインテグレーション用ユーザの権限、共有設定によって制限を受けます。
参考
2. 接続アプリケーションを作成する(OAuthによる認証)
- [設定] - [アプリケーション] - [アプリケーションマネージャ]1 から[新規接続アプリケーション]をクリックします。
- 必要事項を入力します。
- [OAuth 設定の有効化]にチェックを入れ、コールバックURLとOAuthの範囲を指定します(OAuthの範囲についてはこちらを参照)。
- 保存すると、接続アプリケーションの定義の詳細ページが表示されます。ここのコンシューマ鍵とコンシューマの秘密は認証を行う際に必要になります。(このページは [設定] - [オブジェクトマネージャ] から対象の接続アプリケーションの▼ボタンから[参照]をクリックすることで表示できます)
- [Manage]ボタンをクリックすると、接続アプリケーションのポリシーの詳細ページが表示されます。この画面で接続アプリケーションのOAuthアクセスポリシーを管理します。([設定] - [アプリケーション] - [接続アプリケーション] - [接続アプリケーションを管理する] からもアクセス可能です)
- IP制限の緩和
- IP制限を適用: ユーザプロファイルに設定されたIP制限が適用されます。
- IP制限を適用し、更新トークンを緩和: 更新トークを使用してアクセストークンを取得する場合、IP制限が適用されません。
- 有効化したデバイスのIP制限を緩和: アプリケーションを実行しているユーザは、次のいずれかの条件を満たす場合に、組織の IP 制限をスキップできます。
- アプリケーションに IP 範囲のホワイトリストが存在し、アプリケーションが Web サーバの認証フローを使用している場合。ホワイトリストに登録された IP からの要求のみが許可されます。
- アプリケーションに IP 範囲のホワイトリストがなく、アプリケーションが Web サーバの認証フローを使用していて、ユーザが新しいブラウザまたはデバイスから Salesforce にアクセスした場合に ID 確認を正常に完了している場合。
- IP制限を緩和: ユーザプロファイルに設定されたIP制限は適用されずにアプリケーションを実行できます。
- 許可されているユーザ
- すべてのユーザは自己承認可能: すべてのユーザがアプリケーションを実行できます。アプリケーションの初回実行時にアプリケーションを承認する画面がユーザに表示されます。
- 管理者が承認したユーザは事前承認済み: 関連付けられたプロファイルと権限セットが適用されているユーザのみがアプリケーションを実行できます(ただし、ユーザが「任意の API クライアントを使用」権限を持っている場合は実行可能です)。
- シングルログアウトを有効化
- チェックがついている時、ユーザがSalesforceからログアウトすると接続アプリケーションからも自動ログアウトします(ログアウトリクエストを送信するURLの設定が必要です)。
- カスタム接続アプリケーションハンドラ
- Apexを使用してカスタムのポリシーを設定することができます。
参考
- 接続アプリケーションの基本設定 | コードを使用したSALESFORCEの拡張
- API インテグレーション用の OAuth 設定の有効化 | コードを使用したSALESFORCEの拡張
- OAuth トークンおよび範囲 | コードを使用したSALESFORCEの拡張
- クイックスタート | REST API 開発者ガイド
- 接続アプリケーションの OAuth アクセスポリシーの管理 | Salesforceヘルプ
- カスタム接続アプリケーションハンドラを介したアクセスの管理 | Salesforceヘルプ
3. 外部システムで認証を行う
Salesforceで使用できる認証フローは下記の公式ヘルプ記事に記載されています。
OAuth 認証フロー
ここでは「ユーザ名パスワード OAuth 認証フロー」について扱っていきたいと思います
(追記20201019 __このフローはログイン情報をやり取りするため非推奨です。__対話形式のログインを使用しない場合は「OAuth 2.0 JWT ベアラーフロー」を使用します)。
また、ここからは外部システムのシュミレーションとして、Chromeの拡張機能である「Talend API Tester」を使っていきます。
セキュリティトークンの取得
ユーザ名パスワード OAuth 認証フロー ではセキュリティトークンが必要なので、用意します。
- インテグレーションユーサでログインし、[右上のユーザアイコン] - [設定] - [私の個人情報] - [私のセキュリティトークンのリセット]2 の[セキュリティトークンのリセット]をクリックします。※[セキュリティトークンのリセット]が表示されない場合、セキュリティトークンの取得は必要ありません。
- インテグレーション用ユーザに設定しているメールアドレスにセキュリティトークンが記載されたメールが届きます。
ユーザ名パスワード OAuth 認証
- Talend API Tester を実行します。
- リクエストを新規で作成し、下記のように設定を行います。
- METHOD: POST
- パス: 適切なSalesforce トークン要求エンドポイント(例:
https://login.salesforce.com/services/oauth2/token
) - HEADERS
- Content-Type:
application/x-www-form-urlencoded
- Content-Type:
- BODYにFormを選択し、次のパラメータを設定します。
- Sendボタンを押すと、認証結果が返されます。RESTリクエストを送信するときにレスポンスボディのaccess_tokenを使用します。
参考
4. REST API リソースを使ったHTTPリクエストの送信
Salesforce の REST API でサポートされている REST リソースの一覧はこちらから確認できます。
使用例をいくつか記します。
オブジェクトのメタデータを取得する
指定したオブジェクトの項目、子リレーションなどのメタデータを取得します。
RESTリソースはsObject Describe を使用します。
- Talend API Tester を実行します。
- リクエストを新規で作成し、下記のように設定を行います。
- METHOD: GET (使用するHTTPメソッドは公式のリファレンス)に記載されています。)
- パス:
http://[カスタムドメイン]/services/data/[APIバージョン]/sobjects/[オブジェクトのAPI参照名]/describe
- HEADERS
- Sendボタンを押すと、オブジェクトのメタデータが返されます。
例で使用したパス: /services/data/v36.0/sobjects/Account/describe
SOQLクエリを実行する
クエリ結果を取得します。
RESTリソースはQuery を使用します。
例で使用したパス: /services/data/v36.0/query/?q=SELECT+Id,+Name+FROM+Account
その他の例
REST API 開発者ガイドにはREST APIの例が書かれています。