意見は分かれていますが、事実は残っています-多くの人がオンラインを選択しています。 そして、私たちは本当にオフラインでオンラインと和解できないと思いましたか?
そして今、どのOSでも、財務会計のアプリケーションは、drebedengi.ruのオープンAPIを使用してオンラインでデータを交換できます。 人々はこれが必要だと思いますか?
統計
必要なことがわかりました。 統計(〜43,000ユーザー)によると、同期に最も関連するアプリケーションは次のとおりです。
- アンドリオ、iPhone、Windows Mobile、Symbian
- Unix / Linux
- vkontakte.ruなどのFlashアプリケーション
- ブラウザFireFox、Chrome、Opera、IEのプラグイン
- 経費の迅速な入力のためのjsのクロスブラウザーウィジェット
コラボレーション
したがって、誰でもdrebedengi.ruのアプリケーションを作成できます。 同時に、
仕組み
すべてがSOAPプロトコルで機能します。 あなたはディレクトリを要求することから始める必要があります-費用のカテゴリーのリスト、収入源、お金の保管場所、ユーザーとタグによって入力された通貨。 これには次の方法があります。
anyType getCategoryList(string $apiId, string $login, string $pass, anyType $idList)
anyType getSourceList(string $apiId, string $login, string $pass, anyType $idList)
anyType getPlaceList(string $apiId, string $login, string $pass, anyType $idList)
anyType getCurrencyList(string $apiId, string $login, string $pass, anyType $idList)
anyType getTagList(string $apiId, string $login, string $pass, anyType $idList)
各メソッドの入力パラメーターを記述することは意味がなく、WSDLで記述されます。 はい、各方法でユーザー名とパスワードを転送することにしました。 この主題については多くの考えがありましたが、これまでのところ、彼らはどのように決定したかを決定しました。 建築の第一人者-より正しいスキームを提案しますか?
次に、ユーザーが作成したすべてのトランザクションのリストを取得します:費用、収入、口座間の移動(保管場所)、および通貨交換。 これには最も重要な方法があります。
anyType getRecordList(string $apiId, string $login, string $pass, anyType $params, anyType $idList)
params
配列には、データのさまざまな組み合わせを要求できる巨大なパラメーターセットが含まれています。 最初のステップでは、すべてのトランザクションを圧縮してクライアントに保存するだけです。
同期アルゴリズム
初期データがダウンロードされ、クライアントのユーザーにオンラインと一致する残金が表示されると、クライアントアプリケーションは同期モードで動作を開始します。 操作の原則は、SVNなどのバージョン管理システムの原則と同じです。 常に最新のリビジョンに更新する必要があります。
これを行うために、サーバーは過去3か月間のオブジェクトの変更履歴を保存します(必要以上に高価になります)。 各リビジョンには固有のリビジョン番号があり、変更内容(トランザクション、コストカテゴリ、保管場所など)、変更方法(追加、変更、削除)および変更時期に関する情報が含まれています。
クライアントは、最後に正常に同期されたサーバーリビジョン番号を保存し、再度同期することを決定するたびに送信します。 サーバーは、クライアントがサーバーから変更をダウンロードする基準に基づいて、変更のリストを時系列順に応答します。 メソッドを参照してください:
anyType getChangeList(string $apiId, string $login, string $pass, string $revision)
integer getCurrentRevision(string $apiId, string $login, string $pass)
その後、クライアントはその変更をサーバーにアップロードし、最後に「コミット」後にサーバー上で作成されたリビジョン番号を要求して保存します。 クライアントが不溶性の競合を検出した場合、サーバーからすべてを再度ダウンロードするか、またはその逆ですべてをサーバーにダウンロードするようにユーザーに提供します。 後者の場合、最初にサーバー上のすべてを削除することを忘れてはなりません。このための方法もあります。
おわりに
そのため、興味がある場合は、 ここで wsdlへのリンク、PHPの本格的なテストクライアントのサンプル 、低レベルのXML SOAPリクエスト 、getRecordListメソッドのサンプルなどを見つけることができます。
はい...ネットワーク経由でデータを傍受することを恐れている人のために-私たちはSSLサポートを備えたSOAPライブラリを見つけることを提案し、これには別のWSDLを使用します。