最近在面试过程中被问到好多次,现在想想答的都不怎么正确。其实还是自己理解的不到位,总结一下,欢迎指正。
定义
# Restful
英文全称为 Representational State Transfer,即表述性状态传递。
1. 面向资源-URL即资源
2. 使用HTTP协议
3. 使用HTTP动词(GET、POST、PUT、DELETE等)来实现资源的添加,修改,删除等操作。即通过HTTP动词来实现资源的状态扭转
1) GET 用来获取资源,
2) POST 用来新建资源(也可以用于更新资源),
3) PUT 用来更新资源,
4) DELETE 用来删除资源
4. Server和Client之间传递某资源的一个表现形式,不限制格式,xml、json等
# RPC
即远程过程调用,调用远程计算机上的服务,就像调用本地服务一样。也就是A服务器调用B服务器的方法的过程。
1. 调用原理
* 服务消费方(client)调用以本地调用方式调用服务;
* client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;
* client stub找到服务地址,并将消息发送到服务端;
* server stub收到消息后进行解码;
* server stub根据解码结果调用本地的服务;
* 本地服务执行并将结果返回给server stub;
* server stub将返回结果打包成消息并发送至消费方;
* client stub接收到消息,并进行解码;
* 服务消费方得到最终结果。
RPC的目标就是要2~8这些步骤都封装起来,让用户对这些细节透明。
2. 需要解决的问题
* 通讯,可以使用HTTP、TCP(速度快,目前框架多是它)
* 服务寻址
* 序列化,hession是种系列化组件
* 负载均衡
3. 目前的RPC框架
* Hession,除了hessian协议之外,还提供了通过servlet方式实现的RPC框架
* Dubbo
* Netty
..
区别
RPC是以动词为中心的, REST是以名词为中心的, 此处的 动词指的是一些方法, 名词是指资源.