我有一个客户端应用程序,它使用REST服务与服务器通信。客户端应用程序是多语言的,这意味着服务器必须在呼叫期间知道用户的语言环境。 我想使用“post for location”方法,因为它有一种美好而宁静的感觉。当数据被发布以表示动作资源时,则uri为:
/actions/{language}
语言很重要,因此我可以本地化GET的错误消息(有时是返回的数据)。 现在,当服务器响应时,它需要发回资源的URI。如果我寄回去
/actions/{id}
其中id是新创建的资源的id,这不完全正确
/actions/{language}/{id}
将是本地化资源的URI。但是,实际资源没有语言上下文。
对此方案的最佳做法有何看法?
答案 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"
}