我有一个新项目即将推出,并且受到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}
等?
答案 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服务器日志文件中。