4

HypermediaでREST APIを使用するui ルーターを備えたAngularJSアプリケーションがあります。一般的な考え方は、API にさまざまな呼び出しの URL を生成させ、クライアントが URL 自体を作成しないようにすることです。

たとえば、製品のリストを取得する場合、API は次のように返します。

[
  {
    "id": 1,
    "name": "Product A",
    "_links": {
      "self": {
        "href": "http://localhost:4444/api/products/1",
        "name": null,
        "templated": false
      },
      "actions": []
    }
  },
  {
    "id": 2,
    "name": "Product B",
    "_links": {
      "self": {
        "href": "http://localhost:4444/api/products/2",
        "name": null,
        "templated": false
      },
      "actions": []
    }
  }
]

問題は、製品の詳細に移動したいということです。コレクションのハイパーメディアから API の URL を入手できます。ただし、状態を変更すると、詳細状態のコントローラーが製品をフェッチできるように、この URL を詳細状態に渡す必要があります。

UI URL は API URL から完全に切り離されています。つまり、クライアントには独自の URL スキームがあります。

クライアントをステートレスに保ち、各ページをブックマーク可能に保ちながら、これを達成する最良の方法は何ですか?

ui router1 つの解決策は、のdataプロパティで URL を渡すことです。ただし、ページはブックマーク可能ではありません。もう 1 つの方法は、UI url で API url を渡すことです。これにより、(API url が変更されない限り) ページをブックマーク可能に保つことができますが、UI url は非常に見苦しくなります。

他の考えはありますか?

私がこれについて非常に間違っていない限り、私はテンプレート化されたソリューション、つまり API がクライアントによってパラメーターを挿入する必要がある URL のテンプレートを返すソリューションを探していません。要点は、一部の URL は上記の例よりもかなり複雑であるため、URL には既にデータが取り込まれているということです。

4

1 に答える 1