这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天
本文为青训营课程笔记,配合原课程食用效果更佳哦~
课程笔记
HTTP 框架的设计与实现
-
分层设计:专注性,高内聚 低耦合、扩展性、复用性
一个切实可行的复杂系统势必是从一个切实可行的简单系统发展而来的。从头开始设计的复杂系统根本不切实可行,无法修修补补让它切实可行。你必须由一个切实可行的简单系统重新开始。--- 盖尔定律
-
应用层设计
-
提供合理的 API • 可理解性:如 ctx.Body(), ctx.GetBody(),不要用 ctx.BodyA() • 简单性:如 ctx.Request.Header.Peek(key)/ctx.GetHeader(key)
-
• 冗余性 • 兼容性 • 可测性 • 可见性
-
中间件设计
-
中间件需求:
• 配合 Handler 实现一个完整的请求处理生命周期
• 拥有预处理逻辑与后处理逻辑
• 可以注册多中间件
• 对上层模块用户逻辑模块易用
-
-
路由设计
- 如何匹配 HTTP 方法?外层 Map:根据 method 进行初步筛选
- 如何实现添加多处理函数?在每个节点上使用一个 list 存储handler
-
协议层设计
-
抽象出合适的接口:
- Do not store Contexts inside a struct type; instead, pass a Context explicitly to each function that needs it. The Context should be the first parameter.
- 需要在连接上读写数据
-
-
网路层设计
- go net“BIO”用户管理 buffer
-
如何做设计
- 明确需求:考虑清楚要解决什么问题、有哪些需求
- 业界调研:业界都有哪些解决方案可供参考
- 方案权衡:思考不同方案的取舍
- 方案评审:相关同学对不同方案做评审
- 确定开发:确定最合适的方案进行开发
-
总结
API 设计:可理解性、简单性... 中间件设计:洋葱模型 路由设计:前缀匹配树 协议层设计:抽象出合适的接口 网络层设计:网络模型
-
总结收获
通过样例与知识点结合的方式,学到了一些 HTTP框架的相关知识 ;
通过样例的讲解,更了解了具体的 HTTP技术 ;
又是收获满满的一天
引用参考
青训营官方课程视频
青训营官方课程文档
青训营官方课程笔记