2013-04-21 9 views
29

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

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

  • 会社の{name, address}
  • 従業員{firstName, lastName, employer[Company]}
  • 活動{rate, day, employee[Employee], client[Company]}

および活性を要求する(最も複雑なエンティティ:

例えば

、私はそれらの3つのエンティティを持っていますモデル)は次のようになります:

{ 
    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(リンクによって識別されるリソース)に関して語ります。 アクティビティには、たとえば、従業員があります。私が実際に使用したいのは、{rate: 456, day: 1366754400000, employee: {firstName:"xxx", lastName:"xxx" ...}}です。

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

これに関する入力はありますか?

ありがとうございます!

+0

'Angular'に隠されたすべての機能...?あなたのデータを提示するには、角度の中にさまざまな方法があります。あなたの問題が何であるかははっきりしていません。あなたの最後の文章は非常に分かりにくいです。もっと詳しく説明してください – charlietfl

+0

こんにちは、私は最後の文章を編集しました。私が基本的に意味するのは、クライアント側では、リンクを使って作業するのではなく、データを直接操作することです。 – Rolf

+0

リンクを設定するサービスを作成します。これは簡単です。あなたはサービスを作る方法を知っていますか?リンクのためにjsonファイルを検索し、リンクに従って何かをリクエストする方法を知っています。これは、サービスから構成ファイルを読み込むようなものです。 configが利用可能になったら、サービスを適切に設定するだけです。 – mpm

答えて

20

チェックアウトangular-hateoas。 IT部門は、$ resourceをHATEOAS対応のREST APIで使用するためのAngularJSモジュールを提供しています。

+1

Cool、それはRestangular(API-wise)と非常によく似ています。 – Rolf

+1

そして、それは非常にクールなRestangularに反して、リンクをたどるという概念を実際に埋め込んでいます! – Rolf

+0

角度4でも使えますか? – Shilan

7

返されたオブジェクトを検査し、リンクをチェックし、レスポンスを返す前に解決するレスポンストランスフォーメーションを記述することができます。 $http service documentationの「リクエストとレスポンスの変換」を参照してください。このような

何か:

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

「解決リンク」ステップは、$ HTTP呼び出しそのものであるので、サブ参照も解決されるだろう。しかし、これらは非同期であるため、実際の価値の代わりに約束を返す可能性があります。変換関数がこれを行うことが許されているかどうかわかりません。

しかし、@charlietflが指摘しているように、これによって、単一のエンティティを返すためのいくつかのHTTP呼び出しが行われることに注意してください。私はHATEOASのコンセプトが好きですが、あまりにも多くの呼び出しが行われると、これはおそらく低速になります。私はあなたのサーバーがデータを、またはその一部を直接返すことを提案し、詳細についてはリンクを加えます。

+0

ありがとう、私は慎重にそれを試してみます。 – Rolf

2

クライアント上のリンクに対してデータを扱いたいというあなたのコメントに基づいて、私はRestangularが適切だと思います。

+0

素晴らしい、私はまた、HATEOASスタイルの消費のためのAngularJS生態圏におけるベストフィットどのようになるかについて少し考えている2014年に今のようになり:) – Rolf

+0

を持っています。 それで、どうやって終了しましたか?@ Rolf? – Yosh

+0

さて、私はこの問題について十分に調査しなかった。 Restangularでは、HTTP経由でAPIを消費することができます(RESTfulかどうかはわかりません)。しかし、自動検出(HATEOASに基づく)はありません。 – Rolf

1

私は自分のプロジェクトの1つにangular-halを使用しています。それは春のHATEOASバックエンドでした。そして、私はどんな問題にも出くわしませんでした。パラメータ化されたリソースを処理します。私はそれがHALだけをサポートしていると思うので、あなたはおそらくHAL準拠の応答を生成するようにそれを設定しなければならないSpring Data Restを使用しているからです。

+1

[バージョン2.2.0より、SpringデータRestレスポンスはデフォルトでHALです](http://docs.spring.io/spring-data/rest/docs/2.2.0.RELEASE/reference/html/#repository-resources)。リソース発見可能性) – mounds

0

私は混乱は、あなたが何をあなたが本当にやりたいことは春データは、より完全なJSONレスポンスを送信さであ​​る角度ソリューション、求めているということかもしれないと思います。つまり、クライアントがレスポンスJSONの一部として従業員データを返すようにするだけです。クライアントがそれを調べるための追加の手順を実行する必要はありません。私はSpringデータでどのデータストアを使用しているのかわかりませんが、一般的な解決策は、public getEmployee()メソッドをActivityクラスに追加し、メソッドを@RelatedToおよび@Fetchでアノテーションすることです(これはNeo4J - あなたの春のデータのための異なる注釈かもしれません)。これにより、Spring HATEOASは、/ activityの応答内にEmployeeレコードを含める必要があります。お役に立てれば。あなたがやりたいことができなかったことを試してみましたが何の機能

関連する問題