2016-09-22 16 views
1

何が良いですか?エンティティに対してRESTエンドポイントが照会されたときに、すべてのエンティティとサブエンティティを一度に返してから、クライアント側のコードを使用してUIに表示するか(「eager」モードと呼ぶ)、メインエンティティをまずサブエンティティの代わりにサブエンティティのidを返し、次にUIが各IDに対して正しいREST要求を処理するようにします。 (それをlazyモードと呼ぶ)。REST APIは熱心?

だから、このJSONを返すように(これは実際には有効なJSONではありません、ただ地域を左:接頭あなたはそれが何であるかのエンティティを理解するために):

country: { 
name: 'C1', 
regions: [ 
    region: { 
     id: 'I1' 
     name: 'R1', 
     area: 'A1' 
    }, 

    region: { 
     id: 'I2' 
     name: 'R2', 
     area: 'A2' 
    }, 
] 

} 

またはこの:

country: { 
name: 'C1', 
regions: ['I1','I2'] 
} 

、次に:

GET /rest/region/I1 
GET /rest/region/I2 

どれが良いですか?そしていつ使うの? ありがとうございます

+0

2番目の方が「RESTful」ですが、それ以降のAPIコールをいくつ作成するかによって、前者をやりたいことがあります。 – Falmarri

+1

あなたのデータに '' region ''キーは必要ありません。 '' regions "'リストはすでにあなたにregionオブジェクトがあることを伝えます。 –

+0

リージョンキーを必要としないのは、実際には分で有効なJSONではありません。 – tonicsoft

答えて

3

このような決定は、通常、すべてを前もって設計しようとするのではなく、必要に応じて行う必要があります。誰があなたのサービスを使用しているのか(あなたはUIから使用されることに言及しています)、そして要件が何であるかを考えてください。

UIは常にすべてのデータを読み込む必要がありますか?そうであれば、遅延読み込みは意味をなさないので、クライアント側のコードに複雑さを加えるだけです。パフォーマンスの問題が発生した場合や、すべてのデータを必要としない別のUIページを追加した場合は、後で別のURLで「遅延読み込み」を実装することができます。

UIはデフォルトで「トップレベルのデータ」のみを表示し、より詳細な情報はユーザーからの入力に基づいて条件付きでのみ表示される場合、「レイジーモード」のようにデータのすべてが常に必要というわけではありません。

本来、のAPIを書く前にUIコードを書きます。それはどの実装がより理にかなっているかを教えてくれます。

3

まあ、それはありますか?

データが変更されない場合は、熱心に読み込むことができます。

オフラインサポートを提供している場合は、ユーザーがインターネットを切断してクライアントを動作させたい場合でも、熱心な負荷が必要です。しかし、それはよく考えられたクライアント側のフレームワークを必要とするでしょう。

データが頻繁に変更される場合は、遅延ロードを行う方がよいでしょう。

データが保護されている場合、一度にすべてではなく小さな部分でデータを渡す方が良いですが、これは議論の対象です。

要するに、あなたのUIがスマートでバックエンドがダム(e)の場合、熱心なロードのために行くのに対し、すべてのビジネスロジックがバックエンドにありUIが単なる表現であれば、遅延ロード。

ハイブリッドも悪い考えではありません。

1

だと思います。私はデータベースコールの数を減らすことができるので、最初に行くとAJAXの呼び出し(2番目と3番目の呼び出しを行う前に最初のリターンを持っている必要があります)の同期のための遅れ時間。

多くのデータがある場合、または最初のリクエストで結合や余分なデータがかなり長くかかる場合、最初の結果を見てユーザーを魅了し続けることができ、残りの部分最初の結果を表示している間に読み込みます。

これはまた、データがデータベース内にあり、ユーザーが余分なデータを確実に必要とすることを前提としています。

2

これが正しい方法かどうかはわかりませんが、私が好むものはありません。

  • ネストされたモデル、つまり内部モデルが比較的小さい場合は、「熱心な」モードを使用することをお勧めします。ネストされたモデルをフェッチするためのもう1つのAPI呼び出しを行う必要はありません。ネットワークの要求を最小限に抑えることが私の努力です。
  • ネストされたモデルのデータを同じ画面またはページに表示する場合は、「熱心な」モードを選択することをお勧めします。入れ子になったモデル情報が必要なので、同じAPI呼び出しになるようにしてください。この場合、ネストされたモデルのサイズが大きいかどうかは関係ありません。私はそれを必要とします!
  • ネストされたモデルのデータが後続の画面またはページで必要とされる場合は、より多くの時間を要するAPI呼び出しを使用するかAPIのシーケンスを使用するかを決定することにより、「熱心」または「遅延」モードを使用できますそれぞれ比較的短い時間で呼び出す。

多くのことが、クライアントアプリケーションの機能に依存していることがわかります。必要に応じて決定を下してください。また、API呼び出しを最小限に抑えるようにしてください。ネットワーク要求は高価です。しかし、ユーザーが何らかのアクションを実行しない限り、おそらく使用しないネストされたモデルのすべてのデータが原因で、応答が大きすぎる場合は、複数のAPI呼び出しに分割します。

関連する問題