REST可用于“调用”业务对象上的操作吗?

时间:2012-08-15 15:27:59

标签: rest

我有一个新项目即将推出,并且受到REST的影响。但是,它的界面似乎非常有限。 REST是否支持特定于对象的交互,还是仅限于简单的CRUD?

实施例: 学校管理应用程序具有Student对象。它应该能够:

RegisterNewStudent (some data)

每个学生对象都应该处理业务操作:

Student.FixName(name data)
Student.ChangeSchool(school data)
Student.Graduate(classrank data)
Student.ChangePassword(password data)

我一直在使用消息队列实现CQRS,其中每个事件都是一个单独的命令。但是,在REST中,我似乎只限于:

PUT Student (all data about student)
POST Student/id (update student record with any/all fields changed)
DELETE Student/id

我在这里遗漏了什么吗?生命周期/状态转换逻辑将在RESTful解决方案中实现在哪里?更改学生的学校注册涉及与更改其姓名不同的逻辑(可能还有不同的权限)。我是否必须让客户发布任何/所有字段的“更新”,然后必须推断他们想要的操作?

//编辑:

这是我正在努力的事情:

PUT /Students {data about new student}
POST /Students/314/School {data about different school}
POST /Students/314/Name {data to fix name, ie add middle name}
POST /Students/314/Password {data for new password}

等?

2 个答案:

答案 0 :(得分:2)

  

问:REST可用于“调用”业务对象上的操作吗?

答:是的,绝对是的。

正如您可以使用GET或PUT调用任何servlet上的任何操作一样,您也可以在REST-ful Web服务中调用任何操作。

包括但不限于CRUD操作:)

答案 1 :(得分:0)

您需要创建多个Web服务来执行您想要的操作,但如果我举一个您的例子:

Student.ChangePassword(password data)

并发出POST请求/ChangePassword/{student_id}/{password}

那么你唯一的诀窍就是确保谁可以调用这个函数。您是否使用会话cookie来控制访问权限,或者使用用户名/密码传递新密码?

您会发现POST和PUT非常有用,因为它们未记录在Web服务器日志文件中。