2012-04-08 8 views
2

私はRESTとServiceStackに入っています。私のGETはXMLまたはJsonの文字列を返しています。ServiceStackを使用してコマンドを送信する方法は?

私はドメインモデルを変更するPUTコマンドまたはPOSTコマンドを処理する必要があります。

リソースが1つの場合、ドメインモデルに複数のコマンドがある可能性があります(名前の変更、住所の変更、請求先住所の変更などが可能な顧客リソースの場合)。ドメインモデルへの各変更は、これらの変更のうちの1つだけで構成されます(すべてではありません)。

ServiceStackでは、変更内容を示すフラグ/列挙型を含むONE DTOを作成しますか?これは、私がドメイン上で何をすべきかを示すcase文を持つ1つのRESTサービスがあることを意味します。これは、ドメインを変更するためにポストする必要のあるデータを含む、非常に大きなDTOオブジェクトを持っていることを意味します(そのうちの多くのプロパティは空になります)。

また、モデルの変更に固有の、たくさんのDTOとRESTサービスを作成していますか?この場合は、?Command = changeAddressをURLに追加する必要がありますか?これが正しいかどうかはわかりません。

答えて

4

また、これは私が( プロパティの多くは空になるの)私のドメインを変更するために掲示する必要のあるデータ が含まれている非常に大きなDTOオブジェクトを持っていることを意味し。 ServiceStackのテキストシリアライザ(すなわちJSON/JSV)は唯一の非null値のデータを放出していない何のデシリアライズの時間を費やすことはありませんので、

空の性質を持つ非常に大規模なDTOオブジェクトは、パフォーマンスの問題ではありませんペイロード - それはパフォーマンスの観点から懸念すべきではありません。

RESTサービス動詞ごとに同じRequest DTOを使用する必要はありません。サービスの設計方法には「ServiceStack方法」はなく、ServiceStackはデザインスタイルを強制しません。

あなたはより多くのREST-fulがデザインを好むしたい場合、あなたは私のような何かを考え、お客様の請求先住所を変更するために個別に変更することができ、管理可能エンティティ、例えばにあなたの顧客を分割します:

PUT /customers/address/billing 
{ 
    "Line1": "123 Street", 
    "City": "Brooklyn", 
    "State": "NY" 
} 

お客様の住所を管理する別のRESTサービスをご利用ください。例:

Register<CustomerAddress>("/customers/address/{AddressType}"); 
+0

ありがとうございます。 –

+0

上記の例では、請求先住所ではなく配送先住所を変更する場合、同じサービスではないでしょうか?つまり、請求と配送の変更を区別するにはどうすればよいですか?または、私はRegister <>( "customer/address/shipping")とRegister( "customer/address/billing")を持っていますか? –

+0

同じCustomerAddressサービス。 AddressTypeプロパティには、それらを区別するために使用できる型が設定されます。 – mythz

関連する問題