目 录CONTENT

文章目录

RPC框架

FatFish1
2025-08-17 / 0 评论 / 0 点赞 / 26 阅读 / 0 字 / 正在检测是否收录...

HTTP、RESTFul、RPC

HTTP是一种网络传输协议,它定义了:

  • 请求响应模型

  • 无状态协议

  • 标准方法(GET、POST、PUT、DELETE)

  • 状态码(200、4xx、5xx)

HTTP报文结构如下:

GET /users/123 HTTP/1.1          # 请求行(方法+URI+协议版本)
Host: api.example.com            # Header
Accept: application/json

HTTP/1.1 200 OK                  # 状态行
Content-Type: application/json   # Header
{"id":123,"name":"Alice"}        # Body(响应数据)

RESTFul是一种API设计风格,它是基于HTTP协议的,它要求:

  • API设计使用标准的HTTP方法,即GET、POST、PUT、DELETE

  • 用URI作为唯一标识资源,例如chymfatfish.cn/users/123,并且为不同的方法规定了不同的资源标识方法,例如GET方法中带参的chymfatfish.cn/user/123?sex=male

  • 请求/响应包含足够信息处理数据(如Content-Type: application/json),通过Header和Body实现

  • 无状态:服务端不保存客户端状态,每次请求包含完整上下文

RESTFul API设计示例如下:

### 1. 获取用户(资源标识 + GET方法)
GET /users/123 HTTP/1.1
Host: api.example.com
Accept: application/json

### 2. 创建用户(资源集合 + POST方法)
POST /users HTTP/1.1
Content-Type: application/json
{"name": "Bob", "email": "bob@example.com"}

### 3. 更新用户(资源标识 + PUT方法)
PUT /users/123 HTTP/1.1
Content-Type: application/json
{"name": "Alice Updated"}

### 4. 删除用户(资源标识 + DELETE方法)
DELETE /users/123 HTTP/1.1

最后看RPC,经常看到这个词汇,但RPC到底是什么

其实RPC就像spring,也是一种框架,但它是一种框架模板,具体实现有很多

RPC框架的目标就是为了简化微服务架构的跨服务调用,希望可以像写接口一样实现服务之间的调用,使用RPC框架后,可以通过一些配制文件,或注解,屏蔽调一些网络通信过程中的重要环节,而这些环节也正是RPC提供的能力,同样也是传统HTTP接口调用过程中的一些关注点:

  • 通信协议选择:例如CSE支持RestFul风格的HTTP协议,Dubbo支持Dubbo协议

  • 请求/响应的序列化:RPC应该实现序列化方法,例如JSON、Protobuf等

  • 服务发现:RPC框架往往配合注册中心使用,从注册中心中请求服务地址

  • 负载均衡:内置客户端负载均衡

  • 容错熔断:集成Hystrix等

  • 调用代理:自动生成客户端代理类,让远程调用在代码层面与本地调用一致

如果没有RPC框架,我们调用一个外部接口,可能需要完成的步骤包括:

  • 封装一个标准的HTTP协议请求,并将其序列化为JSON形式,作为准备发送的网络请求数据

  • 自行找到需要调用的服务端接口地址,并且要提防对端接口地址变化

  • 如果对方服务器是多容器部署,需要考虑其容器压力,自行通过list轮询调用(即负载均衡)

  • 考虑调用过程中的异常,增加容错机制,防止调用失败导致业务失败

如果使用RPC框架,我们可能只需要一个注解,就能将一个类变成具备远程调用能力的类,业务中进行远程调用,只需要调用这个类的方法,就像本地调用一样,而RPC就会生成代理类,完成一些列的网络调用步骤

0

评论区