有关REST服务和I18N的最佳实践

P H*_*ans 11 java rest spring

我有一个客户端应用程序,使用REST服务与服务器通信.客户端应用程序是多语言的,这意味着服务器必须在呼叫期间知道用户的语言环境.我想使用"post for location"方法,因为它有一种美好而宁静的感觉.当数据被发布以说出动作资源时,那么uri是:

/actions/{language}
Run Code Online (Sandbox Code Playgroud)

该语言非常重要,因此我可以为GET本地化错误消息(有时是返回的数据).现在,当服务器响应时,它需要发回资源的URI.如果我寄回去

/actions/{id}
Run Code Online (Sandbox Code Playgroud)

其中id是新创建的资源的id,这不完全正确

/actions/{language}/{id}
Run Code Online (Sandbox Code Playgroud)

将是本地化资源的URI.但是,实际资源没有语言上下文.

对这种情况的最佳实践有何看法?

kal*_*lev 30

使用Accept-Language HTTP标头.


djn*_*jna 16

我不相信语言应该是"地址"的一部分,这是确定资源的东西,除非它确实是身份的一部分,以及你之间的紧张关系.

 /actions/{id}
Run Code Online (Sandbox Code Playgroud)

 /actions/{lang}/{id}
Run Code Online (Sandbox Code Playgroud)

表明事情不对.

一种替代方法是使用HTTP头区域设置信息来传递语言.另一种方法是将语言作为查询参数传递,它是请求的修饰符.


Bar*_*xto 5

找不到如何发表评论,但我会回答djna。只是想添加一些:

我不是REST专家,但是从我的角度来看,查询将是完美的解决方案,并且还支持HTTP标头语言环境。

例如,如果发送了HTTP标头,则使用它。如果发送了查询参数lang,请覆盖HTTP标头。

这样就得到:

/actions/{id}?lang=es-la
Run Code Online (Sandbox Code Playgroud)

另外,您可以指定一种默认语言,但不限于一种(但我认为最好是英语,如果未指定),但是如果用户未指定,则可以获取用户GEO位置以客户端语言显示信息一。

接受HTTP标头也更进一步,并提供客户端选项。配置HTTP标头要比用客户端中的语言操纵每个请求URL容易得多。

希望对您有帮助:D