【问题标题】:RESTful URL: where should I put locale? example.com/en/page vs example.com/page?locale=enRESTful URL:我应该把语言环境放在哪里? example.com/en/page 与 example.com/page?locale=en
【发布时间】:2011-12-15 02:29:28
【问题描述】:

我正在决定如何组织 URL 并将语言环境放入其中。我有两个选择:

  1. example.com/en/page
  2. example.com/page?locale=en -- Google 方式
  3. en.example.com/page -- 不好,因为我使用的是子域

从一方面看,example.com/en/pageexample.com/page?locale=en 更好更紧凑。 另一方面,我们有两个 URL example.com/en/pageexample.com/ru/page 用于具有两种表示形式的一个资源。 当然,在example.com/page?locale=en 的情况下,我们对于一个资源也有两个 URL,但在我看来它更 RESTful。

最佳做法是什么?你在用什么,为什么?

【问题讨论】:

    标签: url rest path locale


    【解决方案1】:

    本地化是 Restful API 中内容协商的一部分。

    所以我的首选方式是通过标题来实现。 HTTP 提供了定义所需语言的标准方法。看看Accept-Language 标头。

    【讨论】:

    • 是的。我知道接受语言。但例如在俄罗斯,很多人使用英语语言环境,但更喜欢俄语内容。因此,如果我只使用 Accept-Language,他们将没有机会更改内容的语言(当然更改浏览器的语言环境除外)。最常见的解决方案是站点布局中的语言切换器。所以我试图了解组织这种切换器的最佳方式是什么。
    • 我明白了,所以您的 api 客户端是浏览器(例如通过 AJAX 调用)?然后我会选择您建议的 url 参数方式(例如 ?lang=en),因为为您提供“可选”语义(回退到 Accept-Language 标头)。
    • 浏览器和外部服务。谢谢你的意见,我也是这么想的。
    • 我没有看到使用Accept-Language 的问题。是的,当您的 浏览器 发送页面的 HTTP 请求(可能只是您的 SPA 索引)时,它将发送浏览器设置中设置的值。但是对于您对 API 的所有请求,使用 Ajax,您当然可以为此标头指定任何您想要的值——任何体面的框架都允许您自动配置它。因此,您仍然可以让用户从下拉列表中选择一个区域设置,并始终将其与每个连续的请求一起发送。
    【解决方案2】:

    来自https://www.w3.org/International/questions/qa-accept-lang-locales

    HTTP Accept-Language 标头最初仅用于指定用户的语言。然而,由于许多应用程序需要知道用户的语言环境,通常的做法是使用 Accept-Language 来确定此信息。 单独使用 HTTP Accept-Language 标头来确定用户的区域设置不是一个好主意。如果您只使用 Accept-Language,您可能会将用户束缚在一组不符合他喜好的选择中。

    我的偏好:

    • 请求
      • 使用查询参数
      • 如果查询参数不是,则回退到Accept-Language 标头 指定
      • 如果未定义 Accept-Language 标头,则回退到 已记录默认语言环境
    • 响应

    【讨论】:

      猜你喜欢
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 2020-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-20
      相关资源
      最近更新 更多