Asp.net mvc 带MVC的WebAPI-我应该使用PUT更新对象上的布尔值吗?

Asp.net mvc 带MVC的WebAPI-我应该使用PUT更新对象上的布尔值吗?,asp.net-mvc,asp.net-mvc-3,web-applications,asp.net-web-api,Asp.net Mvc,Asp.net Mvc 3,Web Applications,Asp.net Web Api,我有一个像setAsViewed这样的方法,它接受一个Id,只翻转一个布尔值,但我不确定这里的四个选项中哪一个是最好的。我的想法是,我希望发送尽可能少的数据,所以其中一个{id}选项是最好的。由于PUT通常对应于更新,我倾向于使用第一个。这里的惯例是什么 翻转我能想到的给定对象布尔字段的选项: 休息快速指南: GET/api/objects:列出对象 GET/api/objects/1:获取id==1的对象 POST/api/objects:使用已发布的数据完整模型创建新对象 PUT/api/o

我有一个像setAsViewed这样的方法,它接受一个Id,只翻转一个布尔值,但我不确定这里的四个选项中哪一个是最好的。我的想法是,我希望发送尽可能少的数据,所以其中一个{id}选项是最好的。由于PUT通常对应于更新,我倾向于使用第一个。这里的惯例是什么

翻转我能想到的给定对象布尔字段的选项:


休息快速指南:

GET/api/objects:列出对象

GET/api/objects/1:获取id==1的对象

POST/api/objects:使用已发布的数据完整模型创建新对象

PUT/api/objects/1:使用已发布的数据完整模型更新id==1的对象

PATCH/api/objects/1:使用部分数据部分模型更新id==1的对象

POST/api/objects/1/someprocedure:在id==1的对象上运行一些过程

因此,在您的场景中,应该是:

POST /api/objects/1/setasviewed
或许:

PATCH /api/objects/1
已发布数据:

{ "viewed" : true }

休息快速指南:

GET/api/objects:列出对象

GET/api/objects/1:获取id==1的对象

POST/api/objects:使用已发布的数据完整模型创建新对象

PUT/api/objects/1:使用已发布的数据完整模型更新id==1的对象

PATCH/api/objects/1:使用部分数据部分模型更新id==1的对象

POST/api/objects/1/someprocedure:在id==1的对象上运行一些过程

因此,在您的场景中,应该是:

POST /api/objects/1/setasviewed
或许:

PATCH /api/objects/1
已发布数据:

{ "viewed" : true }

令人惊叹的非常感谢。我想知道-如果您真正需要发送的只是Id,为什么要传入字段/值?我不确定我是否理解。你是在谈论我的补丁示例吗?您需要使用补丁发布要更改的数据。在POST/api/objects/1/setasviews中,您所做的一切基本上都是进行一个没有参数的函数调用。在该场景中,将viewed设置为true的逻辑将封装在action中。您可能会执行POST/api/objects/1/setviewedstatus之类的操作,然后使用它发布{viewed:true}或{viewed:false}之类的操作,这就像使用已查看的参数调用函数一样。对不起,我指的是您的带有已发布数据的注释。我的意思是,为什么不发送{id:1},就像对特定对象的GET请求一样,除了在控制器中不返回对象[id],而是执行flipPropertyobject[id]?因为这违反了REST原则。一个对象有一个统一的资源位置,在该对象上发生的一切都应该发生在它的统一资源定位器周围。太棒了!非常感谢。我想知道-如果您真正需要发送的只是Id,为什么要传入字段/值?我不确定我是否理解。你是在谈论我的补丁示例吗?您需要使用补丁发布要更改的数据。在POST/api/objects/1/setasviews中,您所做的一切基本上都是进行一个没有参数的函数调用。在该场景中,将viewed设置为true的逻辑将封装在action中。您可能会执行POST/api/objects/1/setviewedstatus之类的操作,然后使用它发布{viewed:true}或{viewed:false}之类的操作,这就像使用已查看的参数调用函数一样。对不起,我指的是您的带有已发布数据的注释。我的意思是,为什么不发送{id:1},就像对特定对象的GET请求一样,除了在控制器中不返回对象[id],而是执行flipPropertyobject[id]?因为这违反了REST原则。对象具有统一的资源位置,在该对象上发生的一切都应该发生在其统一资源定位器周围。