2

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

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

对于单个资源,我可以在我的域模型上有许多命令(即对于客户资源,我可以更改名称、更改地址、更改帐单地址等)。对域模型的每次更改将仅包含这些更改中的一项(不是全部)。

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

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

4

1 回答 1

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}");
于 2012-04-09T14:45:20.050 回答