31

HATEOAS準拠のRestfulクライアントを簡単に作成するために、Angularに隠されている機能やサードパーティのライブラリによって公開されている機能があるかどうか疑問に思っていました.

バックエンド側では、Spring Data/REST を使用して HATEOAS JSON API を生成しています。ただし、それを消費することはまったく別の話です。

たとえば、次の 3 つのエンティティがあります。

  • 会社{name, address}
  • 従業員{firstName, lastName, employer[Company]}
  • アクティビティ{rate, day, employee[Employee], client[Company]}

アクティビティ (モデルの最も複雑なエンティティ) を要求すると、次のようなものが生成されます。

{
    links: [],
    content: [{
            rate: 456,
            day: 1366754400000,
            links: [{
                rel: "self",
                href: "http://localhost:8080/api/activities/1"
            },
            {
                rel: "activities.activity.client",
                href: "http://localhost:8080/api/activities/1/client"
            },
            {
                rel: "activities.activity.employee",
                href: "http://localhost:8080/api/activities/1/employee"
            }]
        }]
}

私の API は REST (リンクで識別されるリソース) の観点から話します。たとえば、Activity には Employee があります。私が本当に使いたいのは :{rate: 456, day: 1366754400000, employee: {firstName:"xxx", lastName:"xxx" ...}}です。

ただし、最初の出力でわかるように、アクティビティには従業員へのリンクのみが含まれており、従業員のデータは含まれていません。これらのリンクを解決し、代わりに結果のデータを埋め込むために、Angular またはサードパーティのライブラリに何かありますか?

これについて何か意見はありますか?

前もって感謝します!

4

5 に答える 5

20

angular-hateoas をチェックアウトします。HATEOAS 対応の REST API で $resource を使用するための AngularJS モジュールです。

于 2014-04-01T02:18:33.230 に答える
7

返されたオブジェクトを検査し、リンクをチェックして、応答を返す前にそれらを解決する応答変換を作成できます。$http サービスのドキュメントの「リクエストとレスポンスの変換」セクションを参照してください。

このようなもの:

transformResponse: function(rawData) {
  var json = JSON.parse( rawData );
  forEach( json.content.links, function(link) {
    // resolve link...
  });
  return json;
}

「リンクの解決」ステップ自体が $http 呼び出しであるため、サブ参照も解決されます。ただし、これらは非同期であるため、実際の値ではなく promise を返す可能性があります。変換機能がこれを行うことが許可されているかどうかはわかりません。

ただし、@charlietfl が指摘したように、これにより単一のエンティティを返すために複数の HTTP 呼び出しが発生することに注意してください。HATEOAS のコンセプトは気に入っていますが、呼び出しが多すぎると動作が遅くなる可能性があります。サーバーがデータまたはその一部を直接返し、さらに詳細へのリンクを返すことをお勧めします。

于 2013-04-22T06:49:53.717 に答える
0

本当にやりたいことが Spring Data に、より完全な JSON 応答を送信させることである場合、Angular ソリューションを求めていることが混乱を招く可能性があると思います。つまり、クライアントが従業員データを検索するために追加の手順を実行するのではなく、サーバーが応答 JSON の一部として従業員データを返すようにするだけです。Spring Data で使用しているデータ ストアはわかりませんが、一般的な解決策は public getEmployee() メソッドを Activity クラスに追加し、メソッドに @RelatedTo と @Fetch のアノテーションを付けることです (これはNeo4J -- Spring Data のフレーバーでは異なるアノテーションである可能性があります)。これにより、Spring HATEOAS は /activity の応答内に Employee レコードを含める必要があります。お役に立てれば。

于 2015-10-16T12:04:17.017 に答える