REST API を使用する
学習の目的
- Postman アプリケーションにログインし、Salesforce API コレクションの [REST] フォルダーに移動する。
- GET SObject Describe リソースを使用する。
- REST API を使用して取引先を作成する。
- REST API を使用してクエリを実行する。
REST のリソースとメソッド
- 使用できる API バージョンに関する概要情報を取得する。
- Account (取引先)、User (ユーザー) などの Salesforce オブジェクトやカスタムオブジェクトに関する詳細情報を取得する。
- クエリまたは検索を実行する。
- レコードを更新または削除する。
REST 要求は、リソース URI、HTTP メソッド、要求ヘッダー、およびリクエストボディの 4 つのコンポーネントで構成されます。要求ヘッダーは要求のメタデータを指定します。リクエストボディは、必要に応じて要求のデータを指定します。指定するデータがない場合は、ボディは要求から除外されます。
先へ進む前に
ここでは、Postman を使用して API コールを行います。REST 要求は任意の HTTP 送信元から行うことができます。Postman は、API を介して Salesforce 組織とやり取りするのに使用できる多くのツールの 1 つにすぎません。
最初のステップは、新しい Trailhead Playground を作成し、それを Postman アプリケーションに接続し、クロスオリジンリソース共有を設定し、Salesforce API コレクションへのフォークを作成することです。「Quick Start: Connect Postman to Salesforce (クイックスタート: Postman を Salesforce に接続する)」を修了することでこれを実行できます。
Postman アプリケーションの Salesforce コレクションの [REST] フォルダーでリソースを使用して、他の HTTP インターフェースから行うのと同じように Trailhead Playground に対して REST API コールを実行できます。Salesforce API コレクションのリソースを選択すると、メインウィンドウの上部に URI が作成されます。
Account オブジェクトに対する Describe
では、このしくみを見てみましょう。
SObject Describe リソースを使用します。このリソースは、GET メソッドと組み合わせると、オブジェクトおよびその項目に関するメタデータを返します。Account オブジェクトに describe を行うことにしましょう。
- コレクションで、Salesforce APIs コレクションのフォークを選択します。
- [REST] フォルダーをクリックします。
- [SObject] をクリックします。
- [GET SObject Describe] をクリックします。
- メインパネルで [Params (パラメーター)] タブを開きます。
- [Path Variables (パス変数)] の下の [SOBJECT_API_NAME] 行の [VALUE (値)] 列に
Account
と入力します。
クエリの結果を見る前に、このリソースの URI を詳しく見てみましょう。
- GET — この API コールに使用される HTTP メソッド。
- {{_endpoint}} — 要求が実行される場所。この例では、Salesforce に接続するために変数の [_endpoint] 項目に Trailhead Playground の URL を追加しました。
- /services/data — REST API 要求を行うことを指定します。
- /v {{version}} — API バージョン番号。二重中括弧は、これを変数として設定できることを示します。
- /sobjects — sObject グルーピングの下のリソースにアクセスすることを指定します。
- /:SOBJECT_API_Name — アクションの対象となる sObject。この例では Account。
- /describe — アクション。この例では Describe 要求。
船長、うまくいきました!Account メタデータが画面に表示され、応答は見やすいように書式設定されています。未加工の JSON 応答を表示するには、[Raw (未加工)] をクリックします。
Account メタデータが JSON で表示されます。REST API は JSON と XML の両方をサポートしているため、XML 応答を指定するように要求ヘッダーを変更しましょう。
- 要求ウィンドウで [Headers (ヘッダー)] をクリックします。
-
[Key (キー)] を
Accept
、[Value (値)] をapplication/xml
として、新しいヘッダーを追加します。
要求ヘッダーは次のようになります。
3.[Send (送信)] をクリックします。
未加工の XML 応答が返されます。成功です。
取引先の作成
次に、SObject リソースと POST メソッドを使用して取引先を作成しましょう。
取引先を作成する手順は次のとおりです。
- [REST] の下の [SObject] を選択し、[POST SObject Create] を選択します。
- [Params (パラメーター)] タブを開きます。
- [Path Variables (パス変数)] の下の [SOBJECT_API_NAME] 行の [VALUE (値)] 列に
Account
と入力します。 - [Body (ボディ)] タブを開きます。
- ボディのテキストを次のコードに置き換えます。
{ "Name": "Captain Bly’s Finest Treasure Chests", "ShippingCity": "Lisbon" }
6.[Save (保存)] をクリックします。
7.[Send (送信)] をクリックします。
success: true の場合、返された ID を持つ取引先が作成されています。
試しに取引先名を指定せずに 2 つ目の取引先も作ってみましょう。
- リクエストボディ内のテキストを次のテキストで置き換えます。
{ "ShippingCity" : "Melbourne" }
2.[Send (送信)] をクリックします。
おやおや。「値を入力してください: [Name]」という応答が表示されましたか?
Name は取引先作成の必須項目であるため、サーバーは要求を処理せず、エラーが表示されます。幸い、要求を修正するために必要な情報はすべてエラー応答の中にあります。リクエストボディで、名前を「Pirate Pete's Parrot Pellets」と指定しましょう。
- リクエストボディ内のテキストを次のテキストで置き換えます。
{ "Name": "Pirate Pete's Parrot Pellets", "ShippingCity": "Melbourne" }
2.[Save (保存)] をクリックします。
3.[Send (送信)] をクリックします。
成功です。
クエリの実行
ここでは、ユーザーが何百もの取引先を作成した場合を想像してみましょう。市区郡 (納入先) がメルボルンになっているすべての取引先の名前を調べたいとします。その場合、Query リソースを使用して SOQL クエリを実行すれば、目的のレコードを正確に見つけることができます。まるで、カスタマイズされた宝の地図です。
- [REST] の下の [GET Query] を選択します。
- [Params (パラメーター)] タブを開きます。
- [Query Params (クエリパラメーター)] の下の [q] 行の [VALUE (値)] 列に次のテキストを貼り付けます。
SELECT Name From Account WHERE ShippingCity = 'Melbourne'
4.[Save (保存)] をクリックします。
5.[Send (送信)] をクリックします。
クエリは、先ほど作成した取引先 [Pirate Pete's Parrot Pellets] を返します。うまくいきました。
属性を見てみましょう。“url” の横にあるのが、返された取引先のリソース URI です。応答は次のようになります。
インテグレーションを記述するときには、応答からこの URI を取得して、取引先に関する詳細にアクセスできます。
Node.js および Ruby の例
JSforce を使用した Node.js の例
const jsforce = require("jsforce");const conn = new jsforce.Connection({ // you can change loginUrl to connect to sandbox or prerelease env. // loginUrl : "https://test.salesforce.com" }); // Log in with basic SOAP login (see documentation for other auth options) conn.login( process.env.USERNAME, process.env.PASSWORD + process.env.SECURITY_TOKEN, (err, res) => { if (err) { return console.error("Failed to log in to Salesforce: ", err); } console.log("Successfully logged in!"); // Run a SOQL query conn.query("SELECT Id, Name FROM Account LIMIT 5", (err, result) => { if (err) { return console.error("Failed to run SOQL query: ", err); } // Display query results const { records } = result; console.log(`Fetched ${records.length} records:`); records.forEach(record => { console.log(`- ${record.Name} (${record.Id})`); }); }); } );
Restforce を使用した Ruby の例
require 'restforce' # create the connection with the Salesforce connected app client = Restforce.new :username => ENV['USERNAME'], :password => ENV['PASSWORD'], :security_token => ENV['SECURITY_TOKEN'], :client_id => ENV['CLIENT_ID'], :client_secret => ENV['CLIENT_SECRET'] # execute the query accounts = client.query("select id, name from account limit 5") # output the account names accounts.each do |account| p account.Name end