1

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

示例:学校管理应用具有学生对象。它应该能够:

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}

ETC?

4

2 回答 2

2

Q: Can REST be used to “call” operations on business objects?

A: Yes, absolutely yes.

Just as you can invoke any operation on any servlet with GET or PUT, you can also invoke any operation in a REST-ful web service.

Including, but not limited to, CRUD operations :)

于 2012-08-15T15:31:08.943 回答
0

你会想要创建几个 web 服务来做你想做的事,但是如果我以你的一个例子为例:

Student.ChangePassword(password data)

并有一个 POST 请求/ChangePassword/{student_id}/{password}

那么你唯一的技巧就是确保谁可以调用这个函数。您是使用会话 cookie 来控制访问,还是让他们传入用户名/密码然后是新密码?

您会发现 POST 和 PUT 将很有用,因为它们没有记录在网络服务器日志文件中。

于 2012-08-15T15:43:51.487 回答