【问题标题】:REST: not all representations immediately availableREST:并非所有表示都立即可用
【发布时间】:2015-08-25 08:45:20
【问题描述】:
我正在为我的应用程序设计 RESTful API。我有多语言的实体。我想知道我是否应该将此实体视为具有多种表示形式的资源——每种支持的语言一种,或者我应该做多种资源并在 URI 中引入语言部分。
在我的例子中,实体的生命周期如下:
- 用户在 EN 语言版本中添加实体,
- 一段时间后(可能是
几个月或从不)用户添加其他语言版本。
在有效的 RESTful 设计中,所有的表示都应该在将资源发布到服务器后立即可用吗?或者也许 REST 允许由于业务流程而不是架构更改而添加新的表示形式(实现沿 JSON 获取 XML 表示的可能性不是这种情况)?
【问题讨论】:
标签:
rest
resources
multilingual
representation
【解决方案1】:
您可以使用 HTTP 标头“Accept-Language”来指示要获取的语言 - 或在 URL 中包含该语言 - 或两者兼而有之。
使用标头似乎是最优雅的方式,因为您的资源将拥有适用于所有语言的稳定 URL。这意味着您的资源将由一个且只有一个 URL 标识。
另一方面,将 URL 共享到资源的一种特定语言版本可能很有用 - 通过在 URL 中包含语言。这意味着您的资源将由许多不同的 URL 标识 - 从概念上将其拆分为多个资源。
这两种方式都是有效的解决方案,不会破坏任何 REST 约束。
REST 确实允许您随着业务的发展随着时间的推移添加相同资源的新表示。一个资源(由一个 URL 标识)可以有多种表示形式,具体取决于各种 HTTP 标头 - “Accept-Language”是一种,就像“Accept”指示客户端喜欢的格式(JSON/XML/HTML/其他)一样。