http - 将无标题项添加到集合中的 RESTful 方式是什么?

标签 http rest

假设我想编写一个界面来显示用户已阅读的书籍集。因为我希望 URI 是人类可读的,所以它们的形式是 /books/War-and-Peace .将一本书添加到集合中似乎是一个 PUT 操作,因为它 1) 创建了一个新资源,并且 2) 是幂等的,因为集合不能有重复的元素。但是,PUT 方法要求客户端知道要创建的资源的 URI,在这种情况下必须在服务器上计算,因为可能有多本书具有相同的标题,将表示为 /books/War-and-Peace。和 /books/War-and-Peace-2 .当然,一个 hacky 解决方案是使用 POST,它可以创建新资源,但不能保证是幂等的。

我的解决方案如下:

  1. 客户端 PUT 到 /book-hashes/<hash> , 其中<hash>是书对象的散列。
  2. 服务器在该 URI 和 /books/<title> 处创建对对象的引用.
  3. 服务器发出一个指向/books/<hash> 的303 See Other 状态码.
  4. 客户端获取 /book-hashes/<hash> .
  5. 服务器响应 301 永久移动,指向 /books/<title> .
  6. 客户端获取 /books/<title>并将其存储为图书资源​​的新 URI。
  7. 服务器删除/book-hashes/<hash> .

这是合法的 REST 解决方案吗?有没有人以不同的方式解决了这个问题?

最佳答案

这里使用 POST 没有错。 POST 通常用于“添加”东西,然后返回所创建资源的 URI。

所以

POST /books?title=War-and-Peace

303 
Location: /books/War-and-Peace-2

关于http - 将无标题项添加到集合中的 RESTful 方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6234993/

相关文章:

http - 已将 ssl 证书复制到测试站点,如何删除它?

android - 无法从移动设备浏览本地计算机上托管的网站

c++ - 无法打开包含文件 : 'cpprest/http_client.h'

rest - 使用 nifi 模板导入 API 的参数类型不匹配

rest - Magento2;通过 REST API 更新库存

java - Tomcat 8.017生成md5带digest.bat

java - 是否有用于 Java 的 HttpCahce 客户端库?

c# - HTTPListener 不在 .NET 4.6 和 Server2012R2 上使用 TLS 1.1/1.2

python 3; Websockets 服务器和 HTTP 服务器 - run_forever 和 serve_forever

rest - Android HttpPost.setEntity() 相当于改造