REST:使用未知(服务器生成)值更新资源



我有一个资源foo,其结构如下:

GET /foo/1返回:

{
  "id": 1,
  "server-key": "abcdef",
  "status": "expired"
}

状态可以是活动过期。如果已过期,我希望服务器生成一个新的。

通常我会向PUT/PATCH foo/1发出新密钥,但客户端不知道密钥生成算法。我也可以在没有身体的情况下做POST foo/1/server-key,但这感觉很奇怪(我知道这不是很科学的原因)。

有什么好主意/模式吗?

如果实体过期,只需在/foo上进行POST调用,而不带任何参数,服务器应返回新实体(HTTP响应代码应为201):

{
  "id": 2,
  "server-key": "xyz",
  "status": "active"
} 

如果某个资源已过期,则无法通过PUT/PATCH请求使其再次处于活动状态。

我会采用的方法是将空值设置为server-key并让服务器处理它,但我这样做是因为在我的API中,服务器用默认值填充缺失的值是一致的行为。

除此之外,按照另一个答案中的建议,对URI进行简单的POST就足够了。

我认为您应该在您的案例中使用PUT/PATCH方法来请求在过期时生成令牌。一般来说,在资源路径中放入操作名称并不是真正的RESTful;-)

我会看到这样的东西:

  • 获取元素:GET /foo/1
  • 如果状态已过期,请要求生成新的服务器密钥:POST /foo/1。在这种情况下,此方法将用于在服务器端执行重新初始化密钥的操作

使用方法PUT对应于用客户端提供的新表示来更新完整表示。使用方法PATCH,将对表示进行部分更新。

这里有一个链接,可以为您提供一些关于设计Web API(RESTful服务)的方法的提示:https://templth.wordpress.com/2014/12/15/designing-a-web-api/.

希望它能帮助你,Thierry

最新更新