REST和本地化资源

4
我希望将我的资源本地化为几种语言。如何使用REST架构在资源中发布多种语言?
资源:/chapters,/chapters/:id
当客户端向章节(chapters)发出POST请求时,会发送数据结构:
{localizations: { en: {title: 'New chapter' },sk: {title: 'Nova kapitola'} }}
一个包含en和sk本地化的新章节会被创建。
当客户端想要访问URL/chapter/1中的这个章节时,只应返回一个语言变异的表示。该如何实现区域范围(scope)? 我可以使用Accept-Language HTTP头并设置所需的区域(locale),Accept-Language: sk,或者我可以将区域(locale)包括在URL中,例如/chapters/1/en。
此外,PUT请求应该怎么处理?大多数情况下,只会更新一种语言变异,但偶尔会更新2种或更多种语言变异。
1个回答

1

为了更新数据,语言应该在数据的有效载荷中提供,就像您所描述的那样。那很好用。

对于获取数据,这取决于您是否想要允许 1)链接性和 2)客户端更改选择的语言。我认为您都想要 - 在您的应用程序内更改 URL 或切换语言比在浏览器中瞎搞并更改整个浏览器区域设置更容易且更可取。

因此,请检查您的 URL、应用程序 cookie 或应用程序用户数据以获取语言信息,并将 Accept-Language 标头作为后备方案。

我不明白您关于 PUT 请求的问题。您描述的数据结构可以很好地处理多种语言的更新,不是吗?您几乎可以按任何方式处理 PUT,只要被 PUT 到的 URL 仍然是可寻址资源即可。


是的,链接性很重要,说得好。 在这种情况下,PUT(更新现有资源)应该被实现为完全替换当前状态为新状态,这意味着发送所有语言变异与一个PUT请求。 大多数情况下,只会从服务器获取一个语言变异进行处理。 我认为最好将每种语言公开为子资源:/chapter/1/:language。这个地址链接性更好,也使缓存更容易。谢谢。 - Peter
是的,那会起作用。您还可以“重载”PUT /chapter/1以查找您在问题中定义的localizations结构(以允许在一个请求中进行多个更新,在某些情况下可能很重要)。 - Richard Levasseur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接