1

我对如何处理传递多个资源的请求感到困惑。

我有以下层次结构。项目有可交付成果,可交付成果有文档。所以项目->可交付成果->文档。

对于特定于文档的自定义操作,比如说 change_status,我有诸如 /projects/1/deliverables/1/documents/1/change_status 之类的路由。至此一切都好。

但是,当我想在多个文档上更改状态时,最佳实践是什么?/projects/1/deliverables/1/documents/change_status (传递文档ID数组)似乎不是RESTFul,因为我的理解是在“文档”之后应该存在特定的ID。

/projects/1/deliverables/1/change_status (传递一组文档ID)并不能说服我有两个原因。首先,将调用我的可交付成果控制器(按照 Rails 中的约定),而且您似乎正在更改可交付成果而不是文档的状态。鉴于可以在文档中更改状态,我认为生成的 url 令人困惑,特别是如果您也可以将状态更改为可交付成果(您如何区分将状态更改为可交付成果或文档,在这种情况下 url 将是相同的) .

所以基本上我对如何处理在 RESTFul 中处理多个资源的请求感到困惑。非常感谢任何帮助/澄清!谢谢各位!

4

2 回答 2

2

基本的 RESTful URL 约定绝对不是要在所有情况下都虔诚地应用,当您超出标准 CRUD 场景时,您需要使用最佳判断来判断什么是有意义的。

如果您打算始终更改可交付成果中文档的状态,那么我会选择(就像您建议的那样):/projects/1/deliverables/1/documents/change_status

如果您计划跨可交付成果和项目更改文档的状态,那么我将使用单独的路径直接访问文档,例如:/documents/change_status

无论哪种方式,您都需要传递一个 document_id 参数数组。

于 2012-07-10T22:59:05.923 回答
0

此外,您应该只在 URL 中调用状态子资源“状态”,而不是 change_status。

PATCH /documents/status HTTP/1.1

approved=true&id=7&id=12
于 2012-11-24T13:01:59.540 回答