使用相同API端点的单独上下文的最正确方法

时间:2018-05-17 17:00:15

标签: rest symfony uri api-design

我不知道标题是否足够清晰,但这是全局:

我需要拥有完全相同的API端点来访问两个(和两个)不同公司(它们是更大的父母公司的一部分)的数据。然后这些应该返回不同的结果。

有一些选项可以区分客户的调用:

  • 在URI中标识公司,例如/companyA/users/companyB/users等等;
  • 执行上述操作,但使用查询字符串,例如/users?company=A;
  • 使用自定义标题(?)

对这些选项(或任何其他想法)的想法?

2 个答案:

答案 0 :(得分:2)

我强烈建议您使用查询参数。自定义标头是一个坏主意,因为中间服务器(代理,缓存等)可能会或可能不会将它们保留在请求/响应中。将公司嵌入URL非常有限。当需求发生变化并且您需要同时从多个子公司获得用户时,会在6个月内发生什么?添加新端点?

从概念上讲,API是针对母公司的,或者它不会有多个子公司的数据。您想要过滤掉碰巧在公司A或公司B工作的母公司的用户。这就是查询参数的设计目的。

答案 1 :(得分:1)

自定义标题肯定不是一个选项,即使一些设计不佳的rest apis使用它们。

查询参数通常用于基于某些东西过滤集合,例如日期范围或类似的东西,但将它们用于您想要使用它们的目的并不是罪过。

但是,尽管如此,我会遵循子资源方法,就像你在第一个例子中所展示的那样。这是更容易理解的,客户不必弄清楚如何调用查询参数以及它们中有多少。你只想要某个公司的用户。 :)