Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rest 休息可以用来“休息”吗;调用;业务对象上的操作?_Rest - Fatal编程技术网

Rest 休息可以用来“休息”吗;调用;业务对象上的操作?

Rest 休息可以用来“休息”吗;调用;业务对象上的操作?,rest,Rest,我有一个新项目要做,其他人都很感兴趣。然而,它的界面似乎非常有限。REST支持特定于对象的交互,还是仅限于简单的CRUD 例如: 学校管理应用程序具有学生对象。它应该能够: RegisterNewStudent (some data) 每个student对象都应处理业务操作: Student.FixName(name data) Student.ChangeSchool(school data) Student.Graduate(classrank data) Student.ChangePa

我有一个新项目要做,其他人都很感兴趣。然而,它的界面似乎非常有限。REST支持特定于对象的交互,还是仅限于简单的CRUD

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

RegisterNewStudent (some data)
每个student对象都应处理业务操作:

Student.FixName(name data)
Student.ChangeSchool(school data)
Student.Graduate(classrank data)
Student.ChangePassword(password data)
我一直在用消息队列实现CQR,其中每一项都是一个单独的命令。然而,在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}
等等

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

A:是的,绝对是的

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


包括但不限于CRUD操作:)

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

Student.ChangePassword(password data)
并有一个POST请求
/ChangePassword/{student\u id}/{password}

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


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

您发布的每个示例操作都是对资源某些属性的更新操作。为什么你认为CRUD还不够?注册一个新的学生会创建一个新的学生注册,如果你对注册记录而不是学生记录(直接)进行操作,CRUD操作实际上是非常有意义的。那么意图呢?当我想更改学生的学校时,我真的需要发送他们的姓名/状态/密码/生日/性别吗?或者单个属性可以直接针对REST中的CRUD操作吗?错误:
POST/Students/314/School{data about nother School}
更好:
method=POST,content type=application/x-www-form-urlencoded,content length=length\u OF_MY_JSON\u STRING data=MY_JSON\u STRING
您的客户端发送JSON(作为“POST”方法),您的服务器读取JSON(与任何其他负载一样)并相应地响应(可能使用返回的JSON字符串,可能只是一个“OK”HTTP状态)。可以接受嵌套操作来启用目标更新吗?像
post/Students/{id}/Name{NameData}
?您的应用程序不应该直接处理HTTP垃圾,比如“post”、“GET”、URL或表单变量。选择一种语言(Java、C#、Perl、Python、Ruby等),并为该语言找到一个好的库。您的“操作”和数据将用XML或(更好的!)JSON定义。在这一点上,你几乎可以做任何你想做的事情:)@smalltowndev只要学生资源包含像{href:'/students/123/name',rel='update name'}这样的链接就可以了。@YauheniSivukha-如果你使用PUT或POST,它不会进入web服务器日志文件,所以这样做是安全的。搞砸是个糟糕的主意。