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

时间:2011-07-01 05:49:51

标签: java spring rest

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

/actions/{language}

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

/actions/{id}

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

/actions/{language}/{id}

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

对此方案的最佳做法有何看法?

4 个答案:

答案 0 :(得分:29)

使用Accept-Language HTTP标头。

答案 1 :(得分:15)

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

 /actions/{id}

 /actions/{lang}/{id}

表明事情不对。

另一种方法是使用HTTP标头语言环境信息来传递语言。另一种方法是将语言作为查询参数传递,它是请求的修饰符。

答案 2 :(得分:4)

无法找到如何发表评论,但我会选择djna回答。只想添加一些:

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

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

所以你得到:

/actions/{id}?lang=es-la

另外,您可以指定一种默认语言,而不是严格的语言(但我认为最好说,如果没有指定英语),但您可以获得用户GEO位置以客户语言显示信息,如果他们不不指定一个。

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

希望它有所帮助:D

答案 3 :(得分:0)

我认为,您不需要在RESTful服务器端支持国际化/本地化。

对于具有后端RESTful服务器的应用程序,应在客户端(您的Android应用程序,您的Web 2.0网页等)中进行国际化。

但是您应该设置错误响应的格式,例如:

{
    "code": "NET.001",
    "message": "The remote host can't reach"
}