はじめに
今回「Salesforce REST API 複合リソース」について検証しようとしたきっかけは、プロジェクトで利用する予定があり、更に今年のTrailheaDXで今後GraphQLの機能拡張されるというアナウンスがされたので決めました。
この機能の最初の印象は、「フルカスタム画面の開発や他システムからの連携に便利なAPI」と感じました。ただ、初めて聞く人にとっては、情報があまり公開されていないので、トライアンドエラーで学習するには、少し難しいという印象を受けました。
このブログで、初めて聞く人にとって「やってみようかなー」と思えるような内容にしたいと考えています。
機能概要
活用ユースケース
Salesforceをデータベースとして、フルカスタムで画面を構築する場合や、他システムの画面操作でSalesforceにリアルタイム同期でデータ連携したい場合に有効だと言える。
各リソースの特徴について
各リソースのできる事・できない事
APIの説明
- Limits:組織の制限情報。
- Actions : アクションの呼び出し。
各リソースのサンプルを確認する
各リソースを利用する際のリクエストについて説明する。
Composite
複数のREST APIへのリクエストをJSON形式に記述してリストにまとめることで、一つの呼び出しでまとめて実行する。"referenceID"に実行結果が格納され別のリクエストに情報を受け渡す。アクセス方法は、Javascriptの変数のようにアクセスする。
↓サンプル
// Composite リソース サンプル
URL: https://<私のドメイン>.my.salesforce.com/services/data/v49.0/composite
METHOD: POST
HEADER:
Authorization: Bearer <アクセストークン>
Content-Type: application/json
REQUEST BODY:
{
"compositeRequest" : [
{
"method" : "POST",
"url" : "/services/data/v49.0/composite/sobjects",
"referenceId" : "refNewAccount1",
"body" : {
"records" :[{
"attributes" : {"type" : "Account"},
"Name" : "Composite SObject1"
}]
}
},{
"method" : "POST",
"url" : "/services/data/v49.0/composite/sobjects",
"referenceId" : "refNewAccount2",
"body" : {
"records" :[{
"attributes" : {"type" : "Account"},
"Name" : "Composite SObject2"
}]
}
}]
}
ロールバックされた場合、問題のあるレコードに原因のメッセージが設定され、その他のロールバックされたレコードはロールバックのメッセージが設定される。
Batch
// Batch リソース サンプル
URL: https://<私のドメイン>.my.salesforce.com/services/data/v49.0/composite/batch
METHOD: POST
HEADER:
Authorization: Bearer <アクセストークン>
Content-Type: application/json
REQUEST BODY:
{
"batchRequests" : [{
"method" : "POST",
"url" : "/services/data/v38.0/sobjects/Account",
"richInput" : { "Name" : "Batch company 1"}
},{
"method" : "POST",
"url" : "/services/data/v38.0/sobjects/Account",
"richInput" : { "Name" : "Batch company 2"}
}]
}
SObject Tree
URIパラメータで設定したオブジェクトのレコードをルートに持ち、親子関係のレコードをツリー構造に入れ子にして記述する。ツリー構造のデータをリストにまとめて実行する。
↓サンプル
// SObject Tree リソース サンプル
URL: https://<私のドメイン>.my.salesforce.com/services/data/v49.0/composite/tree/Account
METHOD: POST
HEADER:
Authorization: Bearer <アクセストークン>
Content-Type: application/json
REQUEST BODY:
{
"records" :[{
"attributes" : {"type" : "Account", "referenceId" : "ref1"},
"name" : "SObject Tree 1",
"phone" : "1234567890",
"website" : "www.salesforce.com",
"numberOfEmployees" : "100",
"industry" : "Banking",
"Contacts" : {
"records" : [{
"attributes" : {"type" : "Contact", "referenceId" : "ref2"},
"lastname" : "SObject Tree 2",
"title" : "President"
},{
"attributes" : {"type" : "Contact", "referenceId" : "ref3"},
"lastname" : "SObject Tree 3",
"title" : "Vice President"
}]
}
}]
}
SObject Collection
複数のレコードをSObjectに紐づけてリストにまとめて実行する。
↓サンプル
// SObject Collection リソース サンプル
URL: https://<私のドメイン>.my.salesforce.com/services/data/v49.0/composite/sobjects
METHOD: POST
HEADER:
Authorization: Bearer <アクセストークン>
Content-Type: application/json
REQUEST BODY:
{
"allOrNone" : false,
"records" : [{
"attributes" : {"type" : "Account"},
"Name" : "Company1"
}, {
"attributes" : {"type" : "Contact"},
"LastName" : "Kawaguchi1",
"FirstName" : "Masaki"
}]
}
まとめ
Salesforce REST API 複合リソースは、これまでプログラムで実装していた複数のリソース情報の取得処理やトランザクション処理、データ加工処理を標準機能として提供してくれます。本当に便利な機能ですね。
ご紹介した活用のユースケースにマッチする要件がある場合にはぜひ利用してみてください。
また、TrailHeaDXでは、今後、GraphQLの機能拡張をするとアナウンスしています。対応されることにより、画面開発者にとってより便利な機能になるのではないでしょうか?。
私は、SObject TreeをSalesforce DXのクローズドパイロットの期間に初めて知って、今回キャッチアップしたことによって、色々なAPIが増えてとてもビックリしました。また、今のキャッチアップできてとてもよかったと思います。
それでは、APIライフをエンジョイしてくださいー。では!