SaaSと別のシステムを連携させる方法


SaaSは別のシステムと連携できる

SaaSを導入すると、別のシステムと連携したくなることも多いかと思います。多くのSaaSではWeb APIによるシステム間連携のインターフェイスが用意されています。これを使うとSaaSもシステム間の接続が行えます。このWeb APIを利用した比較的小さなプログラムを作成することで、相当な自由度で連携が可能です。連携相手は、既存の業務システム、別のSaaS、ExcelマクロやAccessで作った自社ツールなどになるかと思います。少し応用して、メールの受信から自動的にデータを登録したり、特定のイベント(例えば登録されたデータが一定の閾値を超えたときや、特定の状態になったとき)にメールやSMS(ショートメッセージサービス)を送信したりすることもできます。

saasイメージ図

Web APIとは何か

前述のとおり、SaaSには多くの場合システム間連携用のWeb APIが提供されています。Web APIとは、別のシステムからそのサービスのソフトウェア機能を呼び出すための窓口(プログラムインターフェイス)のことです。これにより、外部のシステムから、データ登録や取得、システム機能の実行など、SaaSが提供する機能を呼び出すことができます。

通常のWebのインターフェイスもWeb APIも、そのサーバーの実装からすれば外部から呼び出されるという点では同じです。通常のWebとWeb APIの技術的な違いは、Webは提供相手が「ブラウザ(を操作する人)」であるのに対して、Web APIは「別のシステム」である点になります。Web APIは、ブラウザに表示する画面そのものであるHTMLではなく、処理結果のデータだけを返却します。

Web APIの方式

現代のWeb APIはRESTと呼ばれる方式が最も一般的です。RESTは、多くの場合JSONと呼ばれるごく単純なリクエストとレスポンスを前提に機能呼び出しを行う仕組みです。
対してSOAPと呼ばれるXMLベースの仕組みも存在します。SOAPはXML技術とともに20年ほど前に流行した方式です。
SOAPは業務利用を強く意識された設計で、サービスの機能を言語化する技術も用意されました。高機能であり、自動的な接続を志向する節もあり当時は近未来的だったのですが、システム間連携を行うだけの用途なら高機能すぎて使いにいとされ、よりシンプルで現実的なRESTにほぼ置き換わってしまいました。これは残念なことなのですが、ソフトウェアエンジニアリングの業界全体で、自動的なシステム間接続はあきらめた(方向が違った)ということだと思います。
RESTを採用するWeb APIは、パラメータの形式、レスポンスの具体的な形式に厳格な規範はありません。システム毎にエンジニア向けのドキュメントが作成され、それを利用者(エンジニア)が読んで呼び出しプログラムを作成することになります。

Web APIの認証

サーバーが正しいユーザーであることを適切に判定する方法「認証」は、Web APIを提供するサービスにより個別に設計されています。とは言っても多くの場合、SaaSが専用のAPIや別の方法でIDとシークレットキーを発行し、呼び出し側が全てのAPIの呼び出し毎にこの2つをサーバーに送信する方式が一般的です。シークレットキーはパスワードに相当する概念ですが、長いランダムな文字列が採用されます。このシークレットキーはもちろんSSLで暗号化された通信で受け渡しが行われます。

システム連携の他の方法

SaaSのシステム間連携では、Web APIではなくファイル転送により連携する方法が採用されていることもあります。ファイルを渡すことで、そのファイルを処理するのです。システム間でファイルを渡す方式は次の4パターンが一般的なのですが、SaaSでは多くの場合(1)か(2)が採用されています。

  • (1)POSTによるアップロード
    ブラウザベースのWeb画面でファイルをアップロードするときと同じテクノロジによる手法です。SaaSのサーバープログラムはアップロードされたファイルを受け取り、ファイルを処理します。
  • (2)SFTPによるファイル転送
    SFTPと呼ばれるセキュアなファイル転送プロトコルを使ってファイルを渡す方式です。サーバーはファイルを受信したら、その受信自体や別のWeb API呼び出しを契機にファイルを処理します。
  • (3)AWSのS3を使う方法
    Amazon Web Services(AWS)のストレージサービスを使う方法です。バケット(保存先)、アクセスキー、シークレットキーの3点の情報を元にファイルを送信できます。サーバーはファイルの到着を監視するか、別のWeb API呼び出しを契機に処理を開始します。
  • (4)その他のツール
    上記以外にもいくつかのベンダーからシステム間連携に使えるファイル転送ツールが提供されています。これらのツールは過去に上記(1)~(3)が存在していなかったりまだ一般的ではなかったころの名残りなのですが、安定動作や障害対策の仕組みが加わっておりSaaS以外のシステム間連携では根強く使われています。

SaaSのフォーム入力データの連携で注意すべきこと

SaaSでフォーム画面等で入力・更新を行ったデータを外部システムに連携する場合、更新日時を利用して連携の要否を自動判定するケースが多くなります。このときデータの削除の連携には注意が必要です。SaaSからデータを削除すると単に削除されるだけのケースが多く、その場合はこの「削除」した事実を他のシステムに連携する方法がないのです。データの削除を他のシステムに連携する際は、データを物理削除せずに論理削除することで、データ削除を更新として連携する等の工夫が必要になります。

障害時を想定した設計が必要

SaaSは連続稼働が前提となっていない場合が多いです。SaaSではよく稼働率が明示されていますが、例えば稼働率は99.9%以上と明示されている場合、1ヶ月間では43分ほど停止しても基準内ということになります。夜間にメンテナンスのために計画停止するケースがあるのはもちろんのこと、障害により日中に停止するケースもあり得ます。
システム間のデータ連携を自動化する場合は、SaaSが停止することも考慮して設計する必要があります。データを漏れなく取得するのであれば、どこまで取得したかを別の仕組みに記録し、そこから開始する方法が有効です。データを漏れなく登録するのであれば、エラーが発生することを前提に自動的なリトライを行うなどの仕組みを検討することになります。また、エラー時に自動復旧が難しい場合は、システム管理者に自動で障害を伝えるメールやSMSを自動送信する等の方法も必要になります。

システム間連携の運用方法

システム間の連携はクラウドで実行する方法が最も一般的です。もちろんクラウドで自動実行する場合は、そのサーバー自体もハードウェア障害等で停止する可能性があるので、万全を期す場合はクラウドのサーバーも二重化し単一障害点を作らない方法を採用します。この場合、2台のサーバーが協調して動作するように設計します。処理時間が長くない場合、DBを使うとこれを実現できます。処理の開始時に特定のレコードをロックし、ロックできたら処理を実行し、完了したらロックを解除する方式をとるのです。これにより2つのサーバーで同時実行を避けつつ、片方のサーバーが障害で停止しても、システム間連携を安全に稼働させることができます。
連携の実行が手動で良ければ、Windows PC用に連携プログラムを作成する方法もあります。手作業にはなりますが、連携プログラムが実行結果を表示するようにすれば、成功・失敗を実行時に確認できるので運用も簡単です。

PR

コンポーネントデザインでは、SaaSシステムと既存システムの連携の開発を承ります。連携する内容や業務の重要性に応じて費用対効果も勘案した方式をご提案します。システム間連携は小規模で短期間で提供できる場合が多くなります。どうぞお気軽にお問い合わせください。