RESTful API应该为异步请求使用单独的URI吗?

6
考虑一个具有长时间方法的Web API。客户端可以选择发起同步请求并等待响应,或发起异步请求并收到标准的 202 Accepted 响应和状态链接。
在RESTful语义下,这两个选项应该作为两个单独的URI存在,还是应该是相同的URI,并在头参数中提供异步选项?

我认为实现的方法在这里并不重要。从技术上讲,(url + params + headers + payload)定义了请求,因此您可以选择任何一种方式。所以我认为在这种情况下移动参数没有什么区别。出于清晰起见,我个人会选择两个不同的URL。 - Phil
1
@Phil_1984_ 也许你应该把你的评论变成一个答案? - redben
2个回答

2

它们不一定需要有单独的URL。 RESTful服务的操作和响应方式由您决定。请求由以下内容定义:

  1. 请求类型
  2. URL(包括参数)
  3. 标头
  4. 有效载荷

请求类型(例如PUT vs POST)和某些标头(例如缓存)上存在标准。有效载荷格式也可以由Content-Type标头定义。但是,没有特定的REST相关规则说必须使用某些URL结构。显然,它需要是一个有效的URL,但其结构完全由您作为服务开发人员决定。

如果您想要让调用者选择是同步还是异步处理请求,我建议使用不同的URL以增加清晰度。

例如:

  • /some/dir/service1?process=async
  • /some/dir/service1?process=sync

注意:这里我使用正斜杠来表示伪目录名称以增加清晰度,但即使这也不是必需的。

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


0

考虑到以下原因(我相信其他人也会发现更多原因),我会将其分离为不同的URL:

  • 这将使操作可以分离到不同的方法、类甚至服务中。
  • 当需要时,取消其中一个将变得更加容易。例如:将所有异步处理从REST移动到消息队列中。
  • 代码内部的混乱程度会降低。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接