在RESTful服务中处理多个资源请求

时间:2012-07-10 17:03:57

标签: ruby-on-rails rest restful-url restful-architecture

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

我有以下层次结构。项目的可交付成果和可交付成果都有文件。所以Projects-> Deliverables-> Documents。

对于特定于文档的自定义操作,让我们说change_status,我有路由,例如/ projects / 1 / deliverrables / 1 / documents / 1 / change_status。到目前为止一切都很好。

但是,当我想在几个文档上更改change_status时,最佳做法是什么? / projects / 1 / deliverrables / 1 / documents / change_status(传递一组文档ID)似乎不是RESTFul,因为我的理解是在“文档”和特定id之后应该存在。

/ projects / 1 / deliverrables / 1 / change_status(传递一组文档ID)并不能说服我两个原因。首先,我的可交付成果控制器将被调用(按惯例在rails中),并且您似乎也在改变可交付成果而不是文档的状态。鉴于状态可以在文档中更改,我认为生成的URL会让人感到困惑,特别是如果您也可以将状态更改为可交付项(如何区分从更改状态到可交付项或文档,在这种情况下URL将是相同的)

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

2 个答案:

答案 0 :(得分:2)

基本的RESTful URL约定绝不意味着在每种情况下都应该被虔诚地应用,当你超越标准的CRUD场景时,你需要使用你最好的判断。

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

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

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

答案 1 :(得分:0)

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

PATCH /documents/status HTTP/1.1

approved=true&id=7&id=12