2012-04-08 53 views
2

我剛剛進入REST和ServiceStack,現在我的GETs返回可能是XML或Json的字符串。如何使用ServiceStack發送命令?

我現在需要在改變我的域模型的PUT或POST命令上工作。

對於單個資源,我可以在我的域模型上有多個命令(即對於客戶資源,我可以更改名稱,更改地址,更改帳單地址等)。域模型的每一個改變將只包含這些改變中的一個(不是全部)。

有了ServiceStack,我可以創建一個包含一個標誌/枚舉的DTO來表明這個改變是什麼嗎?這意味着我有一個REST服務和一個case語句來表明我應該在域上執行什麼操作。這也意味着我有一個非常大的DTO對象,其中包含需要發佈的數據以更改我的域(其中很多屬性將爲空)。

還是我會創建大量的DTO和REST服務,每個服務都針對我的模型上的更改?在這種情況下,我需要添加?Command = changeAddress到URL?不知道這是否正確。

回答

4

這也意味着我有一個包含需要被張貼到改變我的域(其中很多 屬性將是空的)數據 一個非常大的DTO對象。

一空性非常大的DTO對象不是因爲ServiceStack的文本序列化(即JSON/JSV)僅適用於非空值發射數據的性能問題,並且不花時間去序列化什麼的不有效載荷 - 所以它不應該成爲性能方面的問題。

除了要求爲每個REST服務動詞使用相同的請求DTO以外 - 關於如何設計服務並沒有「ServiceStack方法」,ServiceStack不強制設計風格。

如果你想喜歡更REST-FUL設計,您會在客戶分成可單獨修改的管理實體,如更改客戶的結算方式地址我會做這樣的事情:

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

而且有一個單獨的REST服務來管理客戶的地址,例如:

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

再次感謝。 – 2012-04-10 09:03:03

+0

在上面的例子中,如果我要更改送貨地址而不是賬單地址,它會不會是相同的服務?換句話說,我該如何區分帳單和運輸更改?或者我會註冊<>(「客戶/地址/運輸」)和註冊(「客戶/地址/計費」)? – 2012-04-12 05:36:29

+0

相同的CustomerAddress服務。 AddressType屬性將填充可用於區分它們的類型。 – mythz 2012-04-12 05:39:31