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/.
希望对你有帮助,
蒂埃里
我有一个资源 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/.
希望对你有帮助, 蒂埃里