Api 更新资源上的属性

Api 更新资源上的属性,api,rest,Api,Rest,是否有REST规则或最佳实践来更新/创建资源的特定属性?例如,假设我有一个用户资源 /users(GET)获取所有用户,POST创建一个新用户,put/users/(id)使用该id更新用户 假设我需要更新此人的状态。我可以在PUT请求中传递它,但问题是我也想删除状态。通常使用PUT,我只更新传递的值,即如果使用firstName=Bob,我将更新此人的firstName,但我不会删除他的姓氏,因为它没有传入。以及我不会删除状态,如果它没有通过。所以我需要一种删除状态的方法 所以我认为地位只是另

是否有REST规则或最佳实践来更新/创建资源的特定属性?例如,假设我有一个用户资源

/users(GET)获取所有用户,POST创建一个新用户,put/users/(id)使用该id更新用户

假设我需要更新此人的状态。我可以在PUT请求中传递它,但问题是我也想删除状态。通常使用PUT,我只更新传递的值,即如果使用firstName=Bob,我将更新此人的firstName,但我不会删除他的姓氏,因为它没有传入。以及我不会删除状态,如果它没有通过。所以我需要一种删除状态的方法

所以我认为地位只是另一种资源。但是非常简单的一个

/用户/(id)/状态帖子是否创建新状态?问题是,状态只是一个简单的名字,比如“离开”或“休假”。做/users/(id)/status似乎有点奇怪,它的主体是status=away。Ie状态出现在URL和正文中,似乎是错误的。同样,采用这种方法,POST和PUT将是相同的。也许可以


我觉得我有休息的简单案例,但这一个让我难堪

如果您能够完整地描述一个新资源,并将其视为一个资源位置,则通常会使用PUT来创建一个新资源。使用POST(带数据)更新隐藏的资源的任何部分。由于status不能识别资源,我认为您应该使用POST

添加示例:

POST /users HTTP/1.1
<user id="someID" >
  <status>newStatus</status>
</user>
POST/users HTTP/1.1
新闻状态

如何使用post?你能举个更具体的例子吗。你是说/users/(id)/status POST。并且passstatus=awaySure这很好,如果您使用/users发布状态,如何删除状态?因为delete/users/(id)将删除该用户。啊,这是不同的。从您的描述中,我认为状态是用户的单一属性。您提到了更新用户状态。如果status是作为用户的子级实现的多属性(如status as of date),那么它是一个不同的资源,应该有自己的接口,使用PUT为用户添加新状态。PUT to add?要添加的帖子?我想您已经开始理解我的问题了。一般来说,如果您的状态可以指定为完整的资源标识符,请尝试使用PUT。所以,如果您的状态类似于“日期用户的状态”,那么您知道这一切。但将其命名为:/userstatus/userid/date/status这样的资源。如果服务需要生成将返回给您以完全标识资源的内容(如新ID或其他内容),请使用POST。使用/userstatus/userid/date删除它