在您的情况下,我也会采用 /bulk 资源方式。但我建议的模式如下,据我所知,这是最自然的:使用 202 Accepted 状态代码。
批量请求的想法是服务器不应该被迫立即回答,因为这意味着客户端需要等到它的批量请求完成。
这是模式:
POST /bulk [{"name": "Books"}, {"name": "Games"}]
202 Accepted | Location: /bulk/processing/status/resourceId
GET /bulk/processing/status/resourceId
entry = "REST in peace" | completed | 0 errors | /categories/category/resourceId
entry = "Walking dead" | processing | 0 errors ->
因此,客户端将批量信息发布到服务器。服务器仅使用 202 接受它们,这不能保证响应时的处理状态。但是服务器也提供了一个状态资源的链接。在这里,客户端可以查看每个创建的资源和处理状态。完成后,客户端可以通过给定的链接访问资源。错误情况可以由客户端识别,错误数据可能会通过 PUT 在已完成资源上重新发送。
最后,我通常遵循的一个好建议是:每当您在设计中遇到无法映射到 HTTP 功能的资源时,可能是因为缺少资源。