这是我参与「第五届青训营」伴学笔记创作活动的的第14天
HTTP框架实现
介绍
HTTP:超文本传输协议
协议中的内容
1.请求行/状态行:包括方法名、URL、协议版本、状态码、状态码描述
常见方法名:GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE、PATCH
状态码:
1XX:信息类
2xx:成功
3xx:重定向
4xx:客户端错误
5xx:服务端错误
2.请求头/响应头
3.请求体/响应体
请求流程
业务层
服务治理层
中间件层
路由层
协议编(解)码层
传输层
不足与展望
HTTP1:队头阻塞,传输效率低,明文传输不安全
HTTP2:多路复用,头部压缩,二进制协议
QUIC:基于UDP实现,解决队头阻塞,加密减少握手次数,支持快速启动
分层设计
1.介绍
1.专注性
2.扩展性
3.复用性
好处:高内聚、低耦合、易复用、高扩展性
2.应用层设计
提供合理的API
可理解性:如ctx.Body(), ctx.GetBody(),不要用ctx.BodyA()
简单性:如ctx.Request.Header.Peek(key)/ctx.GetHeader(key)
性质:冗余性、兼容性、可测性、可见性
3.中间件设计
中间件需求:
1.配合Handler实现一个完整的请求处理生命周期
2.拥有预处理逻辑与后处理逻辑
3.可以注册多中间件
4.对上层模块用户逻辑模块易用
洋葱模型:
适用场景:日志记录,性能统计,安全控制,事务处理,异常处理
4.路由设计
框架路由实际上就是为URL匹配对应的处理函数(Handlers)
静态路由:/a/b/c./a/b/d
参数路由:/a/:id/c (/a/b/c,/a/d/c)、/*all
路由修复: la/b <-> /a/b/
冲突路由以及优先级: /a/b、/:id/c
匹配HTTP方法
多处理函数:方便添加中间件
5.如何设计
1.明确需求:考虑清楚要解决什么问题、有哪些需求
2.业界调研:业界都有哪些解决方案可供参考
3.方案权衡:思考不同方案的取舍
4.方案评审:相关同学对不同方案做评审
5.确定开发:确定最合适的方案进行开发