其次,英文毕竟不是我们的母语,所以从文字结合内容上讲毕竟有一些难度,同一篇文章对中心的理解可能就更相形见拙了,有些甚至只对全文粗率的看了一遍,确已经开始大胆的表述看法,以为也不过如此云云。实际上,对精髓的认识更可能还只是了解到一些皮毛。对这样的学习态度我认为是非常不负责任的,有的已经把自己的看法发布到网上,拜为权威,可谓误人子弟。
RPC(Remote Procedure Call)远程调用
RPC是在客户端/服务器端(client/server)网页或软件编程中不可缺少的一种方法,client若需要对数据进行处理时,先创建一个提出问题的进程(procedure),进程采用将操作以请求的方式发送给服务器,并等待服务器端对请求做出响应并给出回复,不需要在client端去实地的进行数据处理和复杂的运算,而是将这些过程交给服务器去做,这个client端的进程只是等待,等待会有两种可能的结果:一种是由服务器端传回计算或处理的结果;二是操作超时,并未收到从服务器端发来的回复,但无论是哪一种情况发生,client端进程都算完成使命并自行结束。从编程的角度讲,打个比方,在网上购物的购物篮功能中,将选购的物品放入购物篮的操作就会使用到RPC,在客户端所表现的只是需要点击一个按钮,按钮的功能是将选定的物品放入购物篮中。这是在前台,用户可以确实的看到的操作;而在后台,在编辑这个网页的过程中,用户点击按钮的这一步,是由远程调用服务器端的相应的函数实现的。在此例中,想实现这个按钮的功能就要知道调用服务器端的添加物品的函数(也叫接口interface)的名称--AddinBasket();client端发送请求给服务器,要将选定的物品放入购物篮,服务器端接到请求后,由AddinBasket函数对请求进行响应,做出处理,然后把响应结果(如,物品已放入购物篮)返回给client端。Client端接到回复后显示给用户:操作成功,物品已加入购物篮。
client端,用户点击按钮后,在client本地建立一个进程A(procedure A),进程的目的是想将一本书(book)放入购物篮,进程A将这本书放入本地的内存地址中(进程A本身并不会直接去产生调用远程服务器端的请求,而是和在本地操作一样只是将数据存储到内存中,由其它进程进行处理,将结果保存到内存中),然后进入等待状态,client端的client-stub检测到进程A在内存中存储的数据后,从内存中将数据读取出来连同需要调用的函数AddinBasket函数名一起建立一个数据包发送给服务器端的server-stub程序。
REST(Representational Status Transfer)
必须承认的是大部分的REST的实现中使用了RPC的机制,它也有client端和server端,所不同于RPC的是,它的响应函数简单来讲就是get函数和post函数,对于上面使用的购物篮问题中使用REST方法实现的化,只需要两个函数getBasket和PostBasket,getBasket函数是将服务器端当前的购物篮状态获取下来,client端想对购物篮中的物品做出操作的话,比如添加一本书,或将已经有的物品取出购物篮,直接修改修改购物篮中的物品,最后将一个新的购物篮内物品的状态(status)用postBasket方法发送给服务器。这就是REST的中心原理,即:下载服务器端的当前状态,修改之后将最终用户所期待的状态发送给服务器,服务器按照客户的期待进行修改。而不同于RPC的也就是响应函数没有那么多的,复杂的逻辑关系,函数也减少了很多,只是get和post两个。从而给服务器减少了工作量而且在逻辑上也是符合的。表面上看来REST比RPC是要先进的,但是REST的缺点在于,这种只有get和post的逻辑并不是永远有效的,并不是对一切问题都是万能的,举个例子来说:两个用户A和B使用同一个账户在网上商店购物,他们都从服务器端获得了当前购物篮中的状态,用户A向购物篮中添加了一本书,用户B在购物篮中添加了一辆自行车,随后A先向购物篮状态上传给服务器,此时服务器中购物篮里多出了一本书,此时B也把他的购物篮上传给服务器,服务器将B的购物篮状态覆盖了原有的状态,购物篮里多了一辆自行车,而A挑选的一本书在B上传后购物篮覆盖过程中被丢失了。这就造成了对用户的操作的不完全服从。这一点也成了REST的缺点。
(以上观点系本人对RPC和REST的认识如有不同的理解请予指出。愿闻其详!在这里真诚的希望国内计算机业人才也能多产生一些高精尖的理论,这样我们学习国人创造发明的新理论时能消除一知半解,不止感受到自豪,也不在那么困难了。最后愿国内的电子软件业能够繁荣昌盛!)
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/100486.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...