2017-12-06 6 views
0

バックエンドにエクスポートされたリポジトリ(Spring Data REST)に関連する多くのリソースがあります。 クライアントはGETで "root"リソースをロードし、関連するリソースを "_links"プロパティで遅延ロードします。 クライアントは、ロードされたグラフの一部のリソースを変更できます。Spring Data RESTで深くネストされたJSON構造の更新を実装する最も良い方法は何ですか?

すべての遅延ロードされたリソースをjsonに取り込み、変更されたリソースを一度にバージョンチェック(楽観的)で更新するサービスを実装したいと考えています。

これを実装するにはどうすればよいですか? このアプローチは悪い習慣ですか?

+0

https://www.graphql.com/ – StanislavL

+0

の良い場所として聞こえますが、良いアプローチのように聞こえるかもしれませんが、どのように実装するのが面白いでしょうか。特定の設定が欠落していると、JVMにトスを送ることができ、ユーティリティのためにシングルトンのデザインパターンを実装していることを確認してください –

+0

「しないでください。 JSONは、データ構造自体ではなく、データ構造の表現です。適切な抽象化とカプセル化を使用します。 I/O上でのみJSONから変換します。 – Raedwald

答えて

0

サウンドあなたが必要とするデータを1回のリクエストで処理できます。必要な部分のデータのみを要求するAPIと呼び出しクエリを定義できます。

カスタマイズされたアップデートもサポートしています。

0

SDRでネストされたリソースを熱心に読み込みたいのであれば、関連する「ネストされた」リポジトリのエクスポートをオフにする(または完全に削除することもできます)。たとえば、次のように

@Entity 
public class Parent { 
    //... 
    @OneToMany(cascaded = ALL, orphanRemoval = true) 
    private Set<Child> children; 
} 

@Entity 
public class Child { 
    //... 
} 

@RepositoryRestResource 
public interface ParentRepo extends JpaRepository<Parent, Long> {} 

@RepositoryRestResource(exported = false) 
public interface ChildRepo extends JpaRepository<Child, Long> {} 

また、あなたがOneToMany注釈へcascade = ALL, orphanRemoval = trueパラメータを追加することができます。

その後、すべての子オブジェクトは、親オブジェクトによって管理され、共通のペイロードは、このようなルックスになります:それはすべてを取得することができますgraphql.com

のための良い場所として

{ 
    "name": "parent1", 
    "children": [ 
     { 
     "name": "child1" 
     }, 

     { 
     "name": "child2" 
     } 
    ] 
} 
+0

あなたの答えをありがとう!クライアントはリソースを遅延させてロードしますが、1つの要求でそれらを更新します。 書き込み時に "exported = true"、読み出し時に "exported = false"にリソースを設定できますか? – Aleksandr

+0

あなたを助けた/ upvote回答を受け入れることを忘れないでください;;) – Cepr0

+0

私はあなたの答えを他の質問で受け入れますが、この質問はまだ私にとっては不明です。私は "エクスポート"されたリソース(クライアントは遅延ロード)を持っていますが、変更されたリソースを一緒にコミットするには "トランザクション"のようなものが必要です。 – Aleksandr

関連する問題