0

我正在设计一个使用自然键作为资源标识符的 API 端点。

PUT /api/thing/key
GET /api/thing/key
etc.

我的服务公开了一个 Update(...) 操作,该操作会导致一个 SQL UPDATE 查询,该查询可能会更改此键,即

void Update(key, newRow);

当使用不可变代理键时,我有

void Update(key, newRowExceptKey);

但是由于 newData 现在可以包含一个键,因此可以移动资源。

是否可以使用 201 和 Location 标头响应 PUT 到新资源?这对于 POST 请求是正常的,但与 PUT 似乎相反。带有新键的 PUT 实际上会导致请求 URI 处的 DELETE(根据服务器状态)和其他某个 URI 处的 PUT/POST。

另一方面,也许我根本不应该使用 PUT。RFC 2616 说“PUT 请求中的 URI 标识了请求中包含的实体”。在关系方面,如果新密钥与旧密钥不匹配,则请求 URI 不会识别封闭的资源。但这并不是那么简单。封闭的资源是请求 URI 的替代品,因此在某些上下文中(特别是由代理键具体化的那个),URI 确实标识了封闭的实体。

我可以在这里使用 POST,因为这似乎没有违反任何规则,但是在任何地方使用 POST 似乎又快又松。

4

1 回答 1

0

PUT 假定客户端可以分配 URI。如果不是这种情况,请不要使用 PUT。

发布到父文件夹对我来说似乎完全正确。

于 2020-04-24T16:51:16.287 回答