問題タブ [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.

0 投票する
1 に答える
4669 参照

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 つの質問:

  1. Spring Data Rest が含まれている HAL がデフォルトではないのはなぜですか?
  2. HAL を出力形式として設定するにはどうすればよいですか
0 投票する
0 に答える
265 参照

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 する必要があります。コメント投稿者による。この背後にある理由は何ですか?

0 投票する
0 に答える
159 参照

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 サポートはどうですか?

0 投票する
1 に答える
531 参照

zend-framework2 - ZF2でDoctrineObject Hydratorを使用してネストされた配列出力を取得するには?

可能ですか/ ZF2ハイドDoctrineObjectレーターが、ネストされたエンティティオブジェクトを持つ配列ではなく、ネストされた配列として出力を提供するようにする方法は?

となることによって

その代わりに


追加情報/背景:

私が取り組んでいるZF2アプリケーションでは、Doctrineを使用しており、エンティティFooBar. それらの間にはOneToOne関係があります -- Foo has a Bar:

Fooオブジェクトを取得してに渡すとDoctrineModule\Stdlib\Hydrator#extract(...)(私のアプリケーションでは 内で行われます)、タイプ のZF\Hal\Plugin#convertEntityToArray(...)要素を持つ配列を取得します。barBar

次のステップ (実際には後でいくつかの呼び出し) で、この結果が に渡され、Zend\View\Renderer\JsonRenderer#render(...)次に に渡され、Zend\Json\Json::encode(...)内部で が実行されjson_encode(...)ます。

したがって、 の値はfoo[bar]フィルターで除外され、出力は次のようになります。

0 投票する
1 に答える
317 参照

angularjs - ブックマーク AngularJS フロントエンド (直接アクセス) - Spring Data Rest バックエンド

Spring Data Rest従来のリレーショナル DB を介して提供される RESTful サービスを操作する Web フロント エンドの実装を開始しました。これは で行われ、私が見つけAngularJSたライブラリは の哲学と形式主義にangular-hal非常によく適合しています。HATEOASSpring Data Rest

たとえば、最初の API エンドポイント (「/」) を知る必要があるだけで、すべてのクエリは URL を気にせずにリレーションを介して実行されます。私が抱えている問題は、エンティティの 1 つを表示しているページに直接アクセスできることです。

連絡先リポジトリの例を見てみましょう。ホームページから開始し、連絡先リストをナビゲートして、詳細を確認したい連絡先を選択すると、問題はありません。

しかし、連絡先の詳細を表示するページに直接アクセスすることはできません。リソースはリスト コントローラーから編集コントローラーに注入され、編集コントローラーは、リスト コントローラーから指示されない場合、要求する URL を知ることができません。

根本的な問題はSpring Data Rest、エンティティには (JSON ではなく) エンティティのパブリック フィールドがなく、リポジトリにはID で検索するidAPI がないことです。relation

いくつかの解決策を考えましたが、どれも気に入りません。

1. バックエンドで回避する

  • ブックマークする必要があるすべてのエンティティにProjectionwith メソッドを追加します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 環境でのデータ アクセスに関するベスト プラクティスは何ですか?

0 投票する
1 に答える
528 参照

api - 同じ rel を持つリンクの HAL+JSON 表現

HAL仕様には次のように書かれています:

: リンクが単数形であるかどうかわからない場合は、複数形であると想定してください。単数形を選択して変更する必要がある場合は、新しいリンク関係を作成するか、既存のクライアントを壊す必要があります。

特定の rel の単数または複数とのリンクの作成は、特定のリソース表現内でのその rel の使用にのみ適用されますか、それとも任意のリソース表現でのその rel の使用に適用されますか?

たとえば、itemrel の下のリンクはリソース X 内で常に複数でなければならないと決めた場合、その制約はリソース X にのみ適用されますか、それともリソース Y にも適用itemされるのでしょうか?

0 投票する
1 に答える
56 参照

hateoas - 同じリソースにつながる異なるリンクを使用しても問題ありませんか?

オプション1:

常に「絶対」リンクを返します (ネストなし) 。このようにして、特定のリソースに対して常に同じリンクをクライアントに提供します。

必要ですか?(サーバー側で追加の作業が必要であることを知っています)

オプション 2:

また、クライアント (ここでは従業員) に返されるリソースの下にネストされた「相対」リンクを返すこともあります。しかし、クライアントは、同じリソースに対応する2 つの異なるリンク (" http://api.com/companies/1 " と " http://api.com/employees/4/company ") を受け取った可能性があります。

他の選択肢よりも優れた選択肢はありますか?その理由は?

0 投票する
1 に答える
824 参照

hateoas - ページ化されたリソースを HAL で表示する正しい方法は何ですか?

これは初歩的な質問のように聞こえますが、ページ化されたリソースを HAL 形式で表示する最良の方法は何だろうか? 現在、Spring HATEOAS API を使用してPageobject を resourceに変換していますPagedResourcesAssembler#toResource(Page<T>, ResourceAssembler<T,R>)。これにより、次の出力が得られます。

}

すべて正常に動作しますが、唯一の問題は、返されるコレクションが_embeddedフィールドの下にあり、クラス名を持っていることです。そのため、クライアントはこのクラス名も知っている必要がありますよね? contentコレクションを非 HAL 形式で返す方がよいでしょうか? はいの場合、Spring HATEOAS を使用してどのように達成すればよいですか?