在研究用于异步操作的 RESTful API 时,我遇到了以下设计模式:
POST uri:longOperation
返回:
- HTTP 202
- 位置:uri:pendingOperation
GET uri:pendingOperation
返回:
- 如果操作正在运行
- 返回进度报告。
- 如果操作完成
- HTTP 303
- 位置:uri:操作响应
GET uri:operationResponse
- 异步操作的响应
我发现最后一步有问题。考虑一下如果异步操作完成时出现一个对 没有意义的错误代码HTTP GET
,例如HTTP 409 ("Conflict")
.
- 不需要
HTTP 303
指向与uri:pendingOperation相关的响应,而不是uri:operationResponse? - 以这种方式使用是否
HTTP 303
有害?如果不是,为什么? - 这是我们能做的最好的,还是有更好的方法?