88
86

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

外部システムからSalesforceのREST API を使用する

Last updated at Posted at 2020-04-23

外部システムからSalesforceのREST API を使用してみる

接続アプリケーションの作成から標準REST APIをコールするまで。
Apex REST Webサービスおよび Apex REST コールアウトはここでは扱いません。

1. インテグレーション用ユーザの作成

REST APIを使用するためにはまず、インテグレーション用ユーザを作成する必要があります。
外部システムからSalesforceのREST APIを使用する際は、まずインテグレーション用ユーザにログインする必要があります。
外部システムはインテグレーション用ユーザの権限、共有設定によって制限を受けます。

  1. インテグレーション用にユーザとプロファイルを作成します。
  2. インテグレーション用プロファイルでシステム管理者権限の「API の有効化」が有効になっているのを確認します。
    RESTAPI001.png

参考

2. 接続アプリケーションを作成する(OAuthによる認証)

  1. [設定] - [アプリケーション] - [アプリケーションマネージャ]1 から[新規接続アプリケーション]をクリックします。
  2. 必要事項を入力します。
  3. [OAuth 設定の有効化]にチェックを入れ、コールバックURLとOAuthの範囲を指定します(OAuthの範囲についてはこちらを参照)。
    RESTAPI002_2.png
  4. 保存すると、接続アプリケーションの定義の詳細ページが表示されます。ここのコンシューマ鍵とコンシューマの秘密は認証を行う際に必要になります。(このページは [設定] - [オブジェクトマネージャ] から対象の接続アプリケーションの▼ボタンから[参照]をクリックすることで表示できます)
    RESTAPI003_2.png
  5. [Manage]ボタンをクリックすると、接続アプリケーションのポリシーの詳細ページが表示されます。この画面で接続アプリケーションのOAuthアクセスポリシーを管理します。([設定] - [アプリケーション] - [接続アプリケーション] - [接続アプリケーションを管理する] からもアクセス可能です)
    RESTAPI011.png
  • IP制限の緩和
    • IP制限を適用: ユーザプロファイルに設定されたIP制限が適用されます。
    • IP制限を適用し、更新トークンを緩和: 更新トークを使用してアクセストークンを取得する場合、IP制限が適用されません。
    • 有効化したデバイスのIP制限を緩和: アプリケーションを実行しているユーザは、次のいずれかの条件を満たす場合に、組織の IP 制限をスキップできます。
      • アプリケーションに IP 範囲のホワイトリストが存在し、アプリケーションが Web サーバの認証フローを使用している場合。ホワイトリストに登録された IP からの要求のみが許可されます。
      • アプリケーションに IP 範囲のホワイトリストがなく、アプリケーションが Web サーバの認証フローを使用していて、ユーザが新しいブラウザまたはデバイスから Salesforce にアクセスした場合に ID 確認を正常に完了している場合。
    • IP制限を緩和: ユーザプロファイルに設定されたIP制限は適用されずにアプリケーションを実行できます。
  • 許可されているユーザ
    • すべてのユーザは自己承認可能: すべてのユーザがアプリケーションを実行できます。アプリケーションの初回実行時にアプリケーションを承認する画面がユーザに表示されます。
    • 管理者が承認したユーザは事前承認済み: 関連付けられたプロファイルと権限セットが適用されているユーザのみがアプリケーションを実行できます(ただし、ユーザが「任意の API クライアントを使用」権限を持っている場合は実行可能です)。
  • シングルログアウトを有効化
    • チェックがついている時、ユーザがSalesforceからログアウトすると接続アプリケーションからも自動ログアウトします(ログアウトリクエストを送信するURLの設定が必要です)。
  • カスタム接続アプリケーションハンドラ
    • Apexを使用してカスタムのポリシーを設定することができます。

参考

3. 外部システムで認証を行う

Salesforceで使用できる認証フローは下記の公式ヘルプ記事に記載されています。
OAuth 認証フロー

