RESTful API设计,在更新资源时区分PUT操作

时间:2014-03-15 01:40:11

标签: json web-services rest asp.net-web-api

这是一个一般的RESTful API设计问题。我们正试图用最常用的方法解决以下案例。

我们有一个资源,让我们说:/ licenses / 5123 资源的到期日期需要更新为过期状态。当然,最简单的方法是公开expiration_date并让客户端将其设置为新日期,但这是不可取的。 要更新资源,我们使用PUT方法,并希望指定更新类型。换句话说,更新操作是否过期'或者'延伸'或者'无论什么'。

我考虑了一些选择:

  1. 实现自定义http方法 - 但我不想将HTTP协议扩展到其标准之外
  2. 添加action url参数并指定值:PUT / licenses / 5123?action = expire
  3. 由于JSON格式的请求正文中还有其他参数,请将操作参数添加到JSON请求中。
  4. 为更新类型实现自定义http标头
  5. 请分享您的意见和/或提供可能描述此类案例的在线资源的任何参考。我无法想象这是一个独特的案例。

    非常感谢!

2 个答案:

答案 0 :(得分:2)

通常选项2和3是优选的。没有必要使用HTTP操作或自定义标头进行自定义操作。

PUT是一种合理的操作方法,用于更新您描述的许可证。将更新的细节放在JSON请求体中听起来是合理的(选项3),这就是我要做的事情。

答案 1 :(得分:2)

选项2是我的首选。

我认为选择2是我最常见的最佳做法,它干净,高效且易读。大部分时间我都在追求可读性和可维护性,因为我可能不会在未来调试,修复或扩展代码。

使用HTTP协议或标题执行任何操作总是感觉像是“黑客”。我认为它已经超越了并且需要更多的努力而不是问题最有可能的价值(废弃解决方案1和4)。

选项3的一个潜在问题是,您可能会将业务逻辑与数据混淆,从而导致耦合和潜在的升级问题。