LoginSignup
9
9

More than 3 years have passed since last update.

Salesforce REST API 複合リソースを使えるようになろう!

Last updated at Posted at 2020-09-17

はじめに

 今回「Salesforce REST API 複合リソース」について検証しようとしたきっかけは、プロジェクトで利用する予定があり、更に今年のTrailheaDXで今後GraphQLの機能拡張されるというアナウンスがされたので決めました。
 この機能の最初の印象は、「フルカスタム画面の開発や他システムからの連携に便利なAPI」と感じました。ただ、初めて聞く人にとっては、情報があまり公開されていないので、トライアンドエラーで学習するには、少し難しいという印象を受けました。
 このブログで、初めて聞く人にとって「やってみようかなー」と思えるような内容にしたいと考えています。

機能概要

複合リソースについて下記にまとめる。
image.png

REST APIリファレンス:複合リソース

活用ユースケース

 Salesforceをデータベースとして、フルカスタムで画面を構築する場合や、他システムの画面操作でSalesforceにリアルタイム同期でデータ連携したい場合に有効だと言える。

image.png

各リソースの特徴について

各複合リソースの特徴は以下の通り。
image.png

各リソースのできる事・できない事

 各リソースのデータ操作については以下の通り。
image.png

 その他の利用できるAPIについては以下の通り。
image.png

APIの説明

  • Limits:組織の制限情報。
  • Actions : アクションの呼び出し。

各リソースのサンプルを確認する

 各リソースを利用する際のリクエストについて説明する。

Composite

 複数のREST APIへのリクエストをJSON形式に記述してリストにまとめることで、一つの呼び出しでまとめて実行する。"referenceID"に実行結果が格納され別のリクエストに情報を受け渡す。アクセス方法は、Javascriptの変数のようにアクセスする。
image.png
↓サンプル

// 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"
            }]
        }
    }]
}

 ロールバックされた場合、問題のあるレコードに原因のメッセージが設定され、その他のロールバックされたレコードはロールバックのメッセージが設定される。
image.png

Batch

 記述の仕方はCompositeと同じ。
image.png
↓サンプル

// 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パラメータで設定したオブジェクトのレコードをルートに持ち、親子関係のレコードをツリー構造に入れ子にして記述する。ツリー構造のデータをリストにまとめて実行する。
image.png
↓サンプル

// 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に紐づけてリストにまとめて実行する。
image.png
↓サンプル

// 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ライフをエンジョイしてくださいー。では!

9
9
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
9
9