ここでは「ユーザ名パスワード OAuth 認証フロー」について扱っていきたいと思います
(追記20201019 __このフローはログイン情報をやり取りするため非推奨です。__対話形式のログインを使用しない場合は「OAuth 2.0 JWT ベアラーフロー」を使用します)。
また、ここからは外部システムのシュミレーションとして、Chromeの拡張機能である「Talend API Tester」を使っていきます。

セキュリティトークンの取得

ユーザ名パスワード OAuth 認証フロー ではセキュリティトークンが必要なので、用意します。

  1. インテグレーションユーサでログインし、[右上のユーザアイコン] - [設定] - [私の個人情報] - [私のセキュリティトークンのリセット]2 の[セキュリティトークンのリセット]をクリックします。※[セキュリティトークンのリセット]が表示されない場合、セキュリティトークンの取得は必要ありません。
    RESTAPI004.png
  2. インテグレーション用ユーザに設定しているメールアドレスにセキュリティトークンが記載されたメールが届きます。

ユーザ名パスワード OAuth 認証

  1. Talend API Tester を実行します。
  2. リクエストを新規で作成し、下記のように設定を行います。
    • METHOD: POST
    • パス: 適切なSalesforce トークン要求エンドポイント(例: https://login.salesforce.com/services/oauth2/token)
    • HEADERS
      • Content-Type: application/x-www-form-urlencoded
  3. BODYにFormを選択し、次のパラメータを設定します。
    • grant_type=password
    • client_id=[接続アプリケーションのコンシューマ鍵]
    • client_secret=[接続アプリケーションのコンシューマの秘密]
    • username=[インテグレーション用ユーザのSalesforceユーザ名]
    • password=[インテグレーション用ユーザのSalesforceログインパスワード+セキュリティトークン]
      RESTAPI005_1.png
  4. Sendボタンを押すと、認証結果が返されます。RESTリクエストを送信するときにレスポンスボディのaccess_tokenを使用します。
    RESTAPI006_1.png

参考

4. REST API リソースを使ったHTTPリクエストの送信

Salesforce の REST API でサポートされている REST リソースの一覧はこちらから確認できます。
使用例をいくつか記します。

オブジェクトのメタデータを取得する

指定したオブジェクトの項目、子リレーションなどのメタデータを取得します。
RESTリソースはsObject Describe を使用します。

  1. Talend API Tester を実行します。
  2. リクエストを新規で作成し、下記のように設定を行います。
    • METHOD: GET (使用するHTTPメソッドは公式のリファレンス)に記載されています。)
    • パス: http://[カスタムドメイン]/services/data/[APIバージョン]/sobjects/[オブジェクトのAPI参照名]/describe
    • HEADERS
      • Authorization: Bearer [認証のレスポンスのaccess_tokenの値] ※注意:Bearerとトークンの間に半角スペースが必要
        RESTAPI007_1.png
  3. Sendボタンを押すと、オブジェクトのメタデータが返されます。
    RESTAPI008.PNG

例で使用したパス: /services/data/v36.0/sobjects/Account/describe

SOQLクエリを実行する

クエリ結果を取得します。
RESTリソースはQuery を使用します。

  1. Talend API Tester を実行します。
  2. リクエストを新規で作成し、下記のように設定を行います。
    • METHOD: GET
    • パス: http://[カスタムドメイン]/services/data/[APIバージョン]/query/?q=[SOQLクエリ] ※注意:クエリの半角スペースは「+」に置き換えが必要
    • HEADERS
      • Authorization: Bearer [認証のレスポンスのaccess_tokenの値] ※注意:Bearerとトークンの間に半角スペースが必要
        RESTAPI009_1.png
  3. Sendボタンを押すと、クエリ結果が返されます。
    RESTAPI010.png

例で使用したパス: /services/data/v36.0/query/?q=SELECT+Id,+Name+FROM+Account

その他の例

REST API 開発者ガイドにはREST APIの例が書かれています。

参考

  1. Classic → [設定] - [ビルド] - [作成] - [アプリケーション] の接続アプリケーションのセクションから新規ボタンをクリック

  2. Classic → [右上のユーザ氏名] - [私の設定] - [個人用] - [私のセキュリティトークンのリセット]

88
86
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
88
86

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?