我们正在为将在医院中使用的手持应用程序设计API。 API的网址是/foo/bar/238
之类的完整内容。响应需要进行本地化,因此我们将使用Accept-Language
标头。但是,此API调用返回的某些元数据需要依赖于使用该应用程序的护理单元。
鉴于设备知道位置,将此信息与请求一起发送的最佳方式是:
答案 0 :(得分:2)
显然,两个(标题,查询参数)在技术上都有效,我认为这取决于个人偏好。
我会认为反对标题,因为它们是HTTP基础结构的一部分,而且它们通常不会或不应该成为内容的一部分。此外,客户无法真正发现"或"浏览"使用标头,这违反了REST。
因此,它必须是URI的一部分,例如查询参数。这样做的好处是,它可以链接,测试,导航,缓存等。
答案 1 :(得分:1)
根据您的要求,此信息不需要在标头或查询参数中公开。
我了解用户需要通过身份验证才能访问您的API。因此,您很可能有Authorization
标头来执行身份验证(用户是谁)和授权(用户可以执行的操作)。
如果用户知道他们所在的护理单位,您可以根据当前在API中进行身份验证的用户返回数据,而不依赖于查询参数或标题。
在这种方法中,您需要坚持用户当前正在工作的护理单位。当用户从一个护理单位移动到另一个护理单位时,只需使用护理单位数据更新用户资源:
PUT /api/users/me/nursing-unit
Content-Type: application/json
{
"nursing-unit-id": 1
}
如果上面提到的第一种方法不适合您的需求,使用查询参数仍然是一种很好的方法。
一旦URL应在REST API中识别资源本身,care unit参数将更适合查询参数而不是自定义标头。