我正在设计一个使用自然键作为资源标识符的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似乎又快又松。
张贴到父文件夹对我来说似乎完全正确。