【问题标题】:REST API: Distance unit of measurementREST API:距离测量单位
【发布时间】:2016-02-11 08:25:47
【问题描述】:

衡量距离的有利单位取决于文化。

例如,feet 可能优于 metre。这会使 API 的某些使用者不希望使用以下响应模型:

GET [uri]
{
    ...
    "distanceInMetres": 256
}

也许客户应该能够提供他们的文化偏好:

GET [uri]?culture=en-US
{
    ...
    "distance": {
        "value": 840,
        "unit": "ft"
    }
}

这是一种可以接受的处理方式吗?我似乎找不到任何最佳实践或标准。

【问题讨论】:

  • REST 不会强制您使用查询参数,但您当然可以通过这种方式解决您的问题。另一种方法是使用Accept-Language HTTP 标头字段并提供值en-US 来获取英尺而不是米。不过,我不确定这是否在所有情况下都是可取的。想象一下,用户使用默认语言设置为 en-US 的浏览器访问您的服务,尽管该用户生活在一个实际上有公制系统的国家/地区 - 在这种情况下,我猜查询参数会更好。

标签: rest asp.net-web-api api-design


【解决方案1】:

第二种方法似乎完全正确 - 与单位一起返回距离。但是,使用查询参数似乎不是这个想法。

对于各种特定于语言的功能,最好使用标题。甚至还有一个标题 - Accept-Language 但它不适合这里。查询参数应该用于更改响应数据本身而不是它们的呈现方式,除非您使用预定义的查询参数来获取字段的子集,例如

【讨论】:

    【解决方案2】:

    从 JSON 的角度来看,备选方案 2 无疑是可行的方法。它易于扩展,无需更改请求语义即可支持其他区域/单位。

    使用 HTTP 参数“调整”对象表示也是完全可以的。

    虽然并不真正符合经典的 REST 原则,但在某些情况下使用路径元素来提供此类参数非常实用。

    GET [/app/en-US/<resource-id>]?params1=
    

    如果您的 API 需要某些参数来处理大多数请求(例如,传递特定于区域的值),这很有意义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-03
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 2023-03-09
      • 2023-03-22
      • 1970-01-01
      • 2013-02-21
      相关资源
      最近更新 更多