# 《API网关》第1章:HTTP请求会话协议处理

作者:小傅哥
博客:https://bugstack.cn (opens new window)

沉淀、分享、成长,让自己和他人都能有所收获!😄

# 一、学习指引

别把我想的太大!

首先在API网关设计实现上,不要把它过于神化或把它想的太复杂。从功能角度分析,它更像是把自己伪装成 WEB 服务的 SpringMVC 工程。说白了,如果没有网关服务,也就是使用 SpringMVC 包装 RPC(Dubbo) 接口,对外提供 HTTP 接口的过程。

所以API网关的存在更像是帮我们解决了需要搭建 SpringMVC 的包装 RPC 接口的过程,只需要把 RPC 接口注册到网关,在经过 HTTP 访问就能直达 RPC 调用并返回结果。大哥:贼TM就是网关呀!

# 二、会话设计

HTTP请求到API网关,网关再去调用到对应的RPC服务,那么这样一个流程一次请求,小傅哥把它抽象为是做了一次会话操作(如果你完成了小傅哥的《手写Mybatis》 (opens new window)那么对此概念,一定不会陌生!)。

  • 之所以称之为会话,是因为一次 HTTP 请求,就要完成;建立连接、协议转换、方法映射、泛化调用、返回结果等一些列操作。而在这些操作过程中的各类行为处理,其实也类似于ORM框架,只不过一个是对数据库的处理,一个是对 RPC服务的处理。所有的学习都是举一反三,核心的设计万变不离其宗!
  • 此外之所以要单独创建出一个 api-gateway-core 的工程,是因为我们要把这个工程独立于各种容器,例如它并不是直接与 SpringBoot 一起开发,因为那样会让组件失去灵活性。它的存在更应该像是一个 ORM 框架,可以独立使用,谁也都可以结合。

这样看上去好像没啥感觉,小傅哥这里给大家做个小测试,开启一个 Socket 服务端,之后通过 HTTP 访问请求到这个服务,看看打印的信息。

  • 下载:网络调试助手(Windows):https://t.zsxq.com/04F2vbi6A (opens new window) —— Mac 版直接在 APP Store 里搜索【网络调试助手】就可以下载。
  • 测试:http://localhost:7397 —— 网络调试助手开启 TCP 服务后访问。
  • 注意:在接收区看到的信息,就是 HTTP 像你发送的网络请求协议,而我们要做的就是解析这份协议,拿到必要的请求信息之后调用到对应的 RPC 服务上去。和你ORM框架中,让 DAO 接口方法调用到对应的 Mapper XML 语句配置执行 JDBC 操作,一样一样的!