支持REST API中的多种语言

时间:2014-08-17 21:35:31

标签: rest asp.net-web-api

我有一系列我正在创建REST API的城市(我的第一个REST API)。每个城市都有许多与语言无关的东西,例如创建日期和人口数量。城市也有依赖于语言的东西,例如标题和简短描述。在城市内部,文件具有以下格式:

{
   "population": 9042,
   "name": {
       "en": "Berlin",
       "nl": "Berlijn",
       // ...
   },
   // ...
}

我的API的用户总是希望仅查看特定语言的城市信息,并返回以下内容:

{
   "population": 9042,
   "name": Berlin,
   // ...
}

我已通过/cities/:id/:language_code访问这些内容,例如cities/123/en。现在我想实现城市列表:GET /cities。那里也需要所要求的语言。由于这会导致/cities/:language_code,我得到的印象是将这个放在网址的末尾并不是一个好主意,并怀疑我会更好地使用/en/cities/...whatever...

这通常是如何在REST API中完成的?任何大的,很好实现的API都是一个很好的例子吗?

3 个答案:

答案 0 :(得分:5)

REST API基于HTTP协议,因此他们可以使用传统上用于定义首选语言环境的标头。

所以我会使用Accept-Language参数。

# Request
GET /cities/.... HTTP/1.1
Host: www.example.org
Accept-Language: en,en-US,fr;q=0.6

会给:

{
   "population": 9042,
   "name": Berlin,
   // ...
}

答案 1 :(得分:2)

这取决于您的客户。如果客户是应用程序,那么@Orabîg的答案是100%正确的。但是,如果您的客户是网络浏览器,则应将语言作为用户首选项进行跟踪。原因是用户可能正在使用非个人计算机,其中浏览器设置为不同的语言,并且他们可能不知道如何或能够更改该设置。不是强迫他们使用不熟悉的语言,而是在您的API中构建首选项。

在这种情况下,我将从Accept-Language中提供的语言开始,直到用户自己识别出来。一旦他们在每个请求的标头中传递一些识别标记,使用它来确定应该使用哪种语言。

答案 2 :(得分:0)

只需提及W3C的相关文章,即使用标头进行语言环境确定(不仅是语言,这似乎是问题的原始情况)

HTTP Accept-Language标头最初仅用于指定用户的语言。但是,由于许多应用程序需要知道用户的语言环境,因此通常的做法是使用Accept-Language确定此信息。单独使用HTTP Accept-Language标头来确定用户的语言环境不是一个好主意。如果您仅使用“接受语言”,则可以使用户陷入一系列不喜欢他的选择中。

对于初次接触,使用“接受语言”值来推断区域设置可能是一个不错的起点,但是请确保允许他们根据需要更改语言,并在必要时更准确地指定其文化设置。将结果存储在数据库或cookie中,以供以后访问。

一些潜在的问题包括:

  • 许多用户从未更改Accept-Language的默认设置。他们是 在安装用户代理时设置。除非他们是多语种或 还有其他原因可能无法调整语言偏好 甚至知道存在这样的设置。因此,用户可能从未 批准了接受语言设置。
  • 用户代理可以发送请求 仅指定一种语言而不指定区域,例如,您可以 无法获得带有de-DE,de-CH或de-AT的标头来表示德语为 分别在德国,瑞士或奥地利使用。在另一 则您可能只会得到de表示对德语的偏爱。如果 您打算使用该地区来决定使用哪种货币 您现在处于困境。您的特殊情况可能允许您 做出诸如“德国有8300万人, 瑞士有700万,但只有63%的人说德语,奥地利有8 百万,因此该用户可能使用欧元。如果我们错了,我们会 仅冒犯了我们说德语的客户的4.6%或刚超过4个的客户 百万人。”如果可以的话,请随意做出这样的假设 承担风险。要求用户提供更多信息更加简单 信息。另外,西班牙语或 例如,英语。
  • 人们向朋友借机器,他们租房 他们来自网吧。在这些情况下,推断的语言环境可能是 不当,应注意允许用户选择 来自任何页面的适当语言和语言环境 看着。

全文:Accept-Language used for locale setting