【Salesforce】REST APIを使って@RestResourceで作成した動作を呼び出す
Salesforceで、RestResourceアノテーションを使用することでREST API用のメソッドを作成することができます。
これにより、Salesforceと外部のシステムの連携を行うことができます。
簡単に作ってみました。
@RestResource(urlMapping='/SayHello/*')
global with sharing class SayHelloApi {
@HttpGet
global static String doGet() {
RestRequest req = RestContext.request;
String name = req.params.get('name');
return 'Hello ' + name;
}
@HttpPost
global static String doPost(String name) {
return 'Hello' + name;
}
}
クラス名や各メソッド名は自由につけられます。
urlMappingはREST APIで呼び出す際に使用されます。
GETの場合はパラメータから、POSTの場合は引数から名前を取得して作成した文字列を返しています。
テストクラスはこんな感じに書くことができます。
@isTest
private class SayHelloApiTest {
/**
* Postの確認を行う
*/
private static testMethod void doPostTest() {
String result;
Test.startTest();
result = SayHelloApi.doPost('MyName');
Test.stopTest();
system.assertEquals(result, 'Hello MyName');
}
/**
* Getの確認を行う
*/
private static testMethod void doGetTest() {
String result;
RestRequest req;
RestResponse res;
// リクエストを作成する
req = new RestRequest();
req.httpMethod = 'GET';
req.requestURI = '/services/apexrequest/SayHello/?name=MyName';
// レスポンスを作成する
res = new RestResponse();
// コンテキストを設定する
RestContext.request = req;
RestContext.response = res;
Test.startTest();
result = SayHelloApi.doGet();
Test.stopTest();
system.assertEquals(result, 'Hello MyName');
}
}
GETの場合はリクエストとレスポンスを設定しています。
POSTの場合は普通に呼び出せば良いのでしょうか。
外部から呼び出す場合は事前に認証を行ってから呼び出すことになります。
Salesforceにログインして[設定]>[作成]>[アプリケーション]と進むと、[接続アプリケーション]というものがあるかと思います。
ユーザ名・パスワードによる認証を行う場合はここに設定されている「コンシューマ鍵」や「コンシューマの秘密」という項目と、ログインする際の「ユーザ名」と「パスワード」によって認証を行い、アクセストークンを受け取ります。
そのアクセストークンをHTTPヘッダに設定することで作成したREST API用のメソッドを呼び出すことができます。
確認の際に楽をするためのツールを作成したので、宜しければご利用ください。
No comments.