web-dev-qa-db-ja.com

iOS 5がWebサービスと同期するための良いデザインパターン/ライブラリは何ですか?

Webサービスを使用してリモートサーバーと同期する必要があるiOSアプリケーションを開発しています。既存のWebサービスは、REST(WCFで実装されているが、JSON HTTPエンドポイントを公開している)ではなく「操作」スタイルを持っています。iOSに最も適合するようにWebサービスを構造化する方法がわからないため、 iOSで同期プロセスを管理する方法にも興味があります。

このアプリケーションでは、詳細に立ち入ることなく、リモートサイトでの修理費用を見積もることができます。これらのコストは、部屋とアイテムごとに分類されます。ユーザーがインターネットに接続している場合、このデータをサーバーに送り返すことができます。

各アイテムの複数の写真を撮ることができますが、それらは別々のキューに保持され、接続が最適なときに送信されます(理想的にはwifi)。

バックエンドアプリケーションは、各部屋とアイテムの一意のIDを制御します。したがって、これらのコストをサーバーに送信するたびに、サーバーは中央データベースIDをエコーバックし、モバイルアプリでそれらを同期できるようにします。運用契約は実際にははるかに大きいので、これを少し簡略化しましたが、問題を複雑にすることなく基本的な要件を説明したいと思います。

まず、Webサービスのアーキテクチャ:現在、GetCostsとUpdateCostsの2つの操作があります。

私の想定では、厳密なRESTアーキテクチャを使用した場合、単一のWebサービス操作を複数の小さなサービスに分割する必要があります。これにより、サービスがよりおしゃべりになり、保証も必要になります。アプリからの配送注文。たとえば、アイテムの前に収容室が追加されていることを確認する必要があります。

これははるかにRESTfulに見えますが、これらの余分な呼び出しは高価な接続(セキュリティチェック、データベース呼び出しなど)であると私たちは認識しています。 Web APIのタイプ(サービスフォーカスを介した操作)は、分厚いかおしゃべりかを決定しますか?これはモバイル(3G)なので、たくさんの小さなメッセージを処理するのが良いのでしょうか、それともいくつかの大きなメッセージを処理するのが良いのでしょうか。

第二に、iOS側です。 iOS(5)アプリ自体の中でデータ同期を管理する方法に関する現在のアドバイスは何ですか。複数のキューが必要であり、各キューでの配信順序(および技術的にはキュー間の順序)を保証する必要があります。サーバーは、一意のIDおよびその他のプロパティを制御し、それらをアプリケーションにエコーバックする必要があります。次に、アプリケーションは内部データベースを更新する必要があり、再更新するときに、更新メッセージで正しいIDが使用可能であることを確認します(基本的に、1回の呼び出しで複数の挿入と更新)。

私たちのバックエンドには、これらのコスト見積もりに基づいて動作する大量のビジネスロジックがあります。アプリ自体にはこれは必要ありません。

現在、iOSアプリはコストデータを送信し、サーバーはそのデータを入力されたID(およびその他のデータ)でエコーバックします。既存のコストデータが削除され、エコーされた応答データがデバイスのクライアントデータベースに追加されます。写真が送信されていない可能性があるため、これにより問題が発生していますが、元のエンティティツリーは削除され、置き換えられています。明らかに、コストツリーを置き換えるのではなく更新することでこの問題は解消されますが、そのようなことを行うためのNice xcodeライブラリがあるかどうかはわかりません。

私はあなたが持っているかもしれないどんなアドバイスも歓迎します。

4
Rebecca

モバイルベースのデバイスでは、Andriod/iOSで帯域幅を制限することが重要です。メッセージの配信を確実にするために、WCF JSON(今実行している場合はWebAPI MVC4を使用します)とMsmqを使用しました。サーバーは、Msmqに配置することにより、データをモバイルデバイスにプッシュします。 Wcfは常に、リクエストに対してMsmqから読み取り、モバイルデバイスがSQLiteにデータを保存し、ローカルキューを使用してデータを送信および解放します。

私はIOSに精通していませんが、ローカルデータストアをキューとして使用できると思います

2
Haroon