将无标题项目添加到集合的RESTful方法是什么?

问题描述

| 假设我想编写一个界面,公开用户已阅读的书集。由于我希望URI对人类可读,因此它们的格式应为“ 0”。将书籍添加到集合中似乎是一项PUT操作,因为它1)创建了新资源,并且2)是幂等的,因为集合中不能有重复的元素。但是,PUT方法要求客户端知道要创建的资源的URI,在这种情况下,必须在服务器上计算该URI,因为可能有多个书具有相同的标题,分别表示为“ 0”和“ 2”。当然,一种有问题的解决方案是使用POST,它可以创建新资源,但不能保证是幂等的。 我的解决方案如下: 客户端将PUT设置为
/book-hashes/<hash>
,其中
<hash>
是书本对象的哈希。 服务器在该URI和
/books/<title>
处创建对该对象的引用。 服务器发出303 See Other状态代码,指向ѭ6status。 客户端获得
/book-hashes/<hash>
。 服务器以301永久移动作为响应,指向
/books/<title>
。 客户端获取
/books/<title>
并将其存储为书籍资源的新URI。 服务器删除“ 3”。 这是合法的REST解决方案吗?有谁以不同的方式解决了这个问题?     

解决方法

        怎么样?
GET /BookSlug?title=War%20and%20Peace
=>
200 OK
Content-Type: text/plain

war-and-peace
其次是
PUT /Book/war-and-peace
<BookContent>
=>
201 Created
    ,        在这里使用POST没什么错。 POST通常用于“添加”事物,然后返回创建的资源的URI。 所以
POST /books?title=War-and-Peace

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...