SalesforceでRestAPIを自作し、外部からPOST/GETで呼ぶ方法とJson引数の解析

Salesforceでは、自分でREST APIを作成して、それを外部のプログラムから呼ぶことができます。

ここでは、REST APIの作成方法と、GETやPOSTでのCallの仕方、それぞれのメソッドで引数を取得して、それを解析する方法もご紹介します。

作成した自作のRESTを外部から呼ぶ方法については、こちらの記事をご参照ください。ブラウザでの呼び出し方法ですが、同じ様なことをJavaなどのプログラムで行えば、プログラムからも呼び出し可能です。

 

SalesforceでのREST APIの作成

アノーテーション「@RestResource」を使うとRESTサービスを作ることができます。

まずは、例を見てみましょう。

@RestResource(urlMapping='/MyRestServices/*')
global class MyRestController {

	@HttpGet
	global static ReturnObj getAccountInfo() {

		RestRequest req = RestContext.request;
		RestResponse res = RestContext.response;

		// パラメータ取得
		String param1 = req.params.get('param1');

		return '' ;       
	}
    
    
	@HttpPost 
	global static String updateAccountInfo() {

		RestRequest req = RestContext.request;
		RestResponse res = RestContext.response;

		// パラメータ取得
		Map<String, Object> requestParams = (Map<String, Object>)JSON.deserializeUntyped(req.requestBody.ToString());

        	Map<String, Object> resultParam2 = (Map<String, Object>)requestParams.get('param2');
        	String resultParam2_1 = (String)resultParamKokyaku.get('param2_1');

        
        	List<Object> resultParams = (List<Object>)requestParams.get('param3');
        	for (Object obj : resultParams) {
            		Map<String, Object> params = (Map<String, Object>)obj;
            		String eventType = (String)params.get('param3_1');
        	}

		return '';
	}

 }

アノーテーションのプロパティに(urlMapping=’/MyRestServices/*’)とありますが、これは、MyRestServicesというURLで以下のHTTPメソッドを公開するという意味です。

メソッド(GET,POST,PUT,DELETE等)は、1つのRestクラス(ここではMyRestController )で各一つずつ定義することができます。

「*」は、各クラスメソッド名がそのままURLにマッピングされるということになります。

RESTを作成すると、決められたエントリポイントで公開され、たとえば、MyRestController.getAccountInfo()は

https://<SFDCインスタンス>/services/apexrest/MyRestServices/getAccountInfo

でCallすることができます。

 

パラメータの解析

さて、RESTを呼び出すことができるようになったら、HTTPのリクエストで渡された引数を取得することにしましょう。

 

GETパラメータの場合

一つ目はGETパラメータで、<URL>/getAccountInfo?param1=aaaa

のような形で渡ってきます。

この場合は、「 req.params.get(‘param1’)」のように、パラメータ名を引数に取得します。

 

POSTパラメータ(Json)の場合

POSTのパラメータがJson形式でわたってきた場合は、クラスを定義して、MyRestController.updateAccountInfo(定義したクラス)のようにすると、Salesforceで自動でJsonのでシリアライズが行われます。

ただ、この方法だと、インターフェースが変更になった場合にエラーを起こしやすいため、私は、Stringで取得し、Jsonのパースを行った後で、Mapのキー名で取得するようにしています。

Map requestParams = (Map)JSON.deserializeUntyped(req.requestBody.ToString());

の部分ですね。

パースが行われると、Map形式で格納されますので、パラメータ名で簡単に値を取得できます。

上記のサンプルでは、

{“param2”:{“param2_1” : “aaaaa”,”param2_2″ : “bbbbb”},
“param3”:[{“param3_1”: “cccccc”, “param3_2”: “dddddd”},{“param3_1”: “eeeee”, “param3_2”: “fff” }]}

のような、入れ子で、配列の形のJsonから値を取得しています。

One Response to “SalesforceでRestAPIを自作し、外部からPOST/GETで呼ぶ方法とJson引数の解析”

  1. ryo より:

    非常にわかりやすかったです。ありがとうございます!

コメントを残す

サブコンテンツ

このページの先頭へ