2

WebAPI の例のほとんどは、いくつかのモデル (ドメイン モデルまたは特定のビュー モデル) を返しているようです。

ドメイン モデルを使用する場合、実際には ajax 呼び出しからのビューで必要以上のデータを要求し、JavaScript を使用してビュー モデルを構築します (Web アプリを構築していると仮定します)。

ページ (ビュー) ごとに異なるビュー モデルを使用してみました。これにより、ネットワーク フットプリントを削減し、必要なフィールドのみを返すことができます。しかし、ApiController では GET メソッドが多すぎます。また、将来のニーズを予測して、あらゆる種類のビュー モデルを返す API を構築することは不可能です。

Facebook Graph API を模倣して、次のような uri を作成したいと思います。

http://... api/games/333?fields=id, name, price, imageUrl

そして、ユーザーはこれらのいくつかのフィールドだけでレコードを更新できるはずです。

詳細な説明は、Google コードのブログ エントリ、Making APIs Faster: Introduction Partial Response and Partial Update にあります

ここにある他のいくつかの投稿は、これが の現在の能力を超えていることを示唆していASP.NET WebAPIます。または他のパッケージは、目標を達成するのに役立ちますServiceStackか?

4

3 に答える 3

2

このプロジェクトを試してください: https://github.com/AnthonyCarl/ServiceStack.PartialResponse質問の部分応答側

ServiceStack.PartialResponse.ServiceModel

ServiceStack.Net の Google スタイル部分応答。現在、次のコンテンツ タイプのみがサポートされています。

  • アプリケーション/json
  • アプリケーション/jsv
  • テキスト/html
  • application/xml は現在サポートされていません。

これを ServiceStack IPlugin として実装したかったのですが、アプローチの応答 DTO に必要なアクセスを取得する方法がわかりませんでした。現在、これは IRequestContext 拡張機能として実装されています。

フィールドセレクターの提供

フィールド セレクターは、ヘッダーまたはクエリ文字列を使用して渡すことができます。デフォルトでは、フィールドセレクターは両方から組み合わされています。重複するフィールド セレクターが削減されます。セレクターがリストを参照する場合、フィールド セレクターはリスト内のすべてのエントリに適用されます。

于 2013-08-26T19:11:21.357 に答える
2

ServiceStack で部分的な更新を実装するには、いくつかのオプションがあります。クライアントがリクエスト本文のフィールドのサブセットを送信できる PATCH スタイルのリクエストを取得するために、null 許容値を持つリクエスト DTO と ServiceStack の同様の拡張メソッドを使用するアプローチのPATCH リクエストの実装に関するこの質問を参照してください。PopulateWithNonDefaultValues要求本文に特定のフィールドが存在しない場合、ドメイン オブジェクトのそのプロパティは更新されません。

更新する必要があるフィールドのサブセットを指定するためにクエリ文字列を使用する必要がある場合でも、上記のアプローチを引き続き使用できますが、名前のない受信リクエスト DTO オブジェクトの値を最初に無効にするコードを追加します。クエリ文字列で。その後、再び を使用PopulateWithNonDefaultValuesして、残りの値をドメイン オブジェクトにコピーできます。

また、あなたの投稿の別の部分で、私が今挙げた推奨事項と密接に関連していることについてコメントするには、次のようにします。

ドメイン モデルを使用する場合、実際には ajax 呼び出しからのビューで必要以上のデータを要求します...

メッセージベースの設計が役立つのは、内部ドメイン モデル オブジェクトを再利用して公開するのではなく、要求/応答メッセージを個別の DTO クラスとしてモデル化することです。以上の利点の中でも、要求/応答モデルで不要なフィールドを公開するという問題が解消されます。メッセージベースの設計は、ServiceStack の実装を推進するコア コンセプトの 1 つです。ただし、Web API または MVC を使用して同様の結果を得ることができます。この設計が ServiceStack でどのように機能するかについて説明しているこの記事を読むことを強くお勧めします。

于 2013-08-26T19:11:37.650 に答える