更新REST中的某些内容

更新REST中的某些内容,rest,asp.net-web-api,Rest,Asp.net Web Api,从哲学上讲,我对如何处理以下REST场景的一些示例有疑问: 1) 已登录的用户希望“收藏”某人的博客帖子。用户id是guid,日志发布是guid。这应该是因为用户/博客存在而发布,还是因为“收藏夹”表中没有条目而发布 2) DB中的一个安全行由10多个属性组成,但我只想更新实体的一部分(用户登录失败的次数)。电话应该是什么?在JSON中传递整个数据传输对象?或者只是为要更新的特定操作添加新的api路由?即,仅包含一个参数(登录尝试次数)的PUT,并传递用户id 3) 类似于#2,一个用户类(由2

从哲学上讲,我对如何处理以下REST场景的一些示例有疑问:

1) 已登录的用户希望“收藏”某人的博客帖子。用户id是guid,日志发布是guid。这应该是因为用户/博客存在而发布,还是因为“收藏夹”表中没有条目而发布

2) DB中的一个安全行由10多个属性组成,但我只想更新实体的一部分(用户登录失败的次数)。电话应该是什么?在JSON中传递整个数据传输对象?或者只是为要更新的特定操作添加新的api路由?即,仅包含一个参数(登录尝试次数)的PUT,并传递用户id

3) 类似于#2,一个用户类(由25个以上的属性组成),但我只希望用户更新类的特定部分,而不是全部。从理论上讲,我需要传递整个用户对象吗?还是只更新一件事就可以了。看起来我可能会发疯,对特定的属性进行很多特定的调用,但事实是我可能只会更新用户的2-3个特定部分(当然在其他情况下也会更新整个内容)。这里更新数据库中实体特定部分的方法是什么

非常感谢

  • 如果您还没有ID/UUID,请使用POST
  • 资源是安全记录。对该ID执行PUT,并传递要更改的属性块
  • 同上(2)。您应该获得任何参数,这些参数将帮助您在数据库中识别该记录。如果在POST请求中发送这些内容令人不快,而您正在使用AJAX,只需将它们隐藏在会话中即可
  • 对于REST,一切都是关于更新离散资源(“名词”)。如何分配这些由您自己决定,但是一个简单的接口,它明智地使用动词(“PUT”、“GET”、“DELETE”等),返回相关的HTTP代码,并且易于他人实现,这是最好的方法


    所以,只要问问自己,“我想给CRUD什么名词,我会让那些希望使用我的API的人精疲力竭吗?”

    谢谢您的及时回复。因此,如果业务需要使用PUT(例如用户的一个属性)来更新资源的特定组件,而不是传回整个资源(即使除了一件事之外没有任何变化),这是正常/常见的做法?此外,对于#1,用户存在,项目存在,但“收藏夹”表中的条目不存在。为什么不发个帖子呢?从技术上讲,我还没有表中最喜欢的行的ID。谢谢对的除了要更改或获取的名词名称和要更新的值(使用前者)之外,您永远不应该发回任何内容。我错过了。更新。如果答案是您想要的,请确保标记答案。感谢您在#2中更新-您的意思是只传递我想要更改的属性?因此,如果10个属性1发生变化,那么在ID为的PUT请求中只传递1?即/放置/记录/ 1050519889(意味着更新特定的记录并将JSON数据传递给我想要更改的行)?是的,在那里是安全记录的ID,JSON数据属于一个属性。