1つの統合の物語、またはどのように心配を止めてInterSystems Ensembleに恋をしたか

画像

背景:私たちの小さいが非常に野心的な会社「Black Mushroom Studio」は、電子商取引プロジェクトを作成し、支払いアグリゲーターを介して一部の商品/サービスの支払いを行うモバイルアプリケーションを実装するというアイデアを持っていました。

entrance 入り口にあったもの:もちろん、HTTPおよびJSONを介した通信に便利なAndroidアプリケーションフレームワーク、およびそのAPIであるSOAPサービスを備えたWebサービスを提供する支払いシステム。

タスク:友だちを作ります。

次の点がテクノロジーの選択に影響を与えました。開発の速度と変化に迅速に対応する能力です。 プロジェクトは撮影することになっていた。 競合他社が期限を評価している間、私たちはすでに製品を発売したかったです。 競合他社は開発者を探していますが、すでに利益を上げているはずです。 それにも関わらず、この問題は投資家のお金に関連しているため、深刻なアプローチが必要であり、これにはさらなる注意が必要です。

特定のベンダーの特定のテクノロジーの長所と短所、およびオープンソースの長所について長い間話すことができますが、どこにもマイナス面とプラス面があります。 いくつかの製品(別の記事の資料)を分析した結果、 InterSystems Ensembleは他の製品よりも問題を解決するのに適しているという結論に達しました。

開発者の1人だけがCachéObjectScriptの開発経験があり、Ensembleの経験はありませんでした。 しかし、数週間にわたってEnsembleに製品のかなり複雑なロジックを実装しました。

私たちを助けたもの:

1. Ensembleは、DBMS、アプリケーションサーバー、エンタープライズ統合バス(ESB)、BPMシステム、分析アプリケーション開発(BI)テクノロジーを組み合わせた包括的な製品です。 いくつかの異なるソリューションを研究し、それらを一緒に接続する必要はありません。
2.オブジェクトストレージモデル。 データベースにオブジェクトを保存する場合は、単にデータベースに保存します。
3.アダプタの拡張可能なライブラリにより、さまざまなプロトコルを介して外部/内部システムと統合する非常に簡単な方法。

トップレベルのソリューション


HTTPクライアントにより、JSONコンテンツを含むリクエストをサーバーポートに送信します。 このポートは、Ensembleのブラックボックスによって聞こえます。 クライアントは、処理が同期的に完了した後に応答を受け取ります。

中身は何ですか


Ensembleでは、ビジネスサービス、ビジネスプロセス、ビジネスオペレーションの3つの部分で構成される製品(Production-Ensembleの統合ソリューション)を販売しました(以下では、読みやすくするために、これらの用語はプレフィックスビジネスを省略します)。

Ensembleのサービスは、さまざまなプロトコルを使用してリクエストを受信できるコンポーネント、プロセスはアプリケーションのロジック、操作は送信リクエストを外部システムに送信できるコンポーネントです。

Ensemble内のすべての通信は、メッセージキューに基づいています。 メッセージ-Ens.Messageから継承されたクラスのオブジェクトにより、製品のある部分から別の部分にデータを使用および転送できます。

この場合のサービスは、EnsLib.HTTP.InboundAdapterから継承したHTTPアダプターを使用し、クライアントから送信された要求を受信し、それを「メッセージ」に変換して、プロセスに送信します。 ビジネスプロセスからの応答で、サービスは処理結果を含​​む「メッセージ」を受信し、クライアントへの応答に変換します。

私たちにとってはこのように見えます:

Method OnProcessInput(pInput As %Library.AbstractStream, Output pOutput As %Stream.Object) As %Status { Set jsonstr = pInput.Read() //    Set st = ##class(%ZEN.Auxiliary.jsonProvider).%ConvertJSONToObject(jsonstr,"invoices.Msg.Message",.tApplication) Throw:$$$ISERR(st) ##class(%Exception.StatusException).CreateFromStatus(st) //    , //     //  - Set outApp=##class(invoices.Msg.Resp).%New() Set st =..SendRequestSync("Processing",tApplication,.outApp) Quit:$$$ISERR(st) st //     json Set json="" Do ##class(invoices.Utils).ObjectToJSON(outApp,,,"aeloqu",.json) //  json    Set pOutput=##class(%GlobalBinaryStream).%New() Do pOutput.SetAttribute("Content-Type","application/json") Do pOutput.Write(json) Quit st } 

ビジネスプロセスは、アプリケーションのビジネスロジックの実装です。 クライアントに応答を返すために実行する必要がある一連のアクションが含まれています。 例:顧客データの保存/更新、新しい監視対象サービスの追加、サービスのステータスの要求/サービスの支払い。 統合プラットフォームがなければ、非常に多くのコードを書く必要があります
Ensembleにあるもの:個々の要素からビジュアルエディターでビジネスプロセスを組み立てます。 ビジネスプロセスは、ビジネスプロセス言語(BPL)で説明されています。 要素は、単純な(そうではない)割り当て、データ変換、特定のコードの呼び出し、他のプロセスおよび操作の同期および非同期呼び出し(以下で詳しく説明します)です。

データ変換は、非常に便利なものであり、コードを記述することなくデータマッピングが可能です。


その結果、いくつかのコードではなく、いくつかの段階で自分自身のために、これを取得しました:


次に操作について説明します。 このエンティティにより、何らかのプロトコルを使用して外部システムにリクエストを実装できます。
方法:支払いシステムによって提供されるCachéStudio WSDLからスタジオに組み込まれた拡張機能にインポートします。


WSDLの場所を指定します。


インポートするとき、「操作の作成」ボックスをチェックします。


その結果、支払いシステムへのリクエスト/レスポンス用の既成のコードを取得します。 ポータルで操作を構成します。作成された操作のクラスを指定します。


SSL構成を修正します(最初に「システム管理ポータル」-システム管理-セキュリティ-SSL / TLS構成を使用して作成する必要があります):


完了しました。ビジネスプロセスから操作を呼び出すだけです。 私たちの場合、そのような操作が2つありました:情報コンポーネントと支払いコンポーネントです。 その結果、支払いシステムに連絡するために1行のコードを書く必要はありませんでした。

すべて、統合の準備ができました。

Ensemble組み込みツールを使用してPUSH通知を実装する別のプロセス、小切手を生成するための支払いシステムからSFTPレジストリを受信する別のプロセス、PDF形式の小切手の実際の提供がありますが、これらは個々の記事のトピックです。

その結果、実装に数週間が費やされました(新しい技術の「理解」を考慮に入れて)。

当然、インターシステムズの製品は完全ではありません(どれもありません)。 実装すると、特にEnsembleドキュメントが完全でないため 、熊手に見えました。 しかし、私たちの場合、テクノロジーは定着し、定着しました。 若くて野心的な開発者をサポートし、常にアドバイスを提供するという会社自体の独立したプラス。 将来的には、この技術に関する新しいプロジェクトの開発を計画しています。

このテクノロジーに基づいて、すでにアプリケーションを起動していますが 、iOSおよびWeb向けのアプリケーションバージョンのリリースも準備しています。

Source: https://habr.com/ru/post/J275271/


All Articles