はい、動作します。ただし、分散システムの設計は、データ モデルが非常に単純であり、そのまま維持されるという前提に基づいています。構築しているアプリケーションが成功した場合、新しい要件が追加され、新しい機能が要求されることは確実です。
あなたが提案しているようにデータレイヤーを公開すると、クライアントアプリケーションがデータモデルに緊密に結合され、httpを使用するとマルチリクエストトランザクションが非常に困難になります。マルチリクエストトランザクションを行う必要はないと言っていました。今日じゃなくて来年かな?
このアプリケーションの寿命はどれくらいですか? 数年以上という場合は、データ層をリモート クライアントに公開するという考えを再考します。REST の主な目標の 1 つは、クライアント アプリケーションとサーバー アプリケーションを分離して、アプリケーションが長期間にわたって進化できるようにすることです。適切に設計されていない分散サービスに複数のクライアント アプリケーションがアクセスしている場合、メンテナンスやバージョン管理の問題がすぐに発生する可能性があります。
クライアントがモデルを理解する必要があるというコメントの質問に答えるために編集します。
クライアントがサーバーから受信した表現と対話する方法に関して、2 つの異なる方向性があります。
- クライアントが、表現に含まれるデータ コンテンツを明示的に認識できるようにすることができます。つまり、クライアントは特定の XML 要素にユーザー名とパスワードがあることを知っています。ただし、これを行う場合は、特定のメディア タイプ (application/vnd.mycompany.user+xml など) を返す必要があります。application/xml を使用しないでください。これは、XML ドキュメントの内容についてクライアントに何も伝えないためです。クライアントが「URL X に移動すると」「要素 User 内に要素 UserName と Password を含む Xml ドキュメント」を取得するという知識を持っている場合、REST の自己記述的制約に違反しています。影響は、エンドポイントをメディア タイプに結合し、事実上クライアントをそのエンドポイントに結合したことです。「ハイパーメディア制約」の意図
- 別の方法は、より一般的なメディア タイプを使用することです。このメディア タイプは、単にクライアントにコンテンツを提供してユーザーに表示し、クライアントがアクションを実行できるようにするためのオプションをユーザーに提供することを目的としています。html メディア タイプを使用すると、2 つの div タグでユーザー名とパスワードを返すために使用できるマークアップ言語を提供することで、これを行うことができます。html FORM タグと A タグを使用して、クライアントはそのリソースに対して追加の操作を実行できます。「ユーザー」オブジェクトが持つ可能性のあるすべての操作に、真の RESTful な方法でアクセスできるようにする方法を理解するのは難しく、かなりの経験が必要ですが、最終的にはクライアントとサーバーが非常にうまく分離されます。例として Web ブラウザーを見てください。Web サイトのコンテンツが変更されたために、ブラウザーの更新を行う必要がある頻度はどれくらいですか。
オプション 2 の問題点は、HTML だけを使用するとエンドユーザー エクスペリエンスがかなり制限される傾向にあり、そこで Javascript の出番です。「オプションの」REST 制限の 1 つは、コード ダウンロードの使用です。Javascript は、クライアントで追加の動作を有効にするためにサーバーからロードされるコードです。残念ながら、私の意見では、アプリケーション/xml を返す RESTful Web インターフェイスを作成し、javascript を使用してその一般的な形式を解釈する機能も提供します。このソリューションは、RESTful API を使用する Web サイトの元の開発者にとっては問題なく機能します。xml ファイルのコンテンツが変更された場合、javascript を変更してブラウザーに再ダウンロードすれば問題ないからです。でも、アプリケーション/xml コンテンツ モデルを制御できない、この API にアクセスしている他のサード パーティ開発者の場合、コードは完全に脆くなり、API コンテンツが変更されると破損する可能性があります。何らかの種類の Twitter クライアントを作成したことがある人に尋ねてください。Twitter がコンテンツを変更したためにアプリケーションが壊れた回数はどれくらいですか。
最初のオプションを使用してコンテンツに特定のメディア タイプを与えることにより、サーバー開発者は application/vnd.mycompany.userV2+xml と呼ばれる新しいメディア タイプを導入でき、コンテンツ ネゴシエーションを使用して、既存のクライアントは引き続き元のメディア タイプと新しいメディア タイプを受け取ることができます。クライアントは、新しいメディア タイプを使用するように構築できます。エンドポイントとメディアタイプが結合されていないため、URL は同じままで、ブックマークは壊れていません。
Url のリストとそれらの URL から返されるコンテンツを提供する API ドキュメントを見た場合、それらの開発者は REST を取得できず、RESTful インターフェースが提供する利点を得られない可能性があります。皮肉なことに、最も苦しむのは開発者ではなく、API とやり取りしようとするサードパーティです!