我有一系列我正在创建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都是一个很好的例子吗?
答案 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个的客户 百万人。”如果可以的话,请随意做出这样的假设 承担风险。要求用户提供更多信息更加简单 信息。另外,西班牙语或 例如,英语。
- 人们向朋友借机器,他们租房 他们来自网吧。在这些情况下,推断的语言环境可能是 不当,应注意允许用户选择 来自任何页面的适当语言和语言环境 看着。