我想将操作添加到我的REST API中,以便在不同“存储”之间移动“资源”。在RESTful URL中使用动词和形容词的替代方案
例如,假设我的资源通过以下网址正常访问:
/resources
/resources/{resourceId}
现在假设我想“停用”一些资源,即在概念上它移动到另一个子文件夹。最直接的方法就是遵循这一点。
'取消'资源,即导致资源在/ resources下不可用。从概念上讲,它是移动“对象的 '/资源/取消/' 子文件夹:
POST /resources/{resourceId}/deactivate
或者:
POST /resources/deactivated/{resourceId}
获取所有停用的对象:
GET /resources/deactivated
颠倒'禁用'动作,即从概念上将对象从'/resources/deactivated/'子文件夹返回到主文件夹('/resources')。
要么
POST /resources/{resourceId}/reactivate
或者
POST /resources/deactivated/{resourceId}/restore
这个API似乎相当直观的我。但它似乎违反了我在许多最佳实践中看到的'更喜欢名词'规则 - 有关REST API的文章:我使用动词和形容词来代替名词!
请注意,我可能有所有端点的参数,例如, GET/resources/deactivated?createdBefore = 01022017
对于我的REST API有更好的选择吗?即更多RESTful,但不是更不直观的?
- Confusion Between Noun vs. Verb in Rest URLs
- GitHub的动词的用法(POST /学家/:ID /星,DELETE /学家/:ID /星):
,我能找到的话题好的资源https://stackoverflow.com/a/19648997/1847482
- 上需要去寻找“另一对象类型”好主意:https://stackoverflow.com/a/2022938/1847482
我喜欢你的答案(投票),因为它给了我一个更好的了解REST方法。但我不认为简单地改变'状态'属性对我来说是不可接受的,因为'GET/resources'不应该返回被禁用的属性。 – Alexander
@Alexander要获取所有资源,您可以请求'GET/api/resources'。它将返回活动和非活动的。要过滤'resources'集合,可以使用'status'之类的查询参数。所以'GET/api/resources?status = active'会返回活动的,而'GET/api/resources?status = inactive'会返回不活动的。您可以为您的查询参数设定默认值。如果'status'被忽略,假设你只想要活动的。 –
我不同意。 'GET/resources'应该返回所有的对象,而不管特定属性的值如何,否则它会很混乱。但另一方面,它不应该返回“停用”的,这意味着它不是简单的常规属性。 – Alexander