10

所以我要求部分输出模型必须包含 UI 重要信息。这些信息本质上是文本翻译和日期、价格、长度的建议格式。

因此,输出模型的示例可能是:

{
  statuses : {
    enumValue1 : "Display This Text",
    enumValue2 : "Display This Text2",
  },
  thePrice : {
    value : 3.50,
    formattedValue : "$3.50"
  },
  length : {
    meters 3,
    formattedValue : "3 ft."
  },
  iAmAPropertyOnlyInGet : 42
}

现在,如果我将其作为输出模型,那么具有完全不同的输入模型是否“可以”?

{
  status : {
    enumValue1,
    enumValue2,
  },
  thePrice : 3.50,
  lengthInMeters : 3  
}
4

3 回答 3

9

您发送到原始服务器的表示可能与您收到的表示完全不同。考虑网络浏览器的工作方式。你 GETtext/html和你 POST application/x-www-urlencoded-form

使用 PUT 方法时,如果不完全相同,您 PUT 和 GET 的内容相似是正常的。

REST 架构风格对 HTTP 有效负载的形状没有任何限制,除了必须在消息中明确指定语义这一事实。

因此,事实上,在客户端和服务器之间共享模型类型而不在消息中明确标识该类型违反了自描述 REST 子约束。

于 2012-11-06T23:50:57.553 回答
2

这取决于您希望为客户(REST 服务消费者)提供什么样的灵活性。

如果您维护相同的模型,那么消费者可以加载现有模型,修改值,然后将其发回,这对于 CRUD 场景来说是非常自然的。

但是,如果您希望有两个不同的场景:1- 导入数据和 2- 导出数据,那么它们可能会有所不同。

通常,将其视为您的应用程序(您的问题域)中的模型。定义服务器端模型结构(这显然只有一个),然后想办法暴露它。对我来说,在查看问题中概述的这两个模型时,它们看起来很相似。我什至建议支持任何输入格式(其中任何一种)和一种输出格式(一次,可能取决于请求标头)。

于 2012-11-06T17:56:44.033 回答
0

除了数据本身,我会将元信息保存在单独的对象中。

所以在 JSON 响应中,第一个对象就像

{ meta:  { priceformat: $, lengthformat: ft },
 thePrice: 3.50,
 length: X
}
于 2012-11-06T18:31:54.390 回答