我的设置:Rails 2.3.10,Ruby 1.8.7
我需要实现一个基本上是GET的API,但根据日期,也可能涉及DELETE和POST操作。让我解释一下,对于某一天,API需要将10个项目添加到从另一个表中随机选择的一个表中,但这只是每天进行一次。如果添加的项目来自前一天,那么API需要删除这些项目并随机添加10个新项目。如果在同一天对API进行了多次调用,那么在初始创建之后它只是一个GET。希望这是有道理的。
如果可能的话,我如何将其实现为RESTful API。
答案 0 :(得分:2)
怎么样?
GET /Items
如果第二天到达,则在返回之前生成10个新项目。如果第二天没有到达,那么返回您之前返回的相同的10个项目。没有理由服务器无法根据GET更新项目。客户端未请求更新,因此请求仍被视为安全。
答案 1 :(得分:0)
不确定我是否正确理解你,但仅仅通过观察这一点,我能想到的只有以下几点:根据添加的内容执行添加执行删除是多么可怕的事情。没有不尊重,但认真。或许这就是你描述它的方式。
无论如何,如果你想拥有一个RESTful API,那么你必须要区别对待GET和PUT。
我认为你没有一个明确的用例图片,说明你的API(或你的系统是如何完成的。)我的建议是重新建模如下:
定义资源的URI,比如/ random-items
GET /random-items
可以获得当前系统中0到10个项目。
PUT/random-items
一个空体,执行以下操作:
对DELETE /random-items
的调用应返回405 Method Not Allowed
http错误代码。
对POST
/ random-items`的调用应添加不超过10个项目,并根据需要删除。
/random-items/x
是一个有效的URI,只要x是当前在/ random-items下的项目之一。
GET
返回一个表示,如果它不存在则返回404 DELETE
/random-items
将其从PUT
下删除,如果不存在则删除404 405
如果有意义,则应更改其值(或返回POST
)405
它应该返回{{1}}始终这应该给你一个骨架式的RESTful API。
但是,如果你坚持,或者需要重载GET以便它在场景后面执行添加和删除,那么你将使它不是RESTful。
如果您合理地需要它,那本身并不是一件坏事(因为没有一种架构范例是普遍适用的。)但是您需要了解RESTful的含义以及何时/为什么/如何打破它。