我正在开发REST服务,以获取具有多个部门的组织中的员工列表。 如果任何人都可以获得该列表,那么API可能看起来如下:
GET /api/employees?filterBy=Johnson
但是,业务规则的设定要求任何员工只能访问其所属部门的同事名单。
因此,来自分区代码 1234的Bill将从分区代码 5678获得对GET /api/employees?filterBy=Johnson
的另一个响应。因此,这违反了GET请求的幂等性。
更新:好吧,这并不违反幂等性,正如Julian Reschke所注意到的那样。对于在术语上不那么准确,我道歉。不过,无论 idempotence 的含义如何,问题仍然存在。发出两个相同的请求,两个不同的用户通常会得到两个不同的响应。即两种不同的资源,两种不同的相同数据视图。虽然GET不会改变服务器上的数据状态,但我认为这种情况是一种不当行为。也许最好说这违反了无行为。还是不?
考虑到REST API的无状态,我们必须在请求中的某处传递分区代码。那个地方在哪里?也许,有些标头像X-SUPERCORP-DIVISION: 12345
。或者是否足以假设可以通过身份验证令牌从用户身份服务请求分部代码,并与原始GET请求一起传递?那么我们如何管理缓存呢?
构建此类API的正确REST方法是什么?
谢谢!