如何解决将无标题项目添加到集合的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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。