7

是否有 REST 最佳实践来获取不同语言的资源。目前,我们有

www.mysite.com/books?locale=en

我知道我们可以使用接受语言标头,但这样做对我们来说更好吗

www.mysite.com/books/en or www.mysite.com/books.en

还是没关系?

4

3 回答 3

21

如果您试图让您的服务器返回相同书籍的不同翻译或本地化版本(换句话说,从 RESTful 的角度来看,相同的资源),然后使用Accept-Language,因为资源是相同的,但表示是基于不同的根据客户的需求。

但是,如果您尝试根据客户端的语言环境返回完全不同的书籍(例如,如果您知道用户在法国,则返回用法语编写的书籍),那么 URI 应该是不同的,因为将返回不同的资源。在这一点上,您谈论的更多是查询请求。对于它的价值,这种/books/en方法听起来很合理。另一种方法是将语言环境或语言作为资源参数添加到 GET as 中/books?lang=en

于 2011-11-21T02:09:00.053 回答
7

我认为最好的方法是实现以下方式:

  1. HTTP 的 Accept-Language 标头
  2. URI 中的语言前缀,例如 /en/books/...

换句话说,您可以接受两种来源的语言。实施将如下:

  1. 检查是否提供了 Accept-Language 标头并将其保存在变量中;
  2. 如果请求 URI 以/ en、/fr其他已知语言代码(系统支持)开始.
  3. 如果没有提供语言,请将默认语言保留在变量中,例如“en”

使用这种方法,您可以确保 a) 路径路由与语言无关,并且您的系统将与路径一致地工作;b) 语言处理/协商将与您的脚本完全分离。您可以在脚本中使用语言信息,甚至不知道来源是什么以及如何请求它。

于 2011-11-21T06:15:42.567 回答
0

我同意 manuel-aldana在问题RESTful URL的回答中的评论:我应该把语言环境放在哪里?example.com/en/page 与 example.com/page?locale=en

首先检查参数(例如 locale=en )以允许客户端明确指定语言并回退到Accept-Language

于 2012-06-16T19:14:26.340 回答