我々は通常、RESTやSOAP、またはActiveMQの上で第三者との統合の多くを行うありがとうございます。
一般的に、同じ方法ですべてのWebサービスコールを処理します。タイムアウトやその他のエラーによって失敗した場合は、cfhttp
属性をthrowOnError=true
に設定して例外をスローします。これは電子メールや開発チームが調査できるように、高度なアプリケーション例外処理によって捕捉されます。
このアプローチの唯一の例外は、プレゼンテーションデータを取得するなど、重要ではないCFMページから「簡単な」Webサービスを呼び出す場合です。このページでは、ページ全体を呼び出すためにタイムアウトしたくないので、throwOnError=false
(デフォルト)を設定し、エラーのステータスメッセージ/コードをチェックします。調査チームはエラーを開発チームにメールでお送りしますが、ページ処理を続行します。
私たちはほとんどのサービスがすぐに別のリクエストによって再び呼び出されることを知っているので、再試行は避けがちですが、どこで線を引いていますか? 1回再試行? 100回の再試行?これはユーザーにどのような影響を及ぼしますか?私はまた、リトライについてのロジックが、たいていはおかしなことになり、通常は醜く繰り返していることがわかります。
結果がプレゼンテーションページで使用されるWebサービスの別のアプローチは、スケジュールされたタスクまたはcfthread
から呼び出すことです。これは、キャッシュ、データベースなどに結果を保持し、Webサービス自体ではなく永続ストアにデータをロードするコードを取得するとよいアプローチです。これには、ページが高速であること(Webサービスコールが遅れている場合)と、エラーがユーザーに影響を与えないことを確認するという2つの効果があります。再度、調査のために何らかの不具合が報告されます。
タイムアウトが長すぎたため、忙しいプレゼンテーションページのWebサービスが表示されました(私は最大1〜3秒程度を目指しています)。実行中のすべてのリクエストは、Webサービスを処理して使用された後、キューイングが開始されました。綺麗ではない。その間違いから学び、非常に速いタイムアウトを使用するか、または私が前に述べたようにWebサービスをそこに置かないでください。
私は非同期コール/コールバックを行うことはできません。 Node.jsを考えているかもしれません:)
他のサーバー上の外部リソースへのREST呼び出しのような意味ですか? –
@Ciaranはい、あらゆるスタイルのWebサービス、RESTまたはSOAP。 – Henry