RESTful PUT如果不存在?

Gar*_*son 6 rest http put

比方说,我创建一个RESTful接口,并且我要上传使用资源PUT/resources/{id}.但我只想上传以前没有上传过的东西.

我意识到这PUT应该是幂等的,所以如果我PUT对同一个URL进行了两次,它应该两次都成功,对吧?

我也理解我可以HEAD在现有资源上使用ETag,然后在我的中使用 to PUT来确保自上次检查以来资源没有被修改.

但是,如果事物尚不存在,我怎样才能确保我只上传一件东西?也就是说,我怎样才能确保我不会踩到别人的东西?

Eri*_*ein 5

我意识到 PUT 应该是幂等的,所以如果我将某些东西两次放入同一个 URL,它应该两次都成功,对吗?

正确的。

但是,我如何确保仅在该事物不存在的情况下才上传该事物?也就是说,我怎样才能确保我不会踩到别人的东西?

不要使用 HEAD 调用。使用标头进行 PUT 调用If-None-Match: *。这将指示服务器仅在当前实体不存在时才执行操作,如RFC 2616第 3 段所述。