关于一个休息终点和两个消费者的一般想法

时间:2017-03-29 09:09:38

标签: rest api endpoint

考虑以下情况:

  • 您有一个端点,例如../ api / Samples
  • 所有样本都具有属性:名称,应用程序
  • 您有两个将使用Samples Endpoint的应用
  • First App(A1)想要所有样品。
  • 第二个应用程序(A2)只需要样本的子集。确切地说,只有具有'A2'的样品站在'App'属性中。

实现这一目标的最符合REST和常识的方法是什么?

到目前为止,我想到了三种方式:

  • 创建两个端点:.. / api / A1Samples和../api/A2Samples
      

    这似乎是开销。如果以后有更多应用程序会怎样即使大多数代码都相同,也必须复制Controller。

  • 在网址中发送应用类型:.. / api / Sample / A1或A2
      

    如果以后有更多应用程序可以更容易维护。但这不是拒绝REST的想法吗?

  • 在Accept Header中发送应用类型:.. / api /样本和标题:App-Type:A1或A2
      

    在我的情况下,似乎在ASP.NET Core v1.1中实现起来并不容易,但应该是语法上最正确的方法。

有人可以批准或拒绝我的想法吗?甚至可能扩展列表或说明这种情况下常用的解决方案?

1 个答案:

答案 0 :(得分:0)

如果其中一个应用程序需要所有样本,则可以直接使用/ api / Samples;对于另一个,有一个可扩展的方法来指定过滤器(即使这只是几个GET参数) - 如果这实际上是Sample对象上存在的“App”属性,那么?App=A2是有意义的,如果然后是其他一些属性直接指定这些属性。

这比您的/Samples/A1/Samples/A2想法更加安全,因为它直接指定要查询的属性(A1不使用?App=A1,因为正如您所说的应用程序1消耗整个样本对象列表)而不是知道什么应用程序查询它,任何相似性只是由于(我怀疑是人为的)结构的例子。

REST不仅仅是关于“在所有情况下使用路径参数”这样简单的事情 - 过滤结果列表是使用查询参数的明显案例。