2010-05-01 68 views
6

我唯一真正接触到的想法是REST已经通过Ruby on Rails的RESTful routing。这对我使用Rails构建的基于CRUD的应用程序非常适合,但因此我对RESTfulness的理解有限。通过示例了解REST


比方说,我们有一个项目的有限集合,每个都有一个唯一的ID,以及一些特性,比如颜色,形状和尺寸的(可能是不确定的某些项目)。

项目可以由客户端使用一段时间,但每个项目只能由一个客户端一次使用。物品的访问受服务器的限制。客户可以请求从服务器临时使用某些项目。

通常,客户只会有兴趣获得具有特定属性的多个项目,而不是访问特定的项目。

当客户端请求使用多个Items时,服务器会响应与该请求相对应的ID列表,或者响应说所请求的Items当前不可用或不存在。

客户端可以进行以下类型的请求:

  • 告诉我许多绿色三角形的项目有怎样的(总/可用)。
  • 给我使用200个大型红色物品。
  • 我已完成项目21,23,23。
  • 添加100个新的红色方块物品。
  • 删除50个小绿物品。
  • 修改所有大的黄色五角形物品为蓝色。

玩具上面的例子就像是一个资源分配问题,我不得不应对最近。我应该如何去思考它RESTfully?

回答

5

如果在您的方案中锁定资源确实是一个关注领域的问题,那么我会推荐将锁建模为资源。

以下是关于如何处理您建议的请求的一些建议。

GET /Triangle/Green/Count 
GET /Triangle/Green/Available 

POST /Item/Red/Large/Locks?quantity=200 

DELETE /Item/21/Lock 
DELETE /Item/23/Lock 
DELETE /Item/25/Lock 

POST /Square/Red?quantity=100 

DELETE /Item/Green/Small?quantity=100 

POST /Pentagon/Blue?url=/Pentagon/Yellow 

说了这些之后,定义URL有点不相干。使用适当的链接关系设计媒体类型是RESTful设计的关键部分。

+0

+1好主意,锁定为资源 - 按照nounds而不是动词(锁定与锁定事件)来考虑。 – ScottCher 2012-05-03 13:25:06

6

理解的诀窍就是从专注于名词而不是动词的角度思考问题。

在其他世界里,动词都是“预设”,名词变得无限灵活。在肥皂或roc世界中,动词是非常灵活的。限制你的想法来锁定动词,然后在你所拥有的限制范围内,看看你需要什么名词来解决你的问题。

这正是亲爱的在上面的答案中所做的 - 他为锁定了一个新的名词,以满足您的限制,然后设置访问权限以实现您想要的内容。

您的一些问题与搜索或过滤器相关 - 对于那些认为针对资源类型的GET,传递查询参数以限制或过滤结果。

0

阅读此基本知识...我卡在什么是REST ... !!!

内容管理系统可能包含一组文章。这里隐含着两个资源。首先,有单独的文章。每个构成一个资源。还有第二个资源:文章的集合。

要获取所有文章的列表,我们可以对这个集合发出一个HTTP GET请求,比如路径/文章。要获取单个资源的内容,我们必须识别它。 Rails的方式是给它的主键值(也就是它的id)。我们再次发出GET请求,这次是针对URL/articles/1。到目前为止,这看起来都非常熟悉。但是,当我们想要将文章添加到我们的收藏中时会发生什么?

在非RESTful应用程序中,我们可能会发明一些以动词短语作为名称的动作:articles/add_article/1。在REST的世界里,我们不会这样做:我们应该告诉资源如何使用标准的动词集来做什么。要使用REST在我们的集合中创建新文章,我们将使用针对/ articles路径的HTTP POST请求,其中包含要添加的文章的发布数据。是的,这与我们用来获取文章列表的路径相同:如果您向其发出GET,它会以列表形式进行响应,并且如果您对其执行POST操作,则会向该集合添加一篇新文章。

更进一步。我们已经看到您可以检索文章的内容,针对路径/ articles/1发出GET请求。要更新那篇文章,您将针对相同的URL发出HTTP PUT请求。而且,要删除它,您可以再次使用相同的URL发出HTTP DELETE请求。