具有相同 API 端点的独立上下文的最正确方法
Most correct way to have separate contexts with the same API endpoints
不知道标题够不够清晰,全图如下:
我需要具有完全相同的 API 端点来访问两个(并且 仅 两个)不同公司(它们是更大 "parent" 公司)。这些应该 return 不同的结果。
有几个选项可以区分客户端发出的调用:
- 在 URI 中标识公司,例如
/companyA/users
和 /companyB/users
等等;
- 执行上述操作,但使用查询字符串,例如
/users?company=A
;
- 使用自定义 header (?)
关于这些选项的想法(或任何其他想法)?
自定义 headers 绝对不是一个选项,即使一些设计不佳的 rest api 使用它们。
查询参数通常用于过滤 collections 基于某些东西,例如日期范围或类似的东西,但将它们用于您想要使用它们的目的并不是罪过。
但是,综上所述,我会遵循子资源方法,就像您在第一个示例中展示的那样。它更易于理解,客户不必弄清楚您如何调用查询参数以及其中有多少。你只想要某个公司的用户。 :)
强烈建议您使用查询参数。自定义 headers 不是一个好主意,因为中间服务器(代理、缓存等)可能会将它们保留在 requests/responses 中,也可能不会。将公司嵌入 URL 是极其有限的。当需求发生变化并且您需要同时从多个 child 公司获取用户时,6 个月内会发生什么情况?添加新端点?
从概念上讲,API 是针对 parent 公司的,否则它不会包含多个 child 公司的数据。您想过滤掉恰好在公司 A 或公司 B 工作的 parent 公司的用户。这就是设计查询参数的目的。
不知道标题够不够清晰,全图如下:
我需要具有完全相同的 API 端点来访问两个(并且 仅 两个)不同公司(它们是更大 "parent" 公司)。这些应该 return 不同的结果。
有几个选项可以区分客户端发出的调用:
- 在 URI 中标识公司,例如
/companyA/users
和/companyB/users
等等; - 执行上述操作,但使用查询字符串,例如
/users?company=A
; - 使用自定义 header (?)
关于这些选项的想法(或任何其他想法)?
自定义 headers 绝对不是一个选项,即使一些设计不佳的 rest api 使用它们。
查询参数通常用于过滤 collections 基于某些东西,例如日期范围或类似的东西,但将它们用于您想要使用它们的目的并不是罪过。
但是,综上所述,我会遵循子资源方法,就像您在第一个示例中展示的那样。它更易于理解,客户不必弄清楚您如何调用查询参数以及其中有多少。你只想要某个公司的用户。 :)
强烈建议您使用查询参数。自定义 headers 不是一个好主意,因为中间服务器(代理、缓存等)可能会将它们保留在 requests/responses 中,也可能不会。将公司嵌入 URL 是极其有限的。当需求发生变化并且您需要同时从多个 child 公司获取用户时,6 个月内会发生什么情况?添加新端点?
从概念上讲,API 是针对 parent 公司的,否则它不会包含多个 child 公司的数据。您想过滤掉恰好在公司 A 或公司 B 工作的 parent 公司的用户。这就是设计查询参数的目的。