tyoshikawa1106のブログ

- Force.com Developer Blog -

SFDC:HerokuとRuby on RailsをつかってAPI連携を試してみました

Salesforce開発でREST APIなどを使った他システム連携について勉強したい場合は、先に他システムを構築する方法を覚える必要があると思います。そんなときはHerokuとRuby on Railsを使うと簡単に環境を用意できます。


Ruby on RailsでBackend用の環境を準備する方法は次の記事でまとめてあります。


今回はこれをHerokuにデプロイしてAPI連携を試してみようと思います。

はじめに

rails sコマンドとcurlコマンドをつかってローカル環境で値を取得できることを確認しておきます。
f:id:tyoshikawa1106:20150928040502p:plain

f:id:tyoshikawa1106:20150928040551p:plain

Herokuにデプロイ

heroku createコマンドとgit push heroku masterコマンドをつかってHerokuにデプロイします。上記記事で試した時は、ionicアプリ用のagendaフォルダとBackend用のagenda_backendフォルダを用意していますが、Herokuにデプロイするのはagenda_backendフォルダの方だけです。


もし次のエラーが発生した場合は、git initコマンドで解決すると思います。

Push rejected, no Cedar-supported app detected


あとデプロイ後に次のコマンドを実行する必要があります。

$ heroku run rake db:migrate

デプロイするとheroku openコマンドでHerokuアプリにアクセスできます。画面を用意してないのでエラー画面が表示されますが、これで準備完了です。
f:id:tyoshikawa1106:20150928042434p:plain

Herokuにテストデータを作成する

テストデータを作成ですが、登録画面は用意していないのでターミナルからコマンド実行で登録していきます。


Heroku環境でRailsコンソールを実行するには次のコマンドを使います。

heroku run rails console

f:id:tyoshikawa1106:20150928043602p:plain


あとはこのコマンドを実行してHerokuにデータを登録します。

$ Person.create(name: 'Laura', phone: '1800-3137977')
$ Person.create(name: 'Jeniffer', phone: '1800-123456')
$ Person.create(name: 'Tom', phone: '1800-654321')

f:id:tyoshikawa1106:20150928044027p:plain


ローカル環境と同じようにcurlコマンドで確認したい場合は、次の感じになります。

curl -X GET 'https://tyoshikawa1106-rails-backend.herokuapp.com/api/people'

f:id:tyoshikawa1106:20150928044305p:plain


これでHeroku側の準備が完了しました。

apigeeで確認してみる

Heroku側の準備ができたのであとはSalesforce組織からREST APIを使ってみるだけなのですが、そのまえにapigeeのサイトで動作確認してみます。apigeeは簡単にAPI実行を試すことができるサイトです。

API Management | Predictive Analytics | Apigee

ログイン後にconsoleタブを選択すると実行画面を表示できます。あとはこんな感じです。
f:id:tyoshikawa1106:20150928045044p:plain


無事にHerokuに登録したデータを取得できました。

SalesforceからのREST APIを実行

Salesforceから外部サイトに対してAPI実行を行う場合は、リモートサイトの設定が必要です。
f:id:tyoshikawa1106:20150928050038p:plain


ApexでのREST API実行は開発者コンソールで簡単に実行できます。

Http http = new Http();
HttpRequest req = new HttpRequest();
req.setHeader('Authorization', 'Bearer ' + UserInfo.getSessionId());
req.setHeader('Content-Type', 'application/json');
req.setEndpoint('https://tyoshikawa1106-rails-backend.herokuapp.com/api/people');
req.setMethod('GET');
HttpResponse res = http.send(req);
System.debug(res);
String result = res.getBody();
System.debug(result);

f:id:tyoshikawa1106:20150928050225p:plain


無事にHerokuのデータ取得を確認できました。
f:id:tyoshikawa1106:20150928050315p:plain


これでSalesforceから外部サイトにREST APIを実行する方法について確認できました。Herokuはこんな感じでBackendアプリを動かすのにも利用できるみたいです。実際のアプリ開発では認証系処理を用意したりといったことも必要になると思うのですが、勉強用の環境を用意したいだけならひとまずこれで大丈夫そうです。