【问题标题】:REST API request with language and region带有语言和地区的 REST API 请求
【发布时间】:2018-12-01 20:05:06
【问题描述】:

我正在开发一个 REST API,我需要实现一个方法,该方法需要语言和国家/地区来生成正确格式的结果,因为结果包含数字和日期。

我使用 HTTP Accept-Language 标头来获取语言。规范将标头定义为语言说明符,但现在我不确定使用此标头获取国家/地区是否正确。例如,我想允许结果为西班牙语,但数字为英文格式(用逗号而不是点)。

es-USAccept-Language 标头的可接受值吗?

我在想我可以为我的 REST API 开发一个新的自定义标头,例如 X-Country

有什么想法吗?谢谢。

【问题讨论】:

  • 那是什么意思?(但数字是英文格式(用逗号代替点)
  • 格式数取决于地区。例如,西班牙语表示 4.294.967.295,000 与美国英语 4,294,967,295.00 (docs.oracle.com/cd/E19455-01/806-0169/overview-9/index.html)
  • 好吧,我应该说“用逗号代替句号”
  • 非常感谢我的answer 的反馈。

标签: java rest api http http-accept-language


【解决方案1】:

那里有关于如何localize your APIs 的好文档。甚至还有stack overflow response about it

它主要围绕content negotiation 和“Accept-Language”标题。如果您需要单独管理货币,一般共识似乎保留在有效负载中而不是标头中,但如果您要执行标头,我会执行 X-Accept-Currency(类似于其他 HTTP Accept 标头,但使用ISO 4217 货币代码)在请求中,X-Content-Currency 在响应中。

更新: 事情发生了变化——如果你打算提交你的标头进行标准化,你不应该在它前面加上 X。

【讨论】:

    【解决方案2】:

    我在想我可以为我的 REST API 开发一个新的自定义标头,例如 X-Country

    如果标准 HTTP 标头之一适合您的需要,我会避免使用自定义标头。

    es-USAccept-Language 标头的可接受值吗?

    是的,es-US(西班牙语/美国)是一个有效语言环境(请参阅下面的注释),它是Accept-Language 标头的合适值:

    5.3.5. Accept-Language

    Accept-Language 头域可以被用户代理用来 表示在语言中首选的自然语言集 回复。语言标签在Section 3.1.3.1 中定义。 [...]

    section 3.1.3.1的相关部分引用如下:

    3.1.3.1. Language Tags

    RFC 5646 中定义的语言标签标识自然 人类为使用而说、写或以其他方式传达的语言 与其他人进行信息交流。计算机 语言被明确排除。 [...]

    语言标签是一个或多个不区分大小写的子标签的序列, 每个都用连字符分隔(-%x2D)。在大多数情况下,一个 语言标签由一个主要语言子标签组成,它标识一个 广泛的相关语言家族(例如,en = 英语),即 可选地后跟一系列细化或缩小的子标签 语言的范围(例如,en-CA = 英语的变体 在加拿大传达)。语言中不允许有空格 标签。示例标签包括:

    fr, en-US, es-419, az-Arab, x-pig-latin, man-Nkoo-GN
    

    更多信息请参见RFC 5646


    注 1: 可以被认为是有效的语言和领土代码的组合(在某种意义上,给定领土的给定人口能够读和写给定的语言,并且在计算机上使用它足够舒适)可以找到here

    注意 2:不确定您使用的是哪种编程语言,但 here 是 Java 中可用的语言环境列表。

    【讨论】:

      【解决方案3】:

      有什么想法吗?谢谢。

      我的建议是从为您支持的每种(语言、国家/地区)拥有一个资源开始,然后担心您是否想要拥有一个支持 content negotiation 的资源。

      使用内容协商的资源的一个简单模式是使用Content-Location 标头指向协商语言/国家/地区对的特定资源。

      另请参阅 2012 年的 Tom Christie's answer,尤其是指向 Fielding's comment in 2006 的链接

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-04
        • 2019-12-01
        • 2020-07-12
        • 1970-01-01
        • 2021-10-05
        相关资源
        最近更新 更多