使用POST创建复杂查询资源然后获取结果的实用性:

时间:2015-01-19 16:18:12

标签: angularjs rest http asp.net-web-api

我正在设计.Net WebApi服务和AngularJS客户端。客户端的一个特定特征是用于特定类型资源的相当复杂的搜索引擎。搜索查询理想地在对象图中表示。我正在努力解决这样一个事实,即我在语义上应该将此请求作为GET请求发送到服务,并将搜索查询编码到url中。问题是查询字符串的数据太多了,我正在阅读的所有内容都让我相信我不应该在这样的情况下在GET请求中使用消息体。

我已经看过几次建议的解决方案,看起来有点笨拙,但至少在语义上是正确的:

  1. 在服务中为POST搜索查询资源创建一个api。
  2. 在服务中创建一个用于获取搜索查询结果的API。
  3. 如果我在服务中实现此api,仍然没有简单的方法来标记或链接到客户端中的搜索结果(因为如果查询在URL中合理表示,则整个问题不需要被问到)。

    有没有更好的解决方案?

1 个答案:

答案 0 :(得分:0)

您找到的解决方案实际上是一种处理此类事情的简单方法:

  • 您创建查询并将其发布到服务器;
  • 为其创建query资源并存储在服务器上;
  • 您返回创建的query的网址(您还没有执行)。我认为使用POST/Redirect/GET可以做得更好,因此可以将网址添加为书签;
  • 客户端对URL执行GET,此时执行query并返回结果;
  • 每次获取该网址时,都会执行相同的query

现在,作为一项改进,您可以允许用户在创建时为query提供友好名称(例如queryForXYZBlaWhatever),并将其作为网址http://server/api/query/queryForXYZBlaWhatever的一部分返回。这可以加入书签,共享,通过电子邮件发送,它总是指向相同的query