HATEOAS REST API に基づく Web アプリケーションでの URL (および各 URL に関連する状態) の処理に関するアドバイスを探しています。より具体的には、
- Web アプリケーションの URL が REST API の URL と結合されないようにする方法
- 単一のビューで複数のリソースを処理する方法
しかし、最初にもう少しコンテキストを提供させてください。
ハイパーメディア制約を使用して、REST レイヤーの上に Angular Web アプリケーションを構築しています。(注: HATEOAS よりも単に「ハイパーメディア (制約)」という用語を使用することを好みます)。
ハイパーメディアの制約によって指示されるように、アプリケーションでいつでも使用可能なアクションとリンクは、REST API によって提供されます。そのため、Web アプリケーションには、「ルート」を除いて、REST API のハードコードされた URL を含めないでください (その概念が REST API に実際に存在すると仮定します)。
一方、Web アプリケーションの各ページはブックマーク可能である必要があります。そのため、ブラックボックス アプリケーションを作成することはできません (単一の URL と、URL を変更せずにすべての状態変更が SPA で処理される)。これは、Web アプリケーションにも独自の URL 空間があり、何らかの方法で REST API の URL 空間にマップする必要があることを意味します。これはすでにハイパーメディアのアイデアと矛盾しています。
Angular アプリケーションでは、アプリケーションの状態を処理するために UI Router を使用します。これを機能させる方法は次のとおりです。
- 状態のみを定義し、URL は定義しません
- 現在の Web アプリケーション URL を対応する REST API URL にマップし、その REST URL に対応するリソースの表現を取得して、コントローラー ($stateParams 内) に渡す $urlRouterProvider.otherwise ハンドラーを定義しました。
- コントローラーは、REST 呼び出し自体を (またはサービスを介して) 行った場合と同様に、データ (およびリンクとアクション) を表現で使用できます。
このアプローチにはいくつかの欠点があるため、これまでのところ非常に優れています (または実際にはそうではありません)。
- Web アプリケーションの URL は REST API の URL にマップされるため、両方の URL スペースが結合されます。これは、ハイパーメディア制約を使用する際の基本的な前提の 1 つと矛盾します。つまり、REST API の URL は、Web アプリケーションを変更せずに変更することはできません。
- $urlRouterProvider.otherwise ハンドラーでは、現在の Web アプリ URL の表現を取得します。しかし、場合によっては (UI ルーターのネストされた状態を使用して) 1 つのビューに 2 つのリソースがあります。たとえば、アイテムのリストと 1 つのアイテムの詳細です。ただし、URL は 1 つしかないため、アイテムの詳細の表現のみが取得され、アイテムのリストは空のままです。
そのため、2 つの URL スペースを処理するアプローチを改善する方法について、いくつかの提案をお待ちしております。REST API が Web アプリケーションの (利用可能な) 動作を決定し、Web アプリケーションにブックマーク可能な URL を保持するためのより良い方法はありますか? なぜなら今、私たちは完全に正しいとは思えないある種のハイブリッドなアプローチを持っているからです.
前もって感謝します。
よろしく、
リュック