2017-07-04 19 views
0

たとえば、次のような任意のjsフレームワークに基づいてSPAを実装したいとします。 Angular JS。私は既に、私がapp.Iに表示する必要がある情報を持つ多くの既存のWeb APIを持っている新しい情報を管理する1つを追加する必要があります。新しい1つは他のDtosを参照します。私の質問は、より良いアプローチは、APIを呼び出してDtoをWebアプリケーションでコンパイルするか、新しいAPIでAPIを呼び出すことです。すべてのデータをマージし、準備ができたオブジェクトでGETメソッドを作成します。ウェブサイトの観点からSPA - DTOの処理

第一アプローチ:

注文のWeb API

上のすべてをマージ:

Call (i know userId - based on logged in user [in this example = 1]) 

/get/order/{userId} 
{ 
UserId: 1 
Products:{1,2} 
} 

based on that call: 

/get/user/1 
{ 
FirstName: test, 
LastName: test 
} 

/get/product/1 
{ 
Price: 10, 
Name: Test 
} 

/get/product/2 
{ 
Price: 100, 
Name: Test2 
} 

ウェブサイトの観点からの角度のJsのWeb

第二アプローチ内のすべてのデータをマージ

Call: 

/get/ordermerged/{userId} 
{ 
    FirstName: test, 
    LastName: test 
    Products: 
    { 
     { 
     Price: 10, 
     Name: Test 
     }, 
     { 
     Price: 100, 
     Name: Test2 
     } 
    } 
} 

私はより良い概観のスクリーンショットを添付します。

Diagram

答えて

0

これは、再利用性と専門とのトレードオフです。再利用可能性が明らかに有利になる - あなたは仕事を減らさなければならなくなるかもしれない。専門化することで、フロントエンドがAPIをそのまま使用できるという利点があります。スペシャライゼーションを使用すると、実際に必要なデータだけをロードすることもできます。一方、多くの分離されたAPIでは、冗長なデータがあり、オーバーヘッドが若干増加する可能性があります。

私は実際に、あるアプローチが他のアプローチよりも優れているという考えはないと思います。それはあなたの特定の状況に合うかどうかにかかっています。私は、ケースごとにアプローチを取るべきだと主張したいと思います。いずれのエンドポイントも実際に再利用されていない場合は、「マージされた」/特殊バージョンを作成して、すべての呼び出しを1回で行うこともできます。アプリケーションの他の部分では、より再利用可能なエンドポイントを持つことができます。そのため、クライアント側でもう少し「処理」する必要があります。

パフォーマンス(1回のAPI呼び出しと複数回の比較)に関して、HTTP/2プロトコルは小さな複数の小さなAPIエンドポイントに賛成する可能性があります。

Angularのアプローチの方が優れているかどうかは、実際問題ではありません。角度は気にしない。 :-)

+0

私はまた、そのサービスが単一の責任であるべきであり、私がOrder Web Apiでそれをマージするとき、それが他のものに依存するので、第1のものがより良いと考えます。あなたはこのことについてどう思いますか? –

+0

すべては、それが使用されているコンテキストに依存します。上記の例では、すべてを1回の呼び出しにマージすることはありません。しかし、注文情報と商品データを1つのAPIエンドポイントに結合して呼び出すことができ、別の呼び出しでユーザー情報を取得することができます。 –

関連する問題