[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"
}

参考サイト:
Salesforce 外部サイトからApexメソッドを呼び出したい – まぐねっとのブログ

   このエントリーをはてなブックマークに追加