对RESTful API的异步请求是否应该有单独的URI?

时间:2014-12-15 00:05:59

标签: rest asynchronous asp.net-web-api

考虑使用需要很长时间的方法的Web API。客户端可以发出同步请求并等待响应,也可以发出异步请求并接收标准202 Accepted响应和状态链接。

在RESTful语义下,这两个选项是否应该作为两个单独的URI存在,还是它们应该是相同的URI,并且在头参数中有异步的选项?

2 个答案:

答案 0 :(得分:1)

他们不一定需要有单独的网址。您的RESTful服务如何运作和响应取决于您。请求由以下内容定义:

  1. 申请类型
  2. 网址(包括参数)
  3. 接头
  4. 有效载荷
  5. 请求类型(例如PUT与POST)和一些标头(例如缓存)上存在标准。有效载荷格式也可以由Content-Type标头定义。但是,没有特定的REST相关规则,您必须使用某些URL结构。显然它需要是一个有效的URL,但它的结构完全取决于你作为服务开发人员。

    如果您想让调用者选择是同步还是异步处理,我会为了清晰起见而使用不同的URL。

    e.g。

    • /一些/目录/服务1?过程=异步
    • /一些/目录/服务1?过程=同步

    注意:出于清晰的原因,我在这里使用正斜杠来表示伪目录名称,但即使这在技术上也不是必需的。

    如果需要,您也可以使用自定义标题,但您需要自己定义API。

    如果要在服务器端进行异步/同步选择(可能基于当前服务器负载),则可以在单个URL中实现这两者。您应该确保您的API具有清晰的文档,以便开发人员了解这两种响应格式。

答案 1 :(得分:0)

考虑到这些原因,我会将它分成不同的 URL(我相信其他人会发现更多):

  • 它将能够将操作分离到不同的方法、类甚至服务。
  • 在需要时取消其中之一会更容易。例如将所有异步处理从 REST 转移到消息传递队列。
  • 减少代码中的意大利面。