1

いくつかの RESTful API は、多くの場合クエリ文字列パラメーター (例: stackexchange のフィルター パラメーター) によって、返されたデータの量に関するオプションを呼び出し元に提供します。

少なくとも返されるデータの量にある程度の構成可能性を提供したいと思いますが、必ずしも同じレベルの柔軟性を提供する必要はありませんが (私はそれに反対するものは何もありません)、個々のビューモデルを持つことは実行可能なソリューション。

それでも、ある種のプロパティ ホワイト/ブラック リストを追加する Web API の適切なポイントを見つけるのに苦労しています。これを行う適切な方法は何ですか?

4

1 に答える 1

1

単一の DTO でフィールドのサブセットを返す方法の 1 つは、DTO のオプション プロパティに null 許容型を設定することです。

[DataContract]
public class Dude
{
    [DataMember]
    public int Id { get; set; }

    [DataMember(EmitDefaultValue = false)]
    public string FirstName { get; set; }

    [DataMember(EmitDefaultValue = false)]
    public string MiddleName { get; set; }

    [DataMember(EmitDefaultValue = false)]
    public string LastName { get; set; }

    [DataMember(EmitDefaultValue = false)]
    public int? IQ { get; set; }
}

このように、クライアントが応答で確認することに関心を持つフィールドのリストを取得し、返される DTO のインスタンスにそれらのみを入力する必要があります。

return new Dude() { Id = 123, FirstName = "Johnny" };

のような JSON が送信されます{ "Id":123, "FirstName":"Johnny" }。別のクライアントが sayLastNameを要求すると、返さnew Dude() { Id = 123, LastName = "Bravo" };れ、JSON は になります{ "Id":123, "LastName":"Bravo" }

これは、XML と JSON の両方で機能します。JSON のみで問題ない場合は、属性を適用する必要はありません。null を無視するように JSON.NET に指示するだけです。

config.Formatters.JsonFormatter.SerializerSettings =
        new JsonSerializerSettings
        {
            NullValueHandling = NullValueHandling.Ignore
        };

フィールドのリストを取得する方法の最後の部分は、API の設計次第です。おそらく、アクション フィルターを使用して要求からこれらの標準フィールドを取得し、それを使用して永続ストアからデータを取得できます。

于 2013-07-18T04:04:34.877 に答える