Heroku での Salesforce REST API の使用
学習の目的
この単元を完了すると、次のことができるようになります。
- Salesforce REST API を使用するユースケースを挙げる。
- 各種の認証について説明する。
- Heroku のアプリケーションで Salesforce REST API を使用する方法を説明する。
Salesforce REST API および Heroku
Salesforce REST API を使用すると、簡単な HTTP と JSON 要求を使用して Salesforce と容易に統合できます。さまざまな REST API が用意されており、Salesforce 上のほぼすべてにアクセスできます。これにより、Salesforce 内のデータ、プロセス、およびメタデータを使用して、カスタムアプリケーションでさまざまな処理を行うことができます。REST API は認証に OAuth を使用します。これは、REST 認証を処理するための標準の方法です。
REST API を直接使用することもできますが、API を包み込む多くのラッパーライブラリが用意されており、Node.js、Python、Ruby、Java などでそれらを容易に使用することができます。ラッパーライブラリは、認証、要求処理、応答処理など、低レベルのタスクを処理します。したがって、次のような HTTP 要求 (例として Node.js を使用) を手動で構築する必要はありません。
const query = 'SELECT name Account'; const url = 'https://MyDomainName.my.salesforce.com/services/data/v59.0/query/?q=' + encodeURIComponent(query); request.get(url, { 'auth':{ 'bearer':'bearerToken' } });
代わりに、Node.js 用のオープンソースの JSForce ライブラリを使用することで次のような簡単な行になります。
conn.query('SELECT name FROM Account', callback);
最終的に jsforce
ライブラリは陰に隠れて同じことを行うだけですが、このライブラリを使用すると API が使いやすくなります。
アプリケーション単位のインテグレーションおよびカスタムユーザーインターフェースを Salesforce REST API 上に構築できます。これらの最大の違いは、認証の処理方法です。アプリケーション単位のインテグレーションでは、アプリケーションが単一のインテグレーションユーザーを認識し、REST API へのすべてのコールをこのユーザーとして実行します。カスタムユーザーインターフェースでは、カスタムアプリケーションとの認証をユーザーが直接行いません。代わりに、ユーザーは OAuth プロセスに従って、カスタムアプリケーションがユーザーに代わって API コールを実行することを承認します。カスタムユーザーインターフェースを使用している指定ユーザーに代わって REST API への各要求が実行されます。
アプリケーション単位のインテグレーションの 1 つのユースケースとして、データの変換と関連付けを行った後にデータの複製またはプロキシ化を行って別のシステムでデータを使用することがあります。たとえば、Heroku 上で動作する顧客向けの注文管理アプリケーションが Salesforce から顧客情報を取得する必要があります。この設定では、単一インテグレーションユーザーを使用して、必要なすべての情報を Salesforce から取得できます。
ただし、注文管理アプリケーションがバックオフィス向けであり、ユーザーが Salesforce を介してログインする場合、アプリケーションは、OAuth を使用するカスタムユーザーインターフェースになります。これにより、注文管理アプリケーションが指定ユーザーに代わって API 要求を実行できます。この場合、セキュリティおよび監査の目的で、どの指定ユーザーが各 REST コールを実行するかを認識することが重要になります。
Heroku では、どちらの種類のアプリケーションも容易にリリースでき、OAuth と Salesforce REST API を容易に活用できます。
時間が取れるときに Salesforce REST API のドキュメントを参照して低レベルの API を学習してください。
OAuth を使用する REST API 認証
REST API を使用する上で認証は重要な要素です。API への各要求に認証トークンまたは鍵を含める必要があるためです。アプリケーション単位のインテグレーションまたはカスタムユーザーインターフェースのどちらを使用する場合も、アプリケーションは Salesforce 内にある接続アプリケーションを必要とします。これにより、どのアプリケーションが要求を実行しているかを Salesforce で特定でき、組織のシステム管理者が API へのアクセスを管理できます。
単一ユーザー
アプリケーション単位のインテグレーションでは、単一インテグレーションユーザーのログイン情報をアプリケーションが認識する必要があります。これで REST API をコールし、ログイン情報を使用してログインして、認証トークンを返すことができます。
指定ユーザー
カスタムユーザーインターフェースを構築すると、アプリケーションは実際のログイン情報を一切受け取りません。代わりに、認証トークンを取得するコードが OAuth プロセスによってアプリケーションに提供されます。Salesforce へのアプリケーションのアクセスはユーザーが手動で認証します。そのフローは次のとおりです。
- 認証を要求するページにユーザーがアクセスします。
- Heroku のアプリケーションがユーザーを Salesforce OAuth ページにリダイレクトします。
- アプリケーションが以前認証されていない場合、ユーザーに認証を促すメッセージが表示されます。
- 認証されると、Salesforce はユーザーをコードと共にアプリケーションに戻します。
- アプリケーションはこのコードを使用してアクセストークンと更新トークンを取得します。
- アプリケーションはアクセストークンを使用して、Salesforce への REST API コールを実行します。
通常、アクセストークンと更新トークンは暗号化され、何らかのセッション状態またはデータベースの形式で保存されます。そのため、ユーザーは要求のたびに何度も認証フローに進む必要はありません。
これらのトークンには機密情報が含まれます。そのため、取り扱いには最新の注意が必要です。