2017-09-18 9 views
1

質問:HALクライアントまたはHAL APIにadmin-on-restでアクセスする例はありますか?HALクライアントまたはHAL APIにアクセスする例

導入の最初の段落でHALが言及されたので私は始めましたが、今はHAL restクライアントを使用している人や他の誰かを見つけるのが難しいので、今では単純な既に堅牢な既存のHAL APIの上にあるfindAllリポジトリ

+0

すべてのコミュニティRESTクライアントは既に文書化されています。あなた自身を書くことはかなりシンプルです。私は、HAL参照は参考にすぎないと思う。あなたが自分のクライアントを書くことになったら、オープンソーシングを考えてください。 –

+0

もっと具体的かもしれませんが、わからない部分は、HALではjsonレスポンス自体に入れるのではなく、エンティティへのリンクで動作するということです。例えば。ユーザーがいる投稿がある場合、ユーザーはjsonのコンテンツ部分には存在しません。実際には、別のリンクセクションにその投稿のユーザーのURLへのリンクとして表示されます。これはGET_MANY_REFERENCEですか?私はこれがどこに合うかわからない。 – bzzhuh

答えて

1

ここで私の思考プロセスで汚染されていないより簡潔な回答を追加すると、誰もが将来の参照のために考え出されたことになります... HAL APIがSpring Data Restで作成されたと仮定します。

この統合の4つの主要なキーは以下のとおりです。

  1. は、使用しているすべてのエンティティのIDを公開、管理オン休み@Column(name="parentEntity", updatable=false, insertable=false) private Integer parentEntityId;
  2. によっていくつかの場所で必要とされるあなたのJPAエンティティの外部キー属性を公開しますRepositoryRestConfiguration.exposeIdsFor(MyEntity.class)
  3. リポジトリに@RepositoryRestResourceという名前を付けて、属性名(例:/api/myEntitys?field1=foo&field2=bar)で非常に有用な検索フィルタを公開するようにPagingAndSortingRepository<MyEntity, Integer>, QueryDslPredicateExecutor<MyEntity>に拡張します。
  4. 外部キーを使用して作成および保存リクエストを送信する場合は、露出した外部キ​​ーの上に(または、代わりにHALが使用していない)リンクされたリソース(例:http://myserver.com/api/myEntitys/19)ノートの1(例えばmyEntityId = 19)

他の小項目に:あなたができる休止の専門家のより多くのであり、場合代わりにPUTの

使用PATCH更新(あなたはPUT使用することができる可能性があなたのエンティティを私よりも上手く描くことができましたが、完全にマッピングされていて、HALのパッチが部分的なエンティティになりました)

GET_LISTとGET_MANY_REFERENCEを送信すると、レスポンスの 'page'セクションからアイテムとページングパラメータの合計数が取得され、APIリクエストで 'size'と 'page'クエリパラメータが使用されます。

任意の文字列エントリ(上記3から)のデフォルトの '等価'フィルタを 'contains'フィルタに変更するには、QuerydslBinderCustomizer<QMyEntity>も拡張し、独自のフィルタを提供する必要があります各リポジトリのメソッドをカスタマイズします。例:

default void customize(QuerydslBindings bindings, QChampion champion) { bindings.bind(String.class).first((StringPath path, String value) -> path.contains(value)); }

0

HALの具体例はありません。しかし、この導入のポイントは、管理者は、バックエンドに依存しないことでした。

documentationに従って独自のカスタムレストクライアントを作成することができます。インスピレーションのために既存のもののコードを読んでください。

+0

私はもっと具体的かもしれませんが、わからない部分は、HALではjsonレスポンス自体に入れるのではなく、エンティティへのリンクで動作するということです。例えば。ユーザーがいる投稿がある場合、ユーザーはjsonのコンテンツ部分には存在しません。実際には、別のリンクセクションにその投稿のユーザーのURLへのリンクとして表示されます。これはGET_MANY_REFERENCEですか?私はこれがどこに合うかわからない。それは "GET_ONE_REFERENCE"などとほとんど同じように見えますが、それは問題ではありません。 – bzzhuh

1

将来的にこれを参照する人は、Spring Data Restを使用してAPIを管理している場合、エンティティのインラインバージョンを示す既存のリポジトリごとにexcerptProjectionを使用することを検討できます。これは、あなたのAPIにアクセスする管理者以外に何もなかった場合に機能します。

私の場合は、エンティティを持つすべての残りのリソースに対してカスタム投影を作成し、同じことを「インライン」とする予定です。次に、admin-on-restのrestClientでは、すべてのGET_MANYリクエストまたはGET_MANY_REFERENCEリクエストに対して常にインラインプロジェクションを要求します。

これは私が現在持っている最高のものです。それは完璧ではありませんが、私が持っているエンティティの量については、最初からCRUDインターフェイスを構築するよりもまだ数週間は早いので、admin-on-restを強くお勧めします。

+0

私はいくつかの成功で上記をやっていましたが、最終的に私は暴露された外部キーである多くのケースで管理者が何を望んでいるかに従うことに決めました。例えば。この@Column(name = "parentEntity"、updatable = false、insertable = false) プライベート整数parentEntityId; – bzzhuh

+0

さらに、子オブジェクトのクラスでは "@JsonManagedReference"を使用しないでください.Parentオブジェクトを受け取らないため、Spring Dataはエンティティの作成方法を知らないためです。どのような結果が残っているのか分かりませんが、うまくいきます。子を参照するときには、親エンティティで "@JsonBackReference"を使用する必要があります。 – bzzhuh

+0

(restClientに/ API /エンティティとは異なるHAL/api/entity/searchを使用する方法を見つけ出すと、明日公開予定) – bzzhuh

関連する問題