如何使用复杂的API保持RESTful

时间:2011-04-18 00:34:37

标签: ruby-on-rails rest

我的设置:Rails 2.3.10,Ruby 1.8.7

我需要实现一个基本上是GET的API,但根据日期,也可能涉及DELETE和POST操作。让我解释一下,对于某一天,API需要将10个项目添加到从另一个表中随机选择的一个表中,但这只是每天进行一次。如果添加的项目来自前一天,那么API需要删除这些项目并随机添加10个新项目。如果在同一天对API进行了多次调用,那么在初始创建之后它只是一个GET。希望这是有道理的。

如果可能的话,我如何将其实现为RESTful API。

2 个答案:

答案 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一个空体,执行以下操作:

    • 删除昨天或之前添加的所有随机项
    • 根据需要添加任意数量的随机项以完成10
  • 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的含义以及何时/为什么/如何打破它。