1

我们有一个 REST API,对于某些操作,我们提供异步请求选项。对于异步请求,服务将立即返回一个可用于查询完成的令牌,而对于同步请求,直到操作完成后才会返回响应。

当前的设计如下所示:

网址:PUT /api/orders/1234?async=true

请求正文:customerName=My Company&city=Dallas

直观地说,像这样混合查询和表单参数似乎是错误的,但是查询参数(异步)为服务调用提供选项,而不是资源的属性。这是我们没有将其包含在请求正文中的主要原因。

这种方法看起来像是一个好的设计,还是有更好的“REST-y”方法来完成同样的事情?

4

2 回答 2

1

Prefer 标头旨在完全按照您要执行的操作。请参阅规范

于 2013-08-19T20:40:41.373 回答
1

像这样的网址

POST /api/orders/1234?async=true

不是 RESTful。为什么POST?这看起来像 RPC over HTTP。

你的资源是什么?如果涉及一些计算,请将计算建模为资源。POST到一组计算来创建一个新的。接收Location计算结果的标头。

POST /api/orders

custoerName=My Company
city=Dallas

这可能会返回如下响应:

201 Created
Location: /api/orders/1234

然后客户端可以GET得到结果:

GET /api/orders/1234

服务器会响应:

200 OK

Some result body.

如何使这个异步?

你写:

但是查询参数(异步)为服务调用提供选项,而不是资源的属性

这是完全错误的。URI 中的所有内容都用于标识资源。REST 不是用参数调用方法。

在将计算/交易/购物车建模为资源时,我建议始终使用上述两步法。创建它,检索它。

于 2013-08-19T19:03:16.063 回答