API设计:用户位置

时间:2016-02-08 17:21:51

标签: web-services api rest

我们正在为将在医院中使用的手持应用程序设计API。 API的网址是/foo/bar/238之类的完整内容。响应需要进行本地化,因此我们将使用Accept-Language标头。但是,此API调用返回的某些元数据需要依赖于使用该应用程序的护理单元。

鉴于设备知道位置,将此信息与请求一起发送的最佳方式是:

  • 使用自定义标头(或预定义的,如果存在这样的东西)
  • 在查询字符串中标记它
  • 别的......

2 个答案:

答案 0 :(得分:2)

显然,两个(标题,查询参数)在技术上都有效,我认为这取决于个人偏好。

我会认为反对标题,因为它们是HTTP基础结构的一部分,而且它们通常不会或不应该成为内容的一部分。此外,客户无法真正发现"或"浏览"使用标头,这违反了REST。

因此,它必须是URI的一部分,例如查询参数。这样做的好处是,它可以链接,测试,导航,缓存等。

答案 1 :(得分:1)

方法1

根据您的要求,此信息不需要在标头或查询参数中公开。

我了解用户需要通过身份验证才能访问您的API。因此,您很可能有Authorization标头来执行身份验证(用户是谁)和授权(用户可以执行的操作)。

如果用户知道他们所在的护理单位,您可以根据当前在API中进行身份验证的用户返回数据,而不依赖于查询参数或标题。

在这种方法中,您需要坚持用户当前正在工作的护理单位。当用户从一个护理单位移动到另一个护理单位时,只需使用护理单位数据更新用户资源:

PUT /api/users/me/nursing-unit
Content-Type: application/json
{
    "nursing-unit-id": 1 
}

方法2

如果上面提到的第一种方法不适合您的需求,使用查询参数仍然是一种很好的方法。

一旦URL应在REST API中识别资源本身,care unit参数将更适合查询参数而不是自定义标头。