問題タブ [hal-json]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 春のデータ残りを含む場合、Spring は HAL 形式ではなく純粋な JSON でリソースを返します
Spring Data Rest が提供するエンティティにデフォルトのコントローラーを使用すると、すべてが正常に機能します。出力は次のようになります。
しかし、独自の Controller を使用すると、出力は次のようになります。
私のコントローラー
私のユーザー:
Spring Data Rest の依存関係を削除し、spring-hateoas、spring-plugin-core、および json-path (com.jayway.jsonpath) を含めると、機能します..しかし、他のいくつかのエンティティに spring-data-rest を使用したい
2 つの質問:
- Spring Data Rest が含まれている HAL がデフォルトではないのはなぜですか?
- HAL を出力形式として設定するにはどうすればよいですか
spring - 関連するサブリソースを作成するSpring HAL
Spring Data REST で @OneToMany サブリソース関連付けを投稿する質問を確認してください
今では、新しいコメントを作成するように常識的に言われています。たとえば、http://localhost/posts/1/commentsに POST を作成できるはずです。同時に、http://localhost/comments/search/findByCommenter?commenter=XXXで検索して、ユーザーのすべてのコメントを取得できる必要があります。
春には、私が言及した方法で投稿することはサポートされていません。パッチする必要があります。私の知る限り、それは専用のコメント リポジトリがない場合に限られます。したがって、コメントリポジトリがない場合はhttp://localhost/posts/1/commentsに新しいコメントをパッチするか、コメントを検索可能にしたい場合はhttp://localhost/commentsに POST する必要があります。コメント投稿者による。この背後にある理由は何ですか?
java - 基本クラスを拡張せずにJava HAL?
私が現在取り組んでいるプロジェクトではorg.springframework.hateoas.ResourceSupport
、オブジェクトにリンクを追加できるように、Springs を拡張することで REST API を介した HAL サポートを取得しています。
簡単な例:
Web レイヤーで、表現にリンクを追加できます。
すべて順調です。
問題は、これを達成するために、ドメイン オブジェクト (MyData) を直接再利用し、Web 表現レイヤーに別のクラスを作成しないことです。この理由は、この特定のケースでの私のアプリケーションは、ドメイン オブジェクトを直接使用できるほど単純であり、ハンドコーディングまたはマッピングを使用して、Web レイヤーとの間でマッピング ロジックを変換することを避けたいからです。道具。マッピング ロジックに対するもう 1 つの反論は、ビジネス ロジックがしばしばマッピング ロジックに忍び込み、ビジネス ロジックを理解するのがさらに難しくなるということです。
ドメインクラスは次のとおりです。
残念ながら、これでは HAL リンクを添付する場所がありません。
私の質問は、Java 用の HAL フレームワークがあり、「拡張」を使用して Web/ドメイン マッピング ロジックのルートを強制することなく、Web レイヤーでドメイン オブジェクトを直接再利用できるかどうかです。
これを可能にするSpringでHALサポートを使用する他の方法はありますか? Jersey での HAL サポートはどうですか?
zend-framework2 - ZF2でDoctrineObject Hydratorを使用してネストされた配列出力を取得するには?
可能ですか/ ZF2ハイドDoctrineObject
レーターが、ネストされたエンティティオブジェクトを持つ配列ではなく、ネストされた配列として出力を提供するようにする方法は?
となることによって
その代わりに
追加情報/背景:
私が取り組んでいるZF2アプリケーションでは、Doctrineを使用しており、エンティティFoo
とBar
. それらの間にはOneToOne
関係があります -- Foo
has a
Bar
:
Foo
オブジェクトを取得してに渡すとDoctrineModule\Stdlib\Hydrator#extract(...)
(私のアプリケーションでは 内で行われます)、タイプ のZF\Hal\Plugin#convertEntityToArray(...)
要素を持つ配列を取得します。bar
Bar
次のステップ (実際には後でいくつかの呼び出し) で、この結果が に渡され、Zend\View\Renderer\JsonRenderer#render(...)
次に に渡され、Zend\Json\Json::encode(...)
内部で が実行されjson_encode(...)
ます。
したがって、 の値はfoo[bar]
フィルターで除外され、出力は次のようになります。
angularjs - ブックマーク AngularJS フロントエンド (直接アクセス) - Spring Data Rest バックエンド
Spring Data Rest
従来のリレーショナル DB を介して提供される RESTful サービスを操作する Web フロント エンドの実装を開始しました。これは で行われ、私が見つけAngularJS
たライブラリは の哲学と形式主義にangular-hal
非常によく適合しています。HATEOAS
Spring Data Rest
たとえば、最初の API エンドポイント (「/」) を知る必要があるだけで、すべてのクエリは URL を気にせずにリレーションを介して実行されます。私が抱えている問題は、エンティティの 1 つを表示しているページに直接アクセスできることです。
連絡先リポジトリの例を見てみましょう。ホームページから開始し、連絡先リストをナビゲートして、詳細を確認したい連絡先を選択すると、問題はありません。
しかし、連絡先の詳細を表示するページに直接アクセスすることはできません。リソースはリスト コントローラーから編集コントローラーに注入され、編集コントローラーは、リスト コントローラーから指示されない場合、要求する URL を知ることができません。
根本的な問題はSpring Data Rest
、エンティティには (JSON ではなく) エンティティのパブリック フィールドがなく、リポジトリにはID で検索するid
API がないことです。relation
いくつかの解決策を考えましたが、どれも気に入りません。
1. バックエンドで回避する
- ブックマークする必要があるすべてのエンティティに
Projection
with メソッドを追加しますgetId()
findById()
対応するものをリポジトリ インターフェイスに 追加します- フロントエンドの URL の ID をパラメーター (またはパス) として使用し、新しく利用可能な検索関係を呼び出してリソースを解決します。
- 欠点: これにより、Spring Data Rest によって自動的に生成されたすべての DTO を手動でやり直す必要があるため、フレームワークの目的の 1 つが失われています。
- 質問: これらの id フィールドと findById メソッドを自動的に公開するように Spring を構成する方法はありますか?
2.自己関係を利用する
angular-hal
$href('self')
メソッドでエンティティのセルフ URI を取得するhalClient.$get(resourceUri)
それをページのパラメーターとして使用し、その上でnew を呼び出してリソースを解決します- 欠点: アドレス バーの別の "http://" によるエラーを防ぐために、ページの URL を挿入する前後に URI を処理する必要があります。それにbase64エンコーディングを行うことを考えましたが、これは消費しています。
- 欠点: これにより、API の URL が公開されます。このデータは重要であり、非表示にする必要があります (ネットワーク トラフィックを監視しているデバッガーを介してアクセスできる場合でも)。
3.HATEOASを忘れる
- 関係と検出機能を気にしないでください
- 単純な古い URL マッピングを削除し
angular-hal
て使用する$resource
- 欠点:これは逆行しており、ガイドラインに従っていないように感じます...
それで、何か不足していますか?完全な RESTFul HATEOAS 環境でのデータ アクセスに関するベスト プラクティスは何ですか?
api - 同じ rel を持つリンクの HAL+JSON 表現
HAL仕様には次のように書かれています:
注: リンクが単数形であるかどうかわからない場合は、複数形であると想定してください。単数形を選択して変更する必要がある場合は、新しいリンク関係を作成するか、既存のクライアントを壊す必要があります。
特定の rel の単数または複数とのリンクの作成は、特定のリソース表現内でのその rel の使用にのみ適用されますか、それとも任意のリソース表現でのその rel の使用に適用されますか?
たとえば、item
rel の下のリンクはリソース X 内で常に複数でなければならないと決めた場合、その制約はリソース X にのみ適用されますか、それともリソース Y にも適用item
されるのでしょうか?
hateoas - 同じリソースにつながる異なるリンクを使用しても問題ありませんか?
オプション1:
常に「絶対」リンクを返します (ネストなし) 。このようにして、特定のリソースに対して常に同じリンクをクライアントに提供します。
必要ですか?(サーバー側で追加の作業が必要であることを知っています)
オプション 2:
また、クライアント (ここでは従業員) に返されるリソースの下にネストされた「相対」リンクを返すこともあります。しかし、クライアントは、同じリソースに対応する2 つの異なるリンク (" http://api.com/companies/1 " と " http://api.com/employees/4/company ") を受け取った可能性があります。
他の選択肢よりも優れた選択肢はありますか?その理由は?
hateoas - ページ化されたリソースを HAL で表示する正しい方法は何ですか?
これは初歩的な質問のように聞こえますが、ページ化されたリソースを HAL 形式で表示する最良の方法は何だろうか? 現在、Spring HATEOAS API を使用してPage
object を resourceに変換していますPagedResourcesAssembler#toResource(Page<T>, ResourceAssembler<T,R>)
。これにより、次の出力が得られます。
}
すべて正常に動作しますが、唯一の問題は、返されるコレクションが_embedded
フィールドの下にあり、クラス名を持っていることです。そのため、クライアントはこのクラス名も知っている必要がありますよね? content
コレクションを非 HAL 形式で返す方がよいでしょうか? はいの場合、Spring HATEOAS を使用してどのように達成すればよいですか?