[SalesForce]ApexでカスタムREST APIを作成する
apexにて、自作のRestAPIを作成してみました。
そして、作成したAPIをPHPから叩いてみました。
まずは、Salesforce側の設定。
今回は、GETで指定されたIDのリードデータを取得するもの。
@RestResource(urlMapping='/CustomLead/*')
global with sharing class CustomLeadSample {
@HttpGet
global static sObject doGet() {
RestRequest req = RestContext.request;
Id LeadID = req.params.get('id');
try {
Lead acc = [SELECT Id, Name FROM Lead WHERE Id = :LeadID LIMIT 1];
return acc;
} catch (exception e) {
return null;
}
}
}
公式の解説の最後に載っているものほぼそのままです。
Creating REST APIs using Apex REST – developer.force.com
で、これをPHP側から呼び出します。
oauth認証は以下の記事のものを使用させてもらっています。
nkjmkzk.net » 新しくなったForce.com OAuth Toolkit for phpの使い方 のコメントのフィード
nkjm/Force.com-OAuth-Toolkit-for-PHP
@RestResource
で作成したAPIは、/services/apexrest/
から始まるURLで定義されています。
また、外部から接続する場合には、接続アプリケーション
の設定が必要になります。
接続アプリケーションの作成
コールバックURLは今回は必要ないので、適当なローカルURLを指定しています。
また、パスワードは、(特定のIPアドレスからのアクセスに制限しなかった場合には)
パスワード+セキュリティトークン、の形で渡す必要があります。
require_once('sf_oauth.php');
$app_token = 'xxx';
$app_secret = 'xxx';
$app_callback = 'http://localhost:9000/';
$sf_id = 'xxx';
$sf_pass = 'password+security-token';
$oauth = new oauth($app_token, $app_secret, $app_callback);
$oauth->auth_with_password($sf_id, $sf_pass);
$url = "$oauth->instance_url/services/apexrest/CustomLead/?id=".'リードのID';
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER,
array("Authorization: OAuth $oauth->access_token",
"Content-type: application/json"));
$json_response = curl_exec($curl);
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
レスポンスは以下のような形です。
{
"attributes":
{
"type":"Lead",
"url":"/services/data/v32.0/sobjects/Lead/ユーザーID"
},
"Name":"ユーザー名",
"Id":"ユーザーID"
}