如何使用ServiceStack发送命令?

时间:2012-04-08 06:43:11

标签: servicestack

我刚刚进入REST和ServiceStack,现在我的GET正在返回可能是XML或Json的字符串。

我现在需要处理改变我的域模型的PUT或POST命令。

对于单个资源,我可以在我的域模型上有许多命令(即对于客户资源,我可以更改名称,更改地址,更改帐单地址等)。对域模型的每次更改都只包含其中一项更改(并非全部)。

使用ServiceStack,我是否创建了一个包含标志/枚举的ONE DTO来指示更改的内容?这意味着我有一个带有case语句的REST服务,以指示我应该在域上做什么。这也意味着我有一个非常大的DTO对象,其中包含需要发布以更改我的域的数据(其中许多属性将为空)。

或者我是否创建了许多DTO和REST服务,每个服务都针对模型的更改?在这种情况下,我需要将?Command = changeAddress添加到URL吗?不确定这是否正确。

1 个答案:

答案 0 :(得分: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}");