14
Streaming API で実現する クラウド イントラ連携 株式会社マッシュマトリックス 冨田 慎一

Streaming API で実現する クラウド ⇔ イントラ連携

Embed Size (px)

Citation preview

Page 1: Streaming API で実現する クラウド ⇔ イントラ連携

Streaming API で実現するクラウド ⇔ イントラ連携

株式会社マッシュマトリックス冨田 慎一

Page 2: Streaming API で実現する クラウド ⇔ イントラ連携

Streaming API

• サーバでの更新がリアルタイムにクライアントに通知される仕組み

• Spring ’12 からGA

• Bayeuxプロトコル

- JavaScript(dojo, faye),Java,Ruby,Pythonなどのライブラリが利用可能

Page 3: Streaming API で実現する クラウド ⇔ イントラ連携

何に使う?• Salesforceは、TwitterやFacebookほど更新が頻繁にはない

• Chatterでも10分に一度のポーリングで十分なレベル

• 1分1秒は争わないことに対して開発コストを掛けるか?

Page 4: Streaming API で実現する クラウド ⇔ イントラ連携

名前にだまされない

• “Streaming” はそんなに重要じゃない

• サーバ⇒クライアント “Push” が重要

Page 5: Streaming API で実現する クラウド ⇔ イントラ連携

Force.comでのその他の通知

• HTTPアウトバウンド系

- アウトバウンドメッセージ (ワークフロー)、HTTP Callout (Apex)

• 電子メール系- メールアラート(ワークフロー)、Outbound

Email (Apex)

• APIポーリング

Page 6: Streaming API で実現する クラウド ⇔ イントラ連携

Streaming API• Firewallの影響を受けない(× HTTPアウトバウンド)

➡ 通信はHTTPを利用、接続はクライアントから

• リアルタイムな通知(× 電子メール、APIポーリング)

• サーバリソースの利用負荷が低い(× APIポーリング)

Page 7: Streaming API で実現する クラウド ⇔ イントラ連携

構成

リソースサーバ

(Javascript, Java, Ruby, Python, etc...)Streaming Streaming

レスポンスリクエスト

リクエストクライアント

Page 8: Streaming API で実現する クラウド ⇔ イントラ連携

フロー• メッセージやり取り用のカスタムオブジェクトを作成

- リクエストメッセージとレスポンスメッセージを項目として持つ

• リクエスト側のTopicとリソース側のTopicを用意

• リクエストを送信する時はSオブジェクトに行を作成

• リソース側にリクエストメッセージが通知

• 同リクエストのレスポンスとしてSオブジェクトの行を更新

• リクエスト側にレスポンスメッセージが通知

Page 9: Streaming API で実現する クラウド ⇔ イントラ連携

Apexからの利用• ResponseListenerインターフェースを実装したオブジェクトを登録

- リクエストメッセージとともにオブジェクトもシリアライズされる

• レスポンス到着時にトリガ経由でオブジェクトのメソッドが呼び戻される

Page 10: Streaming API で実現する クラウド ⇔ イントラ連携

コード例public class LeadFaceCapture {

public static void startCapture(Id id) { SecureConnect.ResponseListener listener = new LeadFaceCaptureResponseListener(id); SecureConnect.request('capture', null, listener); } public class LeadFaceCaptureResponseListener implements SecureConnect.ResponseListener { Id id; public LeadFaceCaptureResponseListener(Id id) { this.id = id; } public void onResponse(String responseCode, String responseData) { if (responseCode == 'captureImage') { String data = (String) JSON.deserialize(responseData, String.class); Attachment attch = new Attachment(); attch.ParentId = this.id; attch.Name = 'Captured Image'; attch.Body = EncodingUtil.base64decode(data.substring(23)); insert attch; Lead lead = new Lead(Id=this.id); lead.CaptureImageId__c = attch.Id; update lead; } } public Type getClassType() { return LeadFaceCaptureResponseListener.class; } }}

Page 11: Streaming API で実現する クラウド ⇔ イントラ連携

Demo

Page 12: Streaming API で実現する クラウド ⇔ イントラ連携

利用例• レコード更新 ⇒ イントラ内のDBを検索しオンデマンドでアップデート(事前同期不要)

• モバイルから社内文書を検索・閲覧

• イントラ内DBとのマッシュアップ

Page 13: Streaming API で実現する クラウド ⇔ イントラ連携

Node-Salesforce

• Streaming APIにも対応した

Node.jsでのSalesforceクライアントライブラリ

• github.com/stomita/node-salesforce

Page 14: Streaming API で実現する クラウド ⇔ イントラ連携

おわり