BashからSalesforceのREST APIを呼び出すには
SalesforceのREST APIを呼び出して、簡単な作業を自動化したい時があります。
Bashを使って簡単にREST APIを呼び出してみました。
事前準備
接続アプリケーションの作成
Bashから呼び出されるために接続アプリケーションを設定して接続に必要な情報を生成します。
まず、Salesforceの設定で[接続アプリケーション]を作成します。
アプリケーション名、API参照名、取引先責任者メールを設定します。
OAuth設定の有効化をオンにして、必要な設定をします。
コールバックURLは必須ですが、Web UIがないため、適当に「http://localhost」で大丈夫です。
OAuthの範囲として必要なものを設定します。ここでは「api」と「openid」を設定しています。他の機能も呼び出す場合は必要に応じて追加します。
取得(生成)したコンシューマ鍵とコンシューマの秘密を使ってBashから接続できます。
jqコマンドのインストール
BashからJSONを取り扱うためにjqコマンドをインストールします。
sudo apt install jq
APIの呼び出し
あとは、以下のようにcURLでAPIを呼び出します。
#! /bin/bash
USER_ID=SalesforceにログインしているユーザID
PASSWORD=Salesforceにログインしているパスワード
SECURITY_TOKEN=ユーザのセキュリティトークン
CLIENT_ID=コンシューマ鍵
CLIENT_SECRET=コンシューマの秘密
PASSWORD_TOKEN=$PASSWORD$SECURITY_TOKEN
CALLLOGIN="curl https://login.salesforce.com/services/oauth2/token -d ""grant_type=password"" -d ""client_id=$CLIENT_ID"" -d ""client_secret=$CLIENT_SECRET"" -d ""username=$USER_ID"" -d ""password=$PASSWORD_TOKEN"""
eval $CALLLOGIN > tmp_token
ACCESS_TOKEN=`cat tmp_token | jq -r ".access_token"`
INSTANCE_URL=`cat tmp_token | jq -r ".instance_url"`
rm tmp_token
curl $INSTANCE_URL/services/data/v57.0/sobjects/Contact -H "Authorization: Bearer $ACCESS_TOKEN" | jq .
アクセストークンを取得するために/services/oauth2/tokenを呼び出します。以下のようなレスポンスが返されます。
{
"access_token": "00D5h000001....8aD3!.EpA",
"instance_url": "https://mydomain.my.salesforce.com",
"id": "https://login.salesforce.com/id/00D5h000xxxxxxx/0055h0xxxxxxx",
"token_type": "Bearer",
"issued_at": "1683335932221",
"signature": "qkZKzzzzzzzX4FeI7JFfcuRM="
}
アクセストークン(access_token)や接続先のインスタンスURL(instance_url)が返されるので、これを使ってREST APIの呼び出しができるようになります。
上記のサンプルでは、取引先責任者のレコードを取得しています。(/services/data/v57.0/objects/Contact)
{
"objectDescribe": {
"activateable": false,
"associateEntityType": null,
"associateParentEntity": null,
"createable": true,
"custom": false,
"customSetting": false,
"deepCloneable": false,
"deletable": true,
"deprecatedAndHidden": false,
"feedEnabled": true,
"hasSubtypes": false,
"isInterface": false,
"isSubtype": false,
"keyPrefix": "003",
"label": "取引先責任者",
"labelPlural": "取引先責任者",
"layoutable": true,
"mergeable": true,
"mruEnabled": true,
"name": "Contact",
"queryable": true,
"replicateable": true,
"retrieveable": true,
"searchable": true,
"triggerable": true,
"undeletable": true,
"updateable": true,
"urls": {
"compactLayouts": "/services/data/v57.0/sobjects/Contact/describe/compactLayouts",
"rowTemplate": "/services/data/v57.0/sobjects/Contact/{ID}",
"approvalLayouts": "/services/data/v57.0/sobjects/Contact/describe/approvalLayouts",
"listviews": "/services/data/v57.0/sobjects/Contact/listviews",
"describe": "/services/data/v57.0/sobjects/Contact/describe",
"quickActions": "/services/data/v57.0/sobjects/Contact/quickActions",
"layouts": "/services/data/v57.0/sobjects/Contact/describe/layouts",
"sobject": "/services/data/v57.0/sobjects/Contact"
}
},
"recentItems": [
{
"attributes": {
"type": "Contact",
"url": "/services/data/v57.0/sobjects/Contact/0035h0000aaaa"
},
"Id": "0035h0000aaaa",
"Name": "購買 花子"
},
{
"attributes": {
"type": "Contact",
"url": "/services/data/v57.0/sobjects/Contact/0035h00001xxxxxx"
},
"Id": "0035h00001xxxxxx",
"Name": "営業 次郎"
}
]
}
この記事が気に入ったらサポートをしてみませんか?