RavenHQ-cloud-databaseからデータを取得する必要があるRESTfulAPIを構築したいと思います。まず第一に、これは可能ですか?
アイデアは、複数のアプリケーション(xamarin-app、mvc-appなど)を用意し、構築しているAPIを使用してそれらのアプリケーションにデータを渡すことです。
たとえば、ボタンが1つあるモバイルアプリがあるとします。
APIを介してデータベースにGet()を実行するたびに、少量のデータを取得する必要があります。しかし、データベースは全体として非常に大きいので、データベース全体をモバイルアプリに保存するのは良いアプローチではないと思います。 APIを介して必要なときに、少量のデータを取得することをお勧めします。
また、さまざまなアプリケーションでdb-dataを使用する必要があるため、これが最善のアプローチです。
このアーキテクチャはそれを解決するための良い方法ですか?
RavenDB(RavenHQはホストされているRavenDB)は、作成したAPIを含め、あらゆるデータシステムの永続ストレージとして機能しますか?もちろん、機能します。それはドキュメントデータベースです。それがその仕事です。
「RavenDBとは何ですか?」と尋ねない限り、何を求めているのか正確にはわかりません。もしそうなら、私は ravendb.net のマーケティング資料とドキュメントを読むことをお勧めします。
RavenHQはRavenDBをホストしているだけなので、Amazon、Azure、またはその他のクラウドプロバイダーでRavenDBインスタンスを直接ホストするのと同じです。
私が言えるのは、あなたが本当に質問している理由です。クラウドでホストされたストレージを使用するシステム(この場合はAPI)を作成できるかどうかを知りたいということですか?もしそうなら、答えはイエスです。
クラウドでホストされるストレージはローカルストレージのように機能しますが、待ち時間が長くなります。設計でより長い応答時間を計画し、ネットワーク接続の障害を適切に処理する限り(どちらも、SANまたは別のマシンでのストレージのより一般的なシナリオでも懸念されるはずです)同じLAN上で)それならそれはうまくいくはずです。
RESTについて:
どの程度厳密に従うかRESTカスタムAPIの設計ガイドラインは、完全にあなたとAPIの設計に依存します。公開することは決してないため、バックエンドストレージシステムとは関係ありません。 APIを直接介して。
モバイルクライアントの設計について:
はい、非常に大規模なデータシステムの小さなサブセットのみが必要な場合にのみ、クライアントが持つ必要のあるデータを要求することは良い計画です。
しかし、直接的なユーザーアクション(-===-)のためにネットワークを介したクエリに依存するモバイルアプリケーションが機能する場合でもcan動作しますが、私はお勧めしません次の理由によるその正確なアプローチ:
上記の問題の多くを修正する方法は、アプリのキャッシュレイヤーを介してリクエストを行うバックグラウンドタスクを使用することです。次に、APIがそのレイヤーによって適切にキャッシュされる可能性のある応答を返すこと、およびそのキャッシュを最新の状態に保つことを処理することを確認します。
(API、RavenDB、したがってRavenHQにそのキャッシングを実装する場合、キャッシングシステムは非常に優れているため、正しく使用すれば問題はありません。「独自に設計できますか」という質問になります。 APIから正しくキャッシュしますか?」)
また、オフラインでの使用を可能にするために(ユーザーが最初にオンラインでデータを取得できると仮定して)、第1層キャッシュが使用するのと同じキャッシュシステムを使用して、ローカルデータベースにさらにキャッシュする第2層キャッシュを追加できます。
上記のクライアント設計の問題はいずれも、バックエンドストレージの選択を気にしません。さまざまなクライアント設計とAPI設計の設計者が、これらのシステムがどの程度うまく連携するかを決定します。