使用自然键休息:201创建的HTTP PUT响应是否可以包含与请求URI不同的Location标头



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

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

我的服务公开了一个Update(…(操作,该操作将导致SQL Update查询,该查询可能会更改此密钥,即

void Update(key, newRow);

当使用不可变代理密钥时,我使用了

void Update(key, newRowExceptKey);

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

用201 AND Location头响应PUT到新资源是否可以接受这对于POST请求来说是正常的,但似乎与PUT相反。带有新密钥的PUT实际上会在请求URI处产生DELETE(就服务器状态而言(,在其他URI处产生PUT/POST。

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

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

PUT假设客户端可以分配URI。如果不是这样,就不要使用PUT。

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

最新更新