REST:使用未知 (server-generated) 值更新资源

REST: Update resource with unknown (server-generated) value

我有一个资源 foo 具有以下结构:

GET /foo/1 returns:

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

状态可以是 有效已过期。如果是 expired 我希望服务器生成一个新的。

通常我会使用新密钥发出 PUT/PATCH foo/1,但客户端不知道 key-generation 算法。 我也可以做一个没有 body 的 POST foo/1/server-key,但这感觉很奇怪(虽然我知道这不是很科学的原因)。

有什么好的ideas/patterns?

如果您的实体已过期,只需 POST 调用 /foo 而不带任何参数,服务器应该 return 新实体(并且 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,您将对表示进行部分更新。

这里有一个 link 可以给你一些关于如何设计 Web API(RESTful 服务)的提示:https://templth.wordpress.com/2014/12/15/designing-a-web-api/.

希望对你有帮助, 蒂埃里