REST的疑惑

最近在用REST尝试性的做点小东西,遇到点疑惑,如下:

REST把系统所有的东西都抽象成资源,而OO是抽象成对象,资源表示了对象中的属性,但对象中的方法呢?该如何表示?

比如:
一个单据的审批动作,审批应该是单据这个对象的方法,那我如何在REST的URL来表示这个方法?
如果把审批放在URI中如:/单据/101/审批,又不太和谐,毕竟URI中的都是名词,突然出现了动作,就与REST不符了

现在想到的一个简陋的解决方案是:通过对单据这个资源的审批状态的更新操作,在更新时触发审批操作。这里有点像是事件性质的了...

不知是否有更好的解决方法。

2010年08月09日 18:45 "Tyotann"的内容
REST把系统所有的东西都抽象成资源,而OO是抽象成对象 ...

把两者并列起来了,资源也是一种对象,正因为OO是抽象成对象,REST就把所有东西都看成(抽象成)资源对象。

你的流程操作(比如审批)应该细分为流程+资源对象,当流程中涉及到资源操作时,就可以使用REST,所以,REST其实类似数据库操作。你不可以将审批动作简单直接映射到CRUD这些操作。

个人认为,对于你这样流程操作,最好有一个流程框架(Spring MVC或工作流)配合REST实现。但是目前我没发现能够结合REST的流程框架,这两者其实有着天然的结合。见这篇文章就是使用REST实现一个旅游订票流程:
http://www.jdon.com/jivejdon/thread/36506

[该贴被banq于2010-08-10 09:20修改过